使用java语言编写一个正则防止sql注入攻击的工具类
时间: 2023-08-04 07:14:19 浏览: 60
以下是一个简单的工具类,可以用于防止 SQL 注入攻击:
```java
import java.util.regex.Pattern;
public class SQLInjectionPreventionUtil {
// 匹配 SQL 关键字的正则表达式
private static final Pattern SQL_KEYWORD_PATTERN = Pattern.compile(".*\\b(ALTER|CREATE|DELETE|DROP|EXEC(UTE){0,1}|INSERT( INTO){0,1}|MERGE|SELECT|UPDATE)\\b.*", Pattern.CASE_INSENSITIVE);
/**
* 防止 SQL 注入攻击
* @param input 用户输入的 SQL 语句
* @return 处理后的 SQL 语句,如果存在 SQL 注入风险,则返回 null
*/
public static String preventSQLInjection(String input) {
if (input == null) {
return null;
}
// 检查是否包含 SQL 关键字
if (SQL_KEYWORD_PATTERN.matcher(input).matches()) {
return null;
}
// 其他防止 SQL 注入的处理,例如去除特殊字符等
return input;
}
}
```
使用方法:
```java
String userInput = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'";
String safeSql = SQLInjectionPreventionUtil.preventSQLInjection(userInput);
if (safeSql != null) {
// 执行 safeSql
} else {
// SQL 注入风险
}
```
需要注意的是,这只是一个简单的防御措施,不能保证完全防止 SQL 注入攻击。建议在实际项目中采用更为严格的防御措施,例如使用 PreparedStatement、ORM 框架等。