mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-10-31 19:13:42 +00:00
Update 攻击技术.md
补充 Origin 首部校验与 SameSite 按站点判断的说明。
This commit is contained in:
+3
-3
@@ -134,9 +134,9 @@ http://www.examplebank.com/withdraw?account=AccountName&amount=1000&for=PayeeNam
|
||||
|
||||
#### 1. 检查 Referer 首部字段
|
||||
|
||||
Referer 首部字段位于 HTTP 报文中,用于标识请求来源的地址。检查这个首部字段并要求请求来源的地址在同一个域名下,可以极大地防止 CSRF 攻击。
|
||||
Referer 首部字段位于 HTTP 报文中,用于标识请求来源的地址。检查这个首部字段并要求请求来源的地址在同一个域名下,可以极大地防止 CSRF 攻击。浏览器发送跨站的 POST 等请求时还会带上 Origin 首部,只含协议、域名和端口,服务器一般优先检查 Origin,没有时再看 Referer。网页脚本不能把这两个首部改成其它站点的地址(Referer 只能改为同源的地址或者不发送)。
|
||||
|
||||
这种办法简单易行,仅需要在关键访问处增加一步校验。局限在于它依赖浏览器发送 Referer:网站可以用 Referrer-Policy 让浏览器不发送或只发送部分地址,部分隐私插件也会去掉它,请求中没有 Referer 时,放行会留下漏洞,拒绝又会误伤正常用户。因此它通常和 Origin 首部的检查一起,作为 Token 之外的补充。
|
||||
这种办法简单易行,仅需要在关键访问处增加一步校验。局限在于它依赖浏览器发送 Referer:网站可以用 Referrer-Policy 让浏览器不发送或只发送部分地址,部分隐私插件也会去掉它,请求中没有 Referer 时,放行会留下漏洞,拒绝又会误伤正常用户。两个首部都没有时,应拒绝修改数据的请求,除非 Token 等其它校验通过,所以它通常作为 Token 之外的补充。
|
||||
|
||||
#### 2. 添加校验 Token
|
||||
|
||||
@@ -144,7 +144,7 @@ Referer 首部字段位于 HTTP 报文中,用于标识请求来源的地址。
|
||||
|
||||
#### 3. 设置 Cookie 的 SameSite 属性
|
||||
|
||||
SameSite=Strict 表示跨站请求不携带 Cookie,Lax 则只允许顶级导航的 GET 请求携带。Chrome、Edge 对没有设置 SameSite 的 Cookie 按 Lax 处理,Firefox、Safari 没有这样做,因此需要显式设置。设置为 Lax 时,上面例子中图片发出的请求不会带上 Cookie,但点击链接这类顶级导航的 GET 请求仍然会带,所以修改数据的接口不能用 GET。
|
||||
SameSite=Strict 表示跨站请求不携带 Cookie,Lax 则只允许顶级导航的 GET 请求携带。Chrome、Edge 对没有设置 SameSite 的 Cookie 按 Lax 处理,Firefox、Safari 没有这样做,因此需要显式设置。设置为 Lax 时,上面例子中图片发出的请求不会带上 Cookie,但点击链接这类顶级导航的 GET 请求仍然会带,所以修改数据的接口不能用 GET。需要注意的是,SameSite 按站点判断,a.example.com 发往 b.example.com 的请求不算跨站,子域名不完全可控时仍要配合 Token 或 Origin 检查。
|
||||
|
||||
#### 4. 输入验证码
|
||||
|
||||
|
||||
Reference in New Issue
Block a user