zoukankan      html  css  js  c++  java
  • 堵上NFine SubmitForm漏洞

    NFine一个隐藏的漏洞(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 = cachedata;
                }
                //authorizeurldata = authorizeurldata.FindAll(t => t.F_Id.Equals(moduleId));
                foreach (var item in authorizeurldata)
                {
                    if (!string.IsNullOrEmpty(item.F_UrlAddress))
                    {
                        string[] url = item.F_UrlAddress.Split('?');
                        //if (item.F_Id == moduleId && url[0] == action)
                        if (url[0] == action)
                        {
                            return true;
                        }
                    }
                }
                return false;
    

      

  • 相关阅读:
    极客技术专题【008期】:CSS3核心技术:选择器
    10670 Work Reduction (贪心 + 被题意坑了- -)y
    hdu 4617 : Weapon
    [poj 2186]Popular Cows[Tarjan强连通分量]
    caldera
    linux内核书籍
    DedeCMS Error:Tag disabled:"php"的解决办法
    China特色创新现状
    麒麟OS剽窃
    国产系统
  • 原文地址:https://www.cnblogs.com/zhaogaojian/p/6080521.html
Copyright © 2011-2022 走看看