概念
CSRF (Cross-site request forgery,跨站请求伪造)也被称为One Click Attack或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受用户信任请求受信任的网站。
CSRF攻击的原理
利用了Web应用程序对用户的请求缺乏验证机制。攻击者通过构造一个恶意网页,当受害者访问该网页时,其中的恶意代码会自动触发对目标网站的请求,这些请求会携带受害者的身份凭证(如Cookie),从而绕过了用户的意愿进行一些恶意操作。
1.请求伪造
2.使用text、plain
3.将数据拼接成json串
CSRF(跨站请求伪造)漏洞并不直接通过JSESSIONID本身来实现,但JSESSIONID作为用户会话的标识,在CSRF攻击中起到了关键的作用。
CSRF攻击的原理是,攻击者利用受害者的已认证会话(即包含JSESSIONID的Cookie)来执行未经授权的恶意操作。这是因为当用户访问一个网站并登录后,服务器会为该用户创建一个会话(Session),并通过JSESSIONID这个Cookie来识别和管理这个会话。
在CSRF攻击中,攻击者会诱使受害者点击一个恶意链接或访问一个包含恶意代码的页面。这个恶意链接或页面会向目标网站发送一个伪造的请求,由于受害者的浏览器中已经包含了JSESSIONID这个Cookie,因此这个伪造的请求会携带受害者的会话信息。目标网站在接收到这个请求时,无法区分这个请求是来自受害者本人还是攻击者,因此会执行请求中的操作。
为了防范CSRF攻击,可以采取以下措施:
1.HTTP请求的来源:服务器在接收到请求时,可以通过检查请求的HTTP头中的Referer字段来判断请求的来源。如果请求的Referer字段不是来自本网站,那么可以拒绝该请求。但需要注意的是,Referer字段可以被伪造,因此这种方法并不是完全可靠的。
2.使用CSRF令牌(Token):服务器在生成表单或链接时,可以附带一个唯一的CSRF令牌。这个令牌在服务器端进行验证,只有包含正确令牌的请求才会被执行。由于CSRF令牌是服务器端生成的,并且每次请求都会变化,因此攻击者无法伪造这个令牌。
3.设置Cookie的属性:将包含JSESSIONID的Cookie设置为HttpOnly和Secure属性。HttpOnly属性可以防止客户端脚本(如JavaScript)访问Cookie,从而减少被窃取的风险;Secure属性则要求Cookie只能通过HTTPS协议传输,从而防止在传输过程中被截获。
4.接口验证码(弃用)