我想要一些可以检查字符串是否为“SELECT”,“INSERT”等的东西。我只是好奇它是否存在。
答案 0 :(得分:4)
很容易添加:
HashSet<String> sqlKeywords =
new HashSet<String>(Arrays.asList(
new String[] { ... cut and paste a list of sql keywords here .. }));
答案 1 :(得分:3)
如果您正在尝试阻止SQL注入,那么最好利用JDBC的内置功能,例如预准备语句。通常,使用字符串连接来形成SQL语句是危险的。来自Preventing SQL Injection in Java:
准备好的陈述:
String selectStatement = "SELECT * FROM User WHERE userId = ? ";
PreparedStatement prepStmt = con.prepareStatement(selectStatement);
prepStmt.setString(1, userId);
ResultSet rs = prepStmt.executeQuery();
答案 2 :(得分:1)
为什么不从this stored procedure开始并根据您的需要进行修改,甚至可以使用史蒂夫建议的hashmap将其转换为Java。
我个人喜欢存储过程的想法,因为不同的数据库可能有不同的关键字,所以让数据库通过判断似乎很优雅
答案 3 :(得分:1)
DatabaseMetaData.getSQLKeywords将返回不在SQL-2003中的数据库关键字(可在标准中找到SQL-2003关键字)。该接口中还有其他方法可用于获取各种类型的函数名称和类似函数。
正如Chase Seibert所提到的,不要认为这是阻止SQL注入攻击的有效方法。