CSRF (Cross-site request forgery)
跨站请求伪造
也被称为One ClickAttack 或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
它通过伪装来自受信任用户的请求来利用受信任的网站。
与XSS攻击相比,CSRF攻击性往往不大流行 (因此对其进行防范的资源也相对少) 和难以防范,所以被认为比XSS更具危险性。
CSRF漏洞原理
利用用户在目标网站上已经建立的信任关系来执行未经授权的请求。攻击者通过诱使受害者在浏览器中执行恶意请求,使目标网站误认为这些请求是合法的受害者登录目标网站,生成与其身份关联的凭证(Cookie) 。
攻击者构造恶意页面,其中包含攻击出者构造的未经授权的请求。
攻击者诱导受害者访问恶意页面,使其在浏览器中加载。
恶意页面中的恶意请求自动执行,由于受害者已登录并保存了相关凭证,浏览器会自动发送包含用户凭证的请求至目标网站。
目标网站接收到来自受害者浏览器的请求,由于无法判断请求的来源是否合法,错误地认为是合法请求,执行恶意操作。
攻击成功,攻击者利用受害者的身份执行未经授权的请求,可能导致各种后果
CSRF
1.假设用户登录他的银行账户,并在浏览器中保持会话。
2.同时,用户还在另一个选项卡中打开了一个恶意网站,该网站上包含了一个恶意表单,其目标是执行转账操作。
3.当用户点击恶意网站上的按钮时,实际上是提交了一个跨站请求到银行网站,请求中包含了执行转账的指令。
4.由于用户已经在银行网站上登录并保持了会话,浏览器会自动将相关的身份认证信息 (如Cookie) 包含在请求中。
5.银行网站接收到该请求时,会错误地认为这是用户的合法请求,并执行转账操作,将资金转移到攻击者指定的账户上受害者与第三方网站做交互
XSS
1.假设有一个社交媒体网站,允许用户在他们的个人资料中输入自我介绍
2.攻击者lm在他的个人资料中注入了一段恶意的JavaScript代码。
3.当其他用户访问lm的个人资料页面时,他们的浏览器会执行该恶意JavaScript代码
4.恶意代码可能用于窃取其他用户的会话令牌、发送恶意请求、篡改页面内容或其他恶意行为受害者直接与目标网站做交互
CSRF漏洞是利用用户在目标网站上的信任关系来执行未经授权的请求,而XSS漏洞则是通过在网站上注入恶意代码来影响其他用户的浏览器行为。
CSRF攻击利用了用户的身份,而XSS攻击则利用了网站上的安全漏洞,允许攻击者在其他用户的浏览器上执行恶意代码。这两种漏洞类型需要采取不同的安全措施进行预防和防御。
CSRF漏洞危害
未经授权的操作: 攻击者可以修改受害者的个人资料、发送钓鱼邮件、发布垃圾信息,甚至执行资金转账等操作,而受害者并不知情。
信息泄露: 攻击者可以构造一个请求,使受害者的浏览器在访问恶意网页时发送带有用户敏感信息的请求,进而将这些信息发送给攻击者。
篡改数据: 攻击者可以构造恶意请求,使受害者的浏览器在访问恶意页面时自动执行请求,从而修改用户的数据,包括个人信息、文章内容、评论等。
恶意操作传播: 如果目标网站允许用户之间互相信任并进行操作,攻击者可以利用CSRF漏洞将恶意操作传播给其他受信任的用户。这可能导致更广泛的影响和攻击扩散。
损害用户信任和声誉: 如果用户发现他们的账户遭受了未经授权的操作,他们可能会失去对目标网站的信任,这可能对网站的声誉和业务造成负面影响。
防范CSRF漏洞
启用同源策略(Same-Origin Policy)
浏览器的同源策略可以防止跨域请求,因此确保目标网站只接受来自相同域名的请求。这样可以防止攻击者通过恶意网站发送伪造的跨站请求
使用CSRF令牌(CSRF Token)
在网站中实施CSRF令牌是一种常见的防御方法。每次向服务器发送请求时,都要在请求中包含一个随机生成的令牌。服务器在接收到请求时验证令牌的有效性,如果令牌无效,请求将被拒绝。这样可以防止攻击者伪造请求,因为攻击者无法获取有效的CSRF令牌。
验证HTTP Referer头
在服务器端验证请求的Referer头可以检查请求的来源。只接受来自合法来源的请求,拒绝来自其他网站的请求。然而,值得注意的是,Referer头并不总是可靠,因为它可以被篡改或者某些浏览器可能不会发送该头部信息。