zoukankan      html  css  js  c++  java
  • asp.net core2 mvc 基础教程-- XSS & CSRF

    XSS

    Cross-Site Scripting 跨站脚本攻击:攻击者将客户端脚本注入到其他用户查看的网页中。

    不被信任的数据:

    • HTML input
    • HTTP Headers
    • Query strings
    • Attributes,EXIF 信息

    防止 XSS

    • HTML Encoding:> 变成 &gt;    < 变成 &lt;
    • Razor 默认开启了 HTML Encoding,可以手动关闭
    • 正则表达式
    • 反 XSS 的第三方库
    • 对请求进行验证

    内置的编码器

    • HtmlEncoder
    • JavaScriptEncoder
    • UrlEncoder

    通过 Html.Raw 输出的内容不会被  HTML-encoding:

    <p class="card-text">
        by @Html.Raw(Model.Artist) @@ @Model.ReleaseDate.ToString("yyyy-MM-dd")
    </p>
     

    CSRF

    Cross-Site Reqest Forgery 跨站请求伪造

    image.png

    OWASP 的 CSRF 防范方案

    • Header 验证
    • Synchronizer Token Pattern
    • 服务器发送随机字符串到客户端,客户端下次请求时需要把字符串原封不动返回去
    • Double Submit Cookie
    • 服务器发送随机字符串到客户端,客户端返回的请求和 Cookie 里面都要包含原封不动的字符串

    ASP.NET Core:Synchronizer Token Pattern

    Docs:Prevent Cross-Site Request Forgery (XSRF/CSRF) attacks in ASP.NET Core

    • [ValidateAntiForgeryToken]:对单个 Action 启用
    • [AutoValidateAntiForgeryToken]:对所有 POST 启用
    • [IgnoreAntiForgeryToken]:关闭单个 Action 的验证

    启用后生成的 token:

    image.png

    在 Startup 里面配置 AntiForgeryToken:

    services.AddAntiforgery(options =>
    {
        // Set Cookie properties using CookieBuilder properties†.
        options.FormFieldName = "AntiforgeryFieldname";
        options.HeaderName = "X-CSRF-TOKEN-HEADERNAME";
        options.SuppressXFrameOptionsHeader = false;
    });
    services.AddMvc(options =>
    {
        options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
    });
  • 相关阅读:
    软件工程第二次作业
    软件工程第1次作业
    软件工程第0次作业
    第4次作业-案例分析
    第3次作业-四则运算
    第2次作业-效能分析
    第1次作业-词频统计
    第0次作业
    关于 石墨文档客户端 的案例分析
    结对编程
  • 原文地址:https://www.cnblogs.com/cqqinjie/p/13303046.html
Copyright © 2011-2022 走看看