CSRF攻击
简介
CSRF(Crose-Site Request Forgery:跨站请求伪造),攻击者利用服务器对用户的信任,从而欺骗受害者去服务器上执行受害者不知情的请求。
攻击者挟持用户账号执行非用户本意的操作。
在 CSRF 的攻击场景中,攻击者会伪造一个请求(一般为链接),然后欺骗用户进行点击,当受害者点击并且浏览器运行该段脚本时,就会伪造受害者的身份发送一个合法请求。所以 CSRF 攻击也被称为"one-click"攻击。
与 XSS 区别
XSS 是利用客户端对服务端的信任,CSRF 是利用服务端对客户端的信任。
XSS 主要是让脚本在用户浏览器上执行,服务器仅仅只是脚本的载体,本身服务器不会受到攻击利用。CSRF 主要是攻击者会伪造一个用户发送给服务器的正常链接,其核心主要是需要已登录(已认证)的用户去发送请求。
XSS 是将恶意代码植入被攻击服务器,利用用户对服务器的信任完成攻击。而 CSRF 是攻击者预先在自己攻击服务器的页面植入恶意代码,诱使受害者访问,在受害者不知情的情况下执行了恶意代码。攻击服务器是独立的域名或 IP 地址。
比 XSS 更难检测和更隐蔽,攻击面主要集中在用户端,防御主要在服务端。
举例
攻击要点
服务器没有对操作来源进行判断,如 IP、Referer 等。
受害者处于登录状态,但是攻击者无法拿到 Cookie。
攻击者需要找到一条可以修改或获取敏感信息的请求。
防护方法
检查 Referer,对不合法的 Referer 拒绝请求。
使用随机 Token 验证。
改密码时多做一重验证。
加验证码,强制用户必须与应用进行交互才能完成最终请求。
使用 WAF 对 CSRF 进行拦截。