我正在为一个拥有大量遗留代码库的客户工作,该代码库由各种基于 Java en JSP 的应用程序组成。
大多数查询是使用自制的“orm”系统完成的。一些应用程序使用普通的旧 JDBC。一些应用程序基于 Hibernate(是的,带有加号的 HQL 构建也是一个潜在问题)。一些较旧的应用程序完全用 JSP 编写。
我手动发现了几个 SQL 注入错误。但我真的可以使用某种工具来寻找潜在的弱点。
有任何想法吗?
我正在为一个拥有大量遗留代码库的客户工作,该代码库由各种基于 Java en JSP 的应用程序组成。
大多数查询是使用自制的“orm”系统完成的。一些应用程序使用普通的旧 JDBC。一些应用程序基于 Hibernate(是的,带有加号的 HQL 构建也是一个潜在问题)。一些较旧的应用程序完全用 JSP 编写。
我手动发现了几个 SQL 注入错误。但我真的可以使用某种工具来寻找潜在的弱点。
有任何想法吗?
我会编写一些搜索或加载一个 IDE,以查找使用 java.sql.Statement 而不是 PreparedStatement。
我会推荐FindBugs(还有一个 eclipse 插件),它可以追踪这些问题等等。
我们在工作中使用它,它速度快而且物有所值(就像免费一样)。在它的帮助下,我们解决了一些常见问题。
您的 URL 空间有多大?如果可能,最好尝试通过 HTTP GET 和 POST 请求进行 SQL 注入。通过源代码/字节代码检查可以发现一些问题,但确定您的应用程序将接受哪些类型的潜在恶意输入的唯一方法是使用 HTTP 请求。
如果您的 URL 集很小, CAL9000是一个很好的 SQL 注入/跨站点脚本测试工具。
认真检测处理不当的恶意输入的公司将聘请第三方进行渗透测试。 White Hat Security是我过去合作过的供应商,可以推荐。我们将它们用于 100 毫米以上的电子商务网站。(我与 White Hat 没有任何关系,如果您成为他们的客户,我不会以任何方式受益。)
除了对代码的所有测试/强化之外,像mod_security这样的 HTTP 防火墙是一个非常好的主意。
当我在做“this-will-never-need-localization”应用程序的本地化工作时,我们使用自制的工具来分析编译的代码(.NET 中的 IL,它与 Java 中的字节码相同)。
您可以找到调用与 DB(典型的 CRUD 操作)一起使用的指定方法,其中有一个带有 SQL 命令的字符串参数,并跟踪字符串实例并检查连接。
我们使用 .NET Reflector 来反编译和跟踪字符串。但我不知道,是否有类似的 Java 工具可用 :(。
你可以去预防而不是治疗。在您的 UI 下方添加一个清理层,因此您最终不会在用户输入中使用 sql/scripts。java中一定有例子,我在CakePHP中见过这样的做法
找到任何不使用PreparedStatement
.
我推荐CAL9000。您可以从以下链接获取详细信息: