zoukankan      html  css  js  c++  java
  • ASP.NET Core中防跨站点请求伪造

    CSRF(Cross-site request forgery)利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

    例子

    在某个论坛管理页面,管理员可以在list页面执行删除帖子操作,根据URL判断删除帖子的id,像这样的一个URL

    http://localhost/list?action=delete&id=12
    

    当恶意用户向管理员发送包含CSRF的邮件,骗取管理员访问http://test.com/csrf,在这个恶意网页中只要包含这样的html语句就可以利用让管理员在不知情的情况下删除帖子了

    <img alt="" arc="http://localhost/list?action=delete&id=12"/>
    

    这种恶意的网址可以有很多种形式,藏身于网页中的许多地方。此外,攻击者也不需要控制放置恶意网址的网站。例如他可以将这种地址藏在论坛,博客等任何用户生成内容的网站中。这意味着如果服务端没有合适的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险。

    透过例子能够看出,攻击者并不能通过CSRF攻击来直接获取用户的账户控制权,也不能直接窃取用户的任何信息。他们能做到的,是欺骗用户浏览器,让其以用户的名义运行操作

    解决方案

    • 检查Referer字段
    • 添加校验token。使用攻击者无法伪造的数据作为校验

    ASP.NET Core中提供了防伪造令牌,这样的令牌需要从用户应该使用的表单中创建,以输入有效数据,并在接受数据时进行验证。

    <form asp-controller="Home" asp-action="Edit" method="post">
        @Html.AntiForgeryToken()
        <input type="text" />
        <input type="text" />
        <input type="submit" value="Submit" />
    </form>
    

    运行应用程序时,可以看到一个隐藏的表单字段,其中包含自动生成的令牌。当检索这个数据时,使用ValidateAntiForgeryToken属性对标记进行验证。

    [HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult Edit(EditModel model) => View("EditResult", model);
    
  • 相关阅读:
    SpringBoot学习之配置Redis
    安全测试12使用nmap工具识别系统指纹信息
    安全测试11nmap扫描开放的端口
    安全测试17渗透攻击Mysql数据库服务
    安全测试18渗透攻击Tomcat服务
    安全测试16漏洞扫描工具Nikto详细使用教程
    实用且靠谱的18个免费引流推广方法
    安全测试15Maltego详细使用教程
    安全测试14ARP侦查工具Netdiscover
    统计本机tcp连接情况分离排查问题
  • 原文地址:https://www.cnblogs.com/rohmeng/p/11154860.html
Copyright © 2011-2022 走看看