• MVC WEB安全——XSS攻击防御


    XSS(跨站脚本攻击)

    描述:

    原理:攻击者往Web页面里插入恶意代码,当用户浏览该页之时,嵌入其中Web里面的代码会被执行,从而达到攻击用户的特殊目的。

    类别

    1)被动注入(Passive Injection)。用户将恶意代码输入到表单中,保存到数据库,然后再显示在网站上;

    2)主动注入(Active Injection)。用户将恶意代码输入到文本框中并将输入的内容立刻在屏幕上显示出来。

    XSS攻击在Web上排名第一,遗憾的是,导致XSS猖獗的原因是Web开发人员不熟悉这种攻击(好遗憾哦。。。)。

    避免:

    1)对所有内容都进行HTML编码;

          Razor引擎默认对输出内容进行HTML编码。如:@Model.FirstName。

          如果非Razor引擎,则如:

    <% Html.Encode(Model.FirstName) %>

    2)使用Html.AttributeEncode和Url.Encode;

          

    <a href=”<%= Url.Action(“Index”,"home”,new { name = ViewData[“name”]})%>">点击我</a>

           将name改为:

    "></a><script src = “http://abcd.evil.com”></script><a href= "
        则攻击成功。 

          编码1:

    <a href=”<%= Url.Action(“Index”,”home”,new { name = Html.AttributeEncode(ViewData[“name”])})%>”>点击我</a>

          编码2:

    <a href=”<%= Url.Encode(Url.Action(“Index”,”home”,new { name = ViewData[“name”] }))%>”>点击我</a>

    3)对Ajax.JavaScriptStringEncode进行JavaScript编码。

          如

    var searchItem = “@Html.Raw(Ajax. JavaScriptStringEncode(Model))”;

    4)将AntiXss库作为ASP.NET的默认编码器。

    反模式:

    1)使用

    Html.Raw(Model.ReturnUrl)
    绕过编码;

    2)使用

    [AllowHtml]
    对模型的属性禁用请求验证;

    3)使用

    [ValidateInput(false)]
    对Controller或者Action禁用请求验证。
  • 相关阅读:
    c++ 动态判断基类指针指向的子类类型(typeid)
    qt在GUI显示时,将调试信息输出到控制台的设置
    Qt库版查询
    Qt动态库静态库的创建、使用、多级库依赖、动态库改成静态库等详细说明
    ICMP timestamp 请求响应漏洞
    linux 防火墙 ufw使用
    MySQL--binlog和relay log的生成和删除
    SSD 相关基础知识
    python36--将数据保存为excel
    MySQL 5.7并发复制和mysqldump相互阻塞引起的复制延迟
  • 原文地址:https://www.cnblogs.com/pengzhen/p/3801140.html
Copyright © 2020-2023  润新知