首页 > 代码库 > 堵上NFine的SubmitForm漏洞
堵上NFine的SubmitForm漏洞
NFine有一个隐藏的漏洞,就是任何登录的用户都可以进行权限修改操作,
比如所有模块的SumbitForm或者其它弹出窗口上的按钮,本身只有登录权限验证,只要是登录用户就可以直接通过模拟Post,Get请求直接进行修改操作。
为了解决这个问题,本文实现一个权限管理办法,防止直接绕过验证,以ItemsData为例,下面上代码。
[HttpPost] [HandlerAjaxOnly] [HandlerAuthorize(true, @"/SystemManage/ItemsData/Form")] [ValidateAntiForgeryToken] public ActionResult SubmitForm(ItemsDetailEntity itemsDetailEntity, string keyValue) { itemsDetailApp.SubmitForm(itemsDetailEntity, keyValue); return Success("操作成功。");
注意HandlerAuthorize与原有的有什么不同,可能有人会问,为什么要使用/SystemManage/ItemsData/Form,因为这个模块的修改按钮权限就是这个,为了保持一致性。
public bool Ignore { get; set; } public string AuthorizeAction { get; set; } public HandlerAuthorizeAttribute(bool ignore = true,string authorizeAction="") { Ignore = ignore; AuthorizeAction = authorizeAction; }
原有的moduleId使用的cookie,根本就是防君子不防小人,而且影响判断,所以去掉。
private bool ActionAuthorize(ActionExecutingContext filterContext) { var operatorProvider = OperatorProvider.Provider.GetCurrent(); var roleId = operatorProvider.RoleId; var moduleId = ""; var action = HttpContext.Current.Request.ServerVariables["SCRIPT_NAME"].ToString(); if (!string.IsNullOrEmpty( AuthorizeAction))//指定需要某Action权限 { action = AuthorizeAction; } return new RoleAuthorizeApp().ActionValidate(roleId, moduleId, action); }
public bool ActionValidate(string roleId, string moduleId, string action) { .... else { authorizeurldata = http://www.mamicode.com/cachedata;>
堵上NFine的SubmitForm漏洞
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。