Update 攻击技术.md

补充 Origin 首部校验与 SameSite 按站点判断的说明。
This commit is contained in:
CyC2018
2026-10-31 00:23:19 +08:00
parent 013e9fa8f2
commit eaa1e52670
+3 -3
View File
@@ -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. 输入验证码