From 35891fa13f5fc508d0ef4e8e4fc1d28f51008170 Mon Sep 17 00:00:00 2001 From: constexpr Date: Thu, 27 May 2021 11:46:40 +0800 Subject: [PATCH 1/2] =?UTF-8?q?add:=20=E8=A1=A5=E5=85=85Java=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E6=8C=87=E5=8D=97=20CSRF=E9=83=A8=E5=88=86=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...11\345\205\250\346\214\207\345\215\227.md" | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git "a/Java\345\256\211\345\205\250\346\214\207\345\215\227.md" "b/Java\345\256\211\345\205\250\346\214\207\345\215\227.md" index 3492067..924b4ca 100644 --- "a/Java\345\256\211\345\205\250\346\214\207\345\215\227.md" +++ "b/Java\345\256\211\345\205\250\346\214\207\345\215\227.md" @@ -644,7 +644,7 @@ web view层通常通过模板技术或者表达式引擎来实现界面与业务 ##### 1.10.1【必须】部署CSRF防御机制 -CSRF是指跨站请求伪造(Cross-site request forgery),是web常见的攻击之一。对于可重放的敏感操作请求,需部署CSRF防御机制。可参考以下两种常见的CSRF防御方式 +CSRF是指跨站请求伪造(Cross-site request forgery),是web常见的攻击之一。对于可重放的敏感操作请求,需部署CSRF防御机制。可参考以下几种常见的CSRF防御方式 - 设置CSRF Token @@ -689,6 +689,27 @@ CSRF是指跨站请求伪造(Cross-site request forgery),是web常见的 1. 要需要处理Referer为空的情况,当Referer为空则拒绝请求 2. 注意避免例如qq.com.evil.com 部分匹配的情况。 + + +- 避免使用GET请求对服务端进行更改 + + 基于GET请求的CSRF攻击成本相对较低,避免使用GET请求对服务端发起操作能够提高CSRF攻击门槛。 + + 另外,由于在基于Referer头的防范手段中,可能为了避免对搜索引擎来源链接的“误伤”,则需要放过如下Header的请求: + + ``` + Accept: text/html + Method: GET + ``` + + 这样这种类型的请求是暴露于攻击范围之中的。 + + + +- Samesite Cookie + + CSRF攻击发生的前提是被攻击者的浏览器上已经具有被攻击网站的登录凭据,如果网站的登录凭据存储在Cookie中,那么可以对Cookie的Samesite属性进行设置,避免浏览器对非同源的请求传递登录凭据,进而对被攻击网站发起有效的请求。 + ##### 1.10.2【必须】权限校验 对于非公共操作,应当校验当前访问账号进行操作权限(常见于CMS)和数据权限校验。 From 5f0b5076d44a718aa02b077ff3714a7a83514cac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E6=94=80?= Date: Thu, 27 May 2021 11:50:28 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E6=8D=A2=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "Java\345\256\211\345\205\250\346\214\207\345\215\227.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/Java\345\256\211\345\205\250\346\214\207\345\215\227.md" "b/Java\345\256\211\345\205\250\346\214\207\345\215\227.md" index 924b4ca..979d495 100644 --- "a/Java\345\256\211\345\205\250\346\214\207\345\215\227.md" +++ "b/Java\345\256\211\345\205\250\346\214\207\345\215\227.md" @@ -689,7 +689,7 @@ CSRF是指跨站请求伪造(Cross-site request forgery),是web常见的 1. 要需要处理Referer为空的情况,当Referer为空则拒绝请求 2. 注意避免例如qq.com.evil.com 部分匹配的情况。 - + ​ - 避免使用GET请求对服务端进行更改 @@ -704,7 +704,7 @@ CSRF是指跨站请求伪造(Cross-site request forgery),是web常见的 这样这种类型的请求是暴露于攻击范围之中的。 - + ​ - Samesite Cookie