跨站请求伪造(CSRF)攻击全解析
1. CSRF 攻击基础场景
在网络交互中,当用户 Bob 访问银行网站时,银行会对他的 HTTP 请求作出响应,这个响应里包含一个能识别 Bob 的 cookie。之后,Bob 的浏览器会自动在所有发往该银行网站的 HTTP 请求中带上这个 cookie。
如果 Bob 完成银行业务后,离开银行网站时没有注销登录,这就埋下了安全隐患。因为正常情况下,当用户从某个网站注销登录时,该网站通常会返回一个使 cookie 过期的 HTTP 响应,这样用户再次访问该网站时就需要重新登录。
当 Bob 查看邮件并点击链接访问一个未知网站时,他可能无意间就进入了一个恶意网站。这个恶意网站会指示 Bob 的浏览器向他的银行网站发送请求,并且这个请求会带上 Bob 浏览器里的 cookie。
2. 基于 GET 请求的 CSRF 攻击
恶意网站对 Bob 银行网站的攻击方式,取决于银行是否接受通过 GET 或 POST 请求进行转账操作。如果银行网站接受通过 GET 请求进行转账,恶意网站会通过隐藏表单或<img>标签来发送 HTTP 请求。
GET 和 POST 方法都依赖 HTML 让浏览器发送所需的 HTTP 请求,且两种方法都能使用隐藏表单技术,但只有 GET 方法能使用<img>标签技术。
攻击者需要在发往 Bob 银行网站的转账 HTTP 请求中包含 Bob 的 cookie,但攻击者无法读取 Bob 的 cookie,所以不能直接创建并发送 HTTP 请求到银行网站。不过,