CSRF的攻击方式详解
CSRF(Cross-site request forgery)跨站请求伪造,也被称为:One Click Attack / Session Riding,缩写为 CSRF/XSRF。
CSRF攻击的核心是攻击者盗取了用户的身份信息,在用户不知情的情况下发送了恶意请求,通过这种方式来达到攻击的目的。
一、攻击过程
攻击者需要先构造一个可以自动提交的请求,然后诱导受害者点击链接或者访问页面,让受害者的浏览器发送该请求,完成攻击目的。
攻击具体流程如下:
1. 攻击者构造好恶意请求参数;
2. 攻击者让用户打开一个链接,或者通过其他方式访问页面,该页面会自动转发到恶意请求的URL;
3. 受害者的浏览器自动按照恶意请求的参数向服务器发起请求,而此时服务器无法区分是真实用户发送的请求还是CSRF攻击者伪造的请求,因此完成攻击。
二、攻击实例
1. 收藏操作
假设一个网站上有收藏功能,用户收藏自己的喜欢的内容时会向服务器发送一个 POST 请求,请求中需要通过传递参数来标识收藏的是哪条内容。
攻击者可以在自己的网站上放置一个链接,链接的内容是收藏操作的URL,然后把自己的链接发给了一个受害者。当受害者在不知情的情况下点击链接时,它自动向目标站点发起收藏请求,从而完成攻击。
2. 链接篡改
一个常见的场景是:用户在 A 网站登录后,访问了 B 网站,而 B 网站中会请求 A 网站的资源。此时如果 B 网站存在 CSRF 漏洞,攻击者可以在 B 网站页面中插入链接,篡改 A 网站的资源请求,使得受害者在浏览器中执行了攻击者篡改的恶意请求。
三、防御措施
为了防御 CSRF 攻击,需要在服务器端或客户端进行相应措施:
1. 验证请求头Referer
服务器可以通过请求头Referer来判断一个请求是否是合法的,如果一个请求的Referer与当前页面的域名不一致则拒绝该请求。
2. 验证请求参数token
服务器生成一个随机的token值,并将其存储在用户的Session中,每次向服务器提交请求时,都需要携带该token,服务器会验证该token的合法性,从而防止CSRF攻击。
3. 验证请求头Origin
服务器可以通过请求头Origin来判断一个请求是否是合法的,如果一个请求的Origin与当前页面的域名不一致也拒绝该请求。
总之,为了防止CSRF攻击,需要至少采取以上两种措施(验证Referer和Token),组合防御最佳。除此之外,各个网站应该制定自己的防御策略,以提高防御能力。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:CSRF的攻击方式详解 黑客必备知识 - Python技术站