CSRF-跨站脚本攻击与防御-简洁记录

定义

Cross Site Request forgery.是一种通过挟制用户在当前已登录网站执行非本意操作的攻击方法。简单来讲是因为服务器对用户的身份只进行了简单的验证,只验证请求是否从用户的浏览器发出的,但未对是否是用户本身自愿发出的进行验证;此时攻击者诱导用户点击恶意网址,执行js代码,在用户不知情的情况下,携带Cookie信息向已登录的服务器发出请求,服务器则会执行请求,造成伤害。

流程

1.用户访问受信任网站A并登录,获取到Cookie。
2.在用户未退出登录时,用户在同一浏览器访问了恶意网战B。
3.网站B包含了恶意代码,发出对网站A的请求
4.浏览器携带Cookie向网站A发出请求
5.网站A以用户的权限执行请求,造成攻击

防御

1.验证HTTP的Referer字段,并编写完善的判断逻辑(Referer记录了HTTP请求的来源地址,可能出现为保证用户隐私,Referer字段不设置的情况)
2.双重身份验证:服务端给予CSRFtoken,用户端将其存入session,在每次请求时,取出token带入HTTP请求头或者拼接在请求地址后传给服务端,服务端则可以通过token验证是否时用户自愿发出的请求。
3.启用SameSite
Samesite是cookie的属性,用于控制 Cookie 在跨站请求时是否被发送。

Cookie:sessionId;SameSite=Strict

strict:规定只允许相同的Site携带Cookie
lax:POST|PUT|DELETE等请求不会携带Cookie,其余都会携带Cookie
none:允许跨域,但必须使用HTTPS
4.限制使用GET请求获取或修改数据,甚至不使用GET,尽量使用POST

5.对一些操作增加验证码,强制用户与应用进行交互才能完成请求

posted @ 2025-10-13 15:01  DurianTRY  阅读(16)  评论(0)    收藏  举报