我想检查我的输入字符串中是否存在潜在的SQL注入。

这是我的类,方法和查询:

public class UserNamesQuery {

   public static String getUserNames(Map<String, Object> params) {
       String userNames = (String) params.get("userNames");
       return "SELECT * FROM users WHERE name IN (" + userNames + ") ";
   }

}


是否有工具或快速方法来验证userNames是否没有SQL注入?

请注意,我使用Mybatis

最佳答案

不行不用了

坦率地说,没有“ SQL注入”之类的东西。只有一种格式不正确的查询。

因此,您不必通过使用准备好的语句来查找任何“注入”,而是必须正确地设置查询的格式。

根据上下文,任何数据都可能是潜在的注入,也可能是无害的文本块。因此,无论使用什么过滤功能,都会有太多的误报。更糟糕的是,无论哪种过滤都是“黑名单”实现,都意味着它永远是不完整的-过滤掉用于利用注入的所有代码是完全不可能的。

另一方面,准备好的陈述是一个相对简单的解决方案,即使不知道它们,也不会受到任何类型的注射的影响。仅仅因为它不会让数据干扰查询。

关于java - 使用Mybatis检查SQL注入(inject)的输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35843211/

10-09 01:28