Skip to content

Commit a493db3

Browse files
committed
📝 Add enhanced_safety_java doc
Signed-off-by: cyw3 <2927096163@qq.com>
1 parent 8b96a57 commit a493db3

4 files changed

Lines changed: 282 additions & 2 deletions

File tree

doc/.vuepress/configs/sidebar/en.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,20 @@ export const en: SidebarConfig = {
2323
'/en/guide/代码检查/分析结果查看.md',
2424
'/en/guide/代码检查/添加规则配置.md',
2525
{
26-
text: '典型工具接入指引',
26+
text: '典型工具使用手册',
2727
children: [
2828
'/en/guide/代码检查/工具/eslint.md',
2929
'/en/guide/代码检查/工具/golangcilint.md',
3030
'/eh/guide/代码检查/工具/TCA-Armory-R.md',
3131
'/eh/guide/代码检查/工具/TCA-Armory-C1.md',
3232
],
3333
},
34+
{
35+
text: '典型规则包使用手册',
36+
children: [
37+
'/en/guide/代码检查/规则包/enhanced_safety_java.md',
38+
],
39+
},
3440
]
3541
},
3642
{

doc/.vuepress/configs/sidebar/zh.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,20 @@ export const zh: SidebarConfig = {
2323
'/zh/guide/代码检查/分析结果查看.md',
2424
'/zh/guide/代码检查/添加规则配置.md',
2525
{
26-
text: '典型工具接入指引',
26+
text: '典型工具使用手册',
2727
children: [
2828
'/zh/guide/代码检查/工具/eslint.md',
2929
'/zh/guide/代码检查/工具/golangcilint.md',
3030
'/zh/guide/代码检查/工具/TCA-Armory-R.md',
3131
'/zh/guide/代码检查/工具/TCA-Armory-C1.md',
3232
],
3333
},
34+
{
35+
text: '典型规则包使用手册',
36+
children: [
37+
'/zh/guide/代码检查/规则包/enhanced_safety_java.md',
38+
],
39+
},
3440
]
3541
},
3642
{
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
# 【Java】强化安全规则包-使用手册
2+
针对 Java 语言的强化代码安全规则包,属于 TCA 增强分析模块的能力之一,请参考[增强分析模块部署](https://tencent.github.io/CodeAnalysis/zh/quickStarted/enhanceDeploy.html)文档进行部署。
3+
4+
5+
## CmdInject
6+
### 概述
7+
支持的语言:Java
8+
9+
CmdInject 规则用于检查代码中是否存在[`命令行注入漏洞`](https://owasp.org/www-community/attacks/Command_Injection)
10+
当使用childprocess等模块执行命令时,拼接了用户可控的输入,会导致命令执行漏洞。攻击者利用漏洞可以控制目标主机或者容器。
11+
12+
### 示例
13+
```java
14+
void bad(HttpServletRequest req, HttpServletResponse resp){
15+
String cmd = req.getParameter("cmd");
16+
Runtime rt = Runtime.getRuntime();
17+
rt.exec(cmd); // 触发规则
18+
}
19+
```
20+
21+
### 修复建议
22+
需要评估childprocess等模块执行命令的使用,应限定或校验命令和参数的内容。
23+
24+
## PathTraversal
25+
26+
### 概述
27+
支持的语言:Java
28+
29+
PathTraversal 规则用于检查代码中是否存在[`路径穿越漏洞`](https://owasp.org/www-community/attacks/Path_Traversal)
30+
操作文件时,应该限定文件的路径范围,如果拼接用户输入到文件路径,可能导致路径穿越漏洞。攻击者利用漏洞可以访问到文件系统上的任意文件,这可能导致信息泄漏等问题。
31+
32+
### 示例
33+
```java
34+
void bad(HttpServletRequest req, HttpServletResponse resp){
35+
String image = req.getParameter("image");
36+
File file = new File("resources/images/", image); // 触发规则
37+
38+
if (!file.exists()) {
39+
return Response.status(Status.NOT_FOUND).build();
40+
}
41+
42+
return Response.ok().entity(new FileInputStream(file)).build();
43+
}
44+
```
45+
46+
### 修复建议
47+
按业务需求,使用白名单限定后缀范围,校验并限定文件路径范围。
48+
49+
## SQLInject
50+
51+
### 概述
52+
支持的语言:Java
53+
54+
SQLInject 规则用于检查代码中是否存在[`SQL注入漏洞`](https://en.wikipedia.org/wiki/SQL_injection)
55+
错误的拼接用户可控的值到 sql 语句,可能导致 sql 注入漏洞。攻击者可以修改 sql 语法来更改查询的目标或结果,泄露数据库敏感信息,也可以使用SQL文件操作攻击底层Web服务器。如果使用该 sql 查询进行授权认证,攻击者还可以用于提权。
56+
57+
### 示例
58+
```java
59+
void bad(HttpServletRequest req, HttpServletResponse resp){
60+
String id = req.getParameter("id");
61+
Connection conn = null;
62+
Statement statement = null;
63+
ResultSet rs = null;
64+
65+
Class.forName("com.mysql.cj.jdbc.Driver");
66+
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sec_sql", "root", "admin888");
67+
String sql = "select * from userinfo where id = " + id;
68+
statement = conn.createStatement();
69+
statement.executeUpdate(sql); // 触发规则
70+
}
71+
```
72+
73+
### 修复建议
74+
SQL语句默认使用预编译并绑定变量,使用安全的ORM操作。
75+
76+
## SSRF
77+
78+
### 概述
79+
支持的语言:Java
80+
81+
SSRF 规则用于检查代码中是否存在[`服务端请求伪造漏洞 SSRF(Server-side request forgery)`](https://en.wikipedia.org/wiki/Server-side_request_forgery)
82+
攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。
83+
84+
### 示例
85+
```java
86+
import org.springframework.context.annotation.Configuration;
87+
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
88+
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
89+
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
90+
91+
@EnableWebSecurity
92+
@Configuration
93+
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
94+
@Override
95+
protected void configure(HttpSecurity http) throws Exception {
96+
http
97+
.csrf(csrf ->
98+
// 触发规则
99+
csrf.disable()
100+
);
101+
}
102+
}
103+
```
104+
105+
### 修复建议
106+
限定访问网络资源地址范围,请求网络资源应加密传输。
107+
108+
## XSS
109+
110+
### 概述
111+
支持的语言:Java
112+
113+
XSS 规则用于检查代码中是否存在[`跨站脚本攻击漏洞 XSS(Cross-site scripting)`](https://en.wikipedia.org/wiki/Cross-site_scripting)
114+
如果 web 页面在动态展示数据时使用了用户的输入内容,没有对输入的内容过滤或者进行转义,黑客可以通过参数传入恶意代码,当用户浏览该页面时恶意代码会被执行。
115+
116+
### 示例
117+
```java
118+
void bad(HttpServletRequest req, HttpServletResponse resp){
119+
String id = request.getParameter("id") != null ? request.getParameter("id") : "0";
120+
Doc doc = getdetailsById(id);
121+
byte b[] = doc.getUploaded();
122+
try {
123+
response.setContentType("APPLICATION/OCTET-STREAM");
124+
String disHeader = "Attachment;Filename=" + doc.getName();
125+
response.setHeader("Content-Disposition", disHeader);
126+
ServletOutputStream out = response.getOutputStream();
127+
out.print(b);
128+
}
129+
}
130+
```
131+
132+
### 修复建议
133+
134+
在输出所有用户可控的数据时, 对数据做转义或者编码。
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
# 【Java】强化安全规则包-使用手册
2+
针对 Java 语言的强化代码安全规则包,属于 TCA 增强分析模块的能力之一,请参考[增强分析模块部署](https://tencent.github.io/CodeAnalysis/zh/quickStarted/enhanceDeploy.html)文档进行部署。
3+
4+
5+
## CmdInject
6+
### 概述
7+
支持的语言:Java
8+
9+
CmdInject 规则用于检查代码中是否存在[`命令行注入漏洞`](https://owasp.org/www-community/attacks/Command_Injection)
10+
当使用childprocess等模块执行命令时,拼接了用户可控的输入,会导致命令执行漏洞。攻击者利用漏洞可以控制目标主机或者容器。
11+
12+
### 示例
13+
```java
14+
void bad(HttpServletRequest req, HttpServletResponse resp){
15+
String cmd = req.getParameter("cmd");
16+
Runtime rt = Runtime.getRuntime();
17+
rt.exec(cmd); // 触发规则
18+
}
19+
```
20+
21+
### 修复建议
22+
需要评估childprocess等模块执行命令的使用,应限定或校验命令和参数的内容。
23+
24+
## PathTraversal
25+
26+
### 概述
27+
支持的语言:Java
28+
29+
PathTraversal 规则用于检查代码中是否存在[`路径穿越漏洞`](https://owasp.org/www-community/attacks/Path_Traversal)
30+
操作文件时,应该限定文件的路径范围,如果拼接用户输入到文件路径,可能导致路径穿越漏洞。攻击者利用漏洞可以访问到文件系统上的任意文件,这可能导致信息泄漏等问题。
31+
32+
### 示例
33+
```java
34+
void bad(HttpServletRequest req, HttpServletResponse resp){
35+
String image = req.getParameter("image");
36+
File file = new File("resources/images/", image); // 触发规则
37+
38+
if (!file.exists()) {
39+
return Response.status(Status.NOT_FOUND).build();
40+
}
41+
42+
return Response.ok().entity(new FileInputStream(file)).build();
43+
}
44+
```
45+
46+
### 修复建议
47+
按业务需求,使用白名单限定后缀范围,校验并限定文件路径范围。
48+
49+
## SQLInject
50+
51+
### 概述
52+
支持的语言:Java
53+
54+
SQLInject 规则用于检查代码中是否存在[`SQL注入漏洞`](https://en.wikipedia.org/wiki/SQL_injection)
55+
错误的拼接用户可控的值到 sql 语句,可能导致 sql 注入漏洞。攻击者可以修改 sql 语法来更改查询的目标或结果,泄露数据库敏感信息,也可以使用SQL文件操作攻击底层Web服务器。如果使用该 sql 查询进行授权认证,攻击者还可以用于提权。
56+
57+
### 示例
58+
```java
59+
void bad(HttpServletRequest req, HttpServletResponse resp){
60+
String id = req.getParameter("id");
61+
Connection conn = null;
62+
Statement statement = null;
63+
ResultSet rs = null;
64+
65+
Class.forName("com.mysql.cj.jdbc.Driver");
66+
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sec_sql", "root", "admin888");
67+
String sql = "select * from userinfo where id = " + id;
68+
statement = conn.createStatement();
69+
statement.executeUpdate(sql); // 触发规则
70+
}
71+
```
72+
73+
### 修复建议
74+
SQL语句默认使用预编译并绑定变量,使用安全的ORM操作。
75+
76+
## SSRF
77+
78+
### 概述
79+
支持的语言:Java
80+
81+
SSRF 规则用于检查代码中是否存在[`服务端请求伪造漏洞 SSRF(Server-side request forgery)`](https://en.wikipedia.org/wiki/Server-side_request_forgery)
82+
攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。
83+
84+
### 示例
85+
```java
86+
import org.springframework.context.annotation.Configuration;
87+
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
88+
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
89+
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
90+
91+
@EnableWebSecurity
92+
@Configuration
93+
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
94+
@Override
95+
protected void configure(HttpSecurity http) throws Exception {
96+
http
97+
.csrf(csrf ->
98+
// 触发规则
99+
csrf.disable()
100+
);
101+
}
102+
}
103+
```
104+
105+
### 修复建议
106+
限定访问网络资源地址范围,请求网络资源应加密传输。
107+
108+
## XSS
109+
110+
### 概述
111+
支持的语言:Java
112+
113+
XSS 规则用于检查代码中是否存在[`跨站脚本攻击漏洞 XSS(Cross-site scripting)`](https://en.wikipedia.org/wiki/Cross-site_scripting)
114+
如果 web 页面在动态展示数据时使用了用户的输入内容,没有对输入的内容过滤或者进行转义,黑客可以通过参数传入恶意代码,当用户浏览该页面时恶意代码会被执行。
115+
116+
### 示例
117+
```java
118+
void bad(HttpServletRequest req, HttpServletResponse resp){
119+
String id = request.getParameter("id") != null ? request.getParameter("id") : "0";
120+
Doc doc = getdetailsById(id);
121+
byte b[] = doc.getUploaded();
122+
try {
123+
response.setContentType("APPLICATION/OCTET-STREAM");
124+
String disHeader = "Attachment;Filename=" + doc.getName();
125+
response.setHeader("Content-Disposition", disHeader);
126+
ServletOutputStream out = response.getOutputStream();
127+
out.print(b);
128+
}
129+
}
130+
```
131+
132+
### 修复建议
133+
134+
在输出所有用户可控的数据时, 对数据做转义或者编码。

0 commit comments

Comments
 (0)