zoukankan      html  css  js  c++  java
  • .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开发实战 肖伟宇

  • 相关阅读:
    try catch finally语句块中存在return语句时的运行流程
    【Java学习】异常
    【Java学习】面向对象(二)——封装、继承、多态、抽象
    【ASP.NET开发Web项目】vs2019新建ASP.NET空网站,没有出现Default.aspx
    【ASP.NET开发Web项目】VS2019项目模板中没有ASP.NET空网站
    【Java学习】面向对象(一)
    【Java学习】数组的初始化、特点及基础操作(冒泡排序)
    Jmeter接口测试和压力测试的配置和使用
    【Java学习】递归算法之斐波那契数列、100以内的阶乘
    【Java学习】进制转换、二进制原码反码补码和位运算
  • 原文地址:https://www.cnblogs.com/wangzhe66369/p/15171009.html
Copyright © 2011-2022 走看看