zoukankan      html  css  js  c++  java
  • IBM AppScan 安全漏洞问题修复(.net)

    按问题类型分类的问题

    1. 使用 SQL 注入的认证旁路2
    2. 已解密的登录请求3
    3. 登录错误消息凭证枚举1
    4. 会话标识未更新2
    5. 跨站点请求伪造1
    6. Missing "Content-Security-Policy" header 9
    7. Missing "X-Content-Type-Options" header 9
    8. Missing "X-XSS-Protection" header 9
    9. 查询中接受的主体参数1
    10. 启用了 Microsoft ASP.NET 调试2
    11. 缺少跨帧脚本编制防御1
    12. 已解密的 __VIEWSTATE 参数1
    13. 检测到应用程序测试脚本1
    14. 应用程序错误9
    15. 整数溢出3

    问题修复 

    1.使用 SQL 注入的认证旁路

    答: 登录、注册页面输入信息,过滤sql关键字或关键字符;
    提交表单页面、查询页面的输入项,过滤sql关键字或关键字符。
    // 关键字
    string StrKeyWord = @"select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|exec master|netlocalgroup administrators|:|net user|""|or|and";
    //关键字符
    string StrRegex = @"[-|;|,|/|(|)|[|]|}|{|%|@|*|!|']";

     最佳的解决方法是 参数化查询,防止sql注入漏洞攻击。 

    2.已解密的登录请求

    答:一种说法是使用SSL证书,暂时没有解决。

    3.登录错误消息凭证枚举

    答:用户登录时,如果输入错误的用户信息,最好提示同一个错误消息提醒,比如:你的用户名或密码输入错误。提供枚举提示,容易被暴力破解。

    4.会话标识未更新

    答:登录之后更改会话标识符,主要用于登录页面。

    参考方案: http://www.2cto.com/Article/201302/190228.html 测试没有效果
    http://blog.itpub.net/12639172/viewspace-441971/ 测试ok
    在登录页面,添加红线加粗部分
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!IsPostBack)
      {
        Session.Abandon();
        //清除SessionId
        Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
        txt_Fileld1.Focus();
      }
    }

    5.跨站点请求伪造

    答:每个页面请求时,判断主机和端口与配置文件信息是否一致。
    网上参考方法:
    1,利用referer判断,
    但是用户有可能设置浏览器使其在发送请求时不提供 Referer,这样的用户也将不能访问网站。
    2,在请求中添加 token 并验证
    关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中,
    可以在服务器端生成一个随机码,然后放在form的hidden元素中,form提交的时候在服务器端检查。

    6.Missing "Content-Security-Policy" header

    答: 在web.config 配置文件中添加如下响应头
    <system.webServer>
      <httpProtocol>
        <customHeaders>
          <add name="X-Content-Type-Options" value="nosniff"/>
          <add name="X-XSS-Protection" value="1;mode=block"/>
          <add name="X-Frame-Options" value="SAMEORIGIN"/>
          <add name="Content-Security-Policy" value="default-src 'self'"/>
        </customHeaders>
      </httpProtocol>
    </system.webServer>

    7.Missing "X-Content-Type-Options" header

    答: 在web.config 配置文件中添加如下响应头,添加节点见 第6 个问题

    <add name="X-Content-Type-Options" value="nosniff"/>

    8.Missing "X-XSS-Protection" header

    答: 在web.config 配置文件中添加如下响应头,添加节点见 第6 个问题
    <add name="X-XSS-Protection" value="1;mode=block"/>

    9.查询中接受的主体参数

    答:未解决

    10.启用了 Microsoft ASP.NET 调试

    答:应用程序发布后,修改配置文件节点compilation 的属性 debug为 false。
    <compilation debug="false" targetFramework="4.0"/>

    11.缺少跨帧脚本编制防御

    答:在web.config 配置文件中添加如下响应头,添加节点见 第6 个问题
    <add name="Content-Security-Policy" value="default-src 'self'"/>

    注意,添加之后,可能会出现不同浏览器,出现兼容性问题,会有不同的反应。比如,极速模式会出现页面内部css无效。

    12.已解密的 __VIEWSTATE 参数

    答:在web.config 配置文件中添加 pages 的属性viewStateEncryptionMode 为Always。
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" viewStateEncryptionMode="Always" />

    13.检测到应用程序测试脚本

    答: 在系统开发过程中,添加的测试页面,在程序发布前需要“从项目中排除”后再发布。

    14.应用程序错误

    答:出现应用程序错误页面。
    如 :Server Error in '/' Application.

    一是解决属于开发人员的应用程序错误问题,二是在配置文件添加默认出错页面 

    <customErrors mode="On" defaultRedirect="~/error.html" />
    15.整数溢出

    答:情况一:针对请求的url中的参数, 检查其数据类型及边界范围。
    如 /ApplyShow.aspx?id=99999999999999999999
    情况二:登录页面按钮参数,在请求正文里,未找到原因???
    http://localhost:83/login.aspx 实体: ImgbtnDl.y (Parameter)

    16.WebResource.axd

    WebResources.axd?d=xyz。
    WebResource.axd有一个特点,便是会对错误的密文(即d=xyz中的xyz)产生500错误,而对正确的密文产生404错误,这便形成了足够的提示

    参考资料:
    http://www.2cto.com/Article/201009/75162.html

    http://pan.baidu.com/share/link?shareid=3851057069&uk=2164275402

    http://www.cnblogs.com/JeffreyZhao/archive/2010/09/25/things-about-padding-oracle-vulnerability-in-asp-net.html

    http://www.cnblogs.com/shanyou/archive/2010/09/25/1834889.html Padding Oracle Attack 检测工具

    解决方法: http://www.cnblogs.com/shanyou/archive/2010/09/24/1833757.html  中文版
    http://weblogs.asp.net/scottgu/important-asp-net-security-vulnerability   英文版

    步骤一.添加配置节点

    .net 3.5 及以前版本,添加配置节点
    <customErrors mode="On" defaultRedirect="~/error.html" />
    .net 3.5 SP1 或 .net 4.0添加如下配置节点,注意加粗部分必须
    <customErrors mode="On" defaultRedirect="~/error.aspx" redirectMode="ResponseRewrite" /> 

    步骤二.添加默认错误页面

    <%@ Page Language="C#" AutoEventWireup="true" %>
    <%@ Import Namespace="System.Security.Cryptography" %>
    <%@ Import Namespace="System.Threading" %>
    
    <script runat="server">
       void Page_Load() {
          byte[] delay = new byte[1];
          RandomNumberGenerator prng = new RNGCryptoServiceProvider();
    
          prng.GetBytes(delay);
          Thread.Sleep((int)delay[0]);
            
          IDisposable disposable = prng as IDisposable;
          if (disposable != null) { disposable.Dispose(); }
        }
    </script>
    
    <html>
    <head runat="server">
        <title>Error</title>
    </head>
    <body>
        <div>
            An error occurred while processing your request.
        </div>
    </body>
    </html>
    

      

      如果谁有更好的解决方法 ,谢谢提供!

  • 相关阅读:
    会议总结
    排球比赛积分规则
    我的计算机历程和认识
    排球积分程序
    《如何成为一个高手》观后感
    十八周总结
    十六周总结(流程)
    排球计分程序
    十四周学习总结
    十三周学习总结
  • 原文地址:https://www.cnblogs.com/anngeiBKY/p/4952269.html
Copyright © 2011-2022 走看看