.netcore 安全(防攻击)

1. 反跨站请求伪造
攻击过程

攻击核心

  1. 用户已登录"好站点"
  2. 好站点通过Cookie存储和传递身份信息.
  3. 用户访问黑客攻击页面的站点"怀站点"

如何防御

  1. 不使用Cookie来存储传输身份信息,(Cookie不受我们控制,每次请求都会携带,可以是用jwt,而jwt的Token是同域名下的脚本才能发起,Token是同域名下运行脚本,从我们的Token的存储里面获取 如localStorage).
  2. 使用AntiforgeryToken机制来防御如果使用Cookie存储和传递身份信息的话,可以用这种方式来防御跨站请求是比较推荐的方式.
  3. 避免是用get作为业务请求的方法,使用get意味着公交脚本更容易构造

services.AddAntiforgery(option => {
option.HeaderName = "X-CSRF_TOKEN";
});
防跨站脚本攻击的策略是首先在要求http把我们定义的Header值带过过来,跟cookie的值对比,如果不一致认为是攻击.
攻击网站因为没法使用脚本设置header,也没法获取好站点的Cookie,因此没法构造一个header的值.
业务变更尽量使用post,如果是get 比如img标签
[ValidateAntiForgeryToken] 在方法上
[AutoValidateAntiForgeryToken] 在controller上,仅作用于Post.

2.防开放重定向攻击

攻击过程

攻击核心

  1. "好站点"的重定向未验证目标URL
  2. 用户访问"怀站点"
    防范措施
  3. 使用LocalRedirect来处理重定向
  4. 验证重定向的域名是否合法

防跨站脚本
攻击过程

防范措施

  1. 对用户提交内容进行验证,拒绝恶意脚本
  2. 对用户提交的内容进行urlencoder, javaScriptEncoder
  3. 慎用HtmlString和HtmlHelper.Raw
  4. 身份信息Cookie设置为HttpOnly
  5. 避免使用Path传递带有不受信任的字符,使用Query进行传递

跨域请求

  1. 方案相同(HTTP/HTTPS)
  2. 主机(域名)相同
  3. 端口相同
    如果这三个相同,认为是同源

CORS是什么

  1. CORS是浏览器允许跨域发起的请求"君子协定"
  2. 它是浏览器行为的协议
  3. 它并不会让服务器拒绝其他途径发起的HTTP请求
  4. 开启时需要考虑是否存在被恶意网站攻击的情形

跨域的并不影响浏览器的同域请求,还有像postmanhttpclient
它只会影响浏览器是否允许在其他域下面通过脚本发起跨域请求

预检请求(options)会包含下面信息

预检响应(options)会包含下面信息

默认支持的Expose Headers

        services.AddCors(p =>
        {
            p.AddPolicy("api", builder =>
            {
                builder.WithOrigins("https://localhost:5003").AllowAnyHeader().AllowCredentials().WithExposedHeaders("abc");
            });

        });

[EnableCors("abc")]

[DisableCors]

来着 极客时间 .NET Core开发实战 肖伟宇

原文地址:https://www.cnblogs.com/wangzhe66369/p/15171009.html