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());
});
原文地址:https://www.cnblogs.com/cqqinjie/p/13303046.html