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.对一些操作增加验证码,强制用户与应用进行交互才能完成请求
由于无法解释的神圣旨意,我们徒然地到处找你;你就是孤独,你就是神秘,比恒河或者日落还要遥远。。。。。。