java代码学习(五)——csrf漏洞

csrf介绍

跨站点请求伪造 (CSRF) 是一种攻击类型,当恶意网站、电子邮件、博客、即时消息或程序导致用户的 Web 浏览器在用户通过身份验证时在受信任站点上执行不需要的操作时,就会发生这种攻击。CSRF 攻击有效,因为浏览器请求会自动包含所有 cookie,包括会话 cookie。因此,如果用户通过了站点的身份验证,站点就无法区分合法的授权请求和伪造的身份验证请求。当使用适当的授权时,这种攻击会被阻止,这意味着需要一种质询-响应机制来验证请求者的身份和权限。

成功的 CSRF 攻击的影响仅限于易受攻击的应用程序暴露的能力和用户的权限。例如,这种攻击可能会导致资金转移、更改密码或使用用户凭据进行购买。实际上,攻击者使用 CSRF 攻击使目标系统通过受害者的浏览器执行功能,而受害者不知道,至少在未经授权的交易被提交之前。

csrf攻击类型

GET类型的CSRF

<img src="http://bank.example/withdraw?account&=xx&amount=100&to=hacker" >

受害者访问了html标签里有img属性的页面以后,就会向该网站发送一个http请求,该网站也会收到包含受害者登录信息的一次跨域请求。

Post类型的CSRF

<form action = "https://bank.example/withdraw" method="POST"> <input type="hidden" name="account" value="xx" /> <input type="hidden" name="ammount" value="100" /> <input type="hidden" name="for" value="hacker" /> </form> <script> document.forms[0].submit(); </script>

访问带有该表单的页面以后会向bank网站发送一次post请求。

链接类型的CSRF

这种类型的csrf需要用户点击链接才能触发,通常会诱骗用户点击。各位lsp请注意一下

csrf的防御

同源

在HTTP协议中,每一个异步请求都会携带两个Header,用于标记来源域名:

  Origin Header

  Referer Header

这两个Header不能由前端自定义内容。 服务器通过解析这两个Header中的域名,确定请求的来源域。

同步器令牌模式

CSRF 令牌在服务器端生成,它们可以为每个用户会话或每个请求生成一次。每个请求令牌比每个会话令牌更安全。在初始生成令牌后的每个会话令牌实现中,该值存储在会话中并用于每个后续请求,直到会话过期。

不应使用 cookie 传输 CSRF 令牌

CSRF 令牌可以通过隐藏字段、标题添加,并且可以与表单和 AJAX 调用一起使用。GET 请求中的 CSRF 令牌可能会在多个位置泄露。

双重提交 Cookie

双重Cookie采用以下流程:

  双重Cookie采用以下流程:

  在用户访问网站页面时,向请求域名注入一个Cookie,内容为随机字符串(例如csrfcookie=v8g9e4ksfhw)。

  在前端向后端发起请求时,取出Cookie,并添加到URL的参数中(接上例POST https://www.a.com/comment? csrfcookie=v8g9e4ksfhw)。 

  后端接口验证Cookie中的字段与URL参数中的字段是否一致,不一致则拒绝。

posted @ 2021-12-30 16:26  Cold灬  阅读(626)  评论(0编辑  收藏  举报