我正在为一个拥有庞大遗留代码库的客户工作,该代码库由各种基于Java en JSP的应用程序组成。

大多数查询是使用home-build'org'系统完成的。某些应用程序使用Plain Old JDBC。有些应用程序基于Hibernate(是的,带有加号的HQL构建也是一个潜在的问题)。一些较旧的应用程序完全用JSP编写。

我手动发现了一些SQL注入错误。但我真的可以使用某种工具来寻找潜在的弱点。

有什么想法吗?

有帮助吗?

解决方案

我建议 FindBugs (还有一个eclipse插件)可以追踪这些问题等等

我们在工作中使用它,速度快,值得花钱(如免费)。我们在帮助下解决了一些常见问题。

其他提示

我会写一些搜索或加载一个IDE,它寻找使用java.sql.Statement而不是PreparedStatement。

您的网址空间有多大?如果可能,最好通过HTTP GET和POST请求尝试SQL注入。源/字节代码检查可以找到一些问题,但是知道应用程序将接受哪种类型的潜在恶意输入的唯一方法是使用HTTP请求。

CAL9000 是一款优秀的SQL注入/跨站点脚本测试工具如果你的网址很小。

认真检测错误处理恶意输入的公司将聘请第三方进行渗透测试。 White Hat Security 是我过去曾与之合作过的供应商,可以推荐。我们将它们用于价值1亿美元以上的电子商务网站。 (我与White Hat没有任何关系,如果您成为他们的客户,我们不会以任何方式受益。)

除了代码的所有测试/强化之外,建立一个HTTP防火墙是一个非常好的主意,例如 mod_security

当我致力于本地化“这将永远不需要本地化”时应用程序,我们使用自制工具来分析已编译的代码(在.NET中的IL,它与Java中的字节代码相同)。

你可以找到调用与DB一起使用的指定方法(典型的CRUD操作),它有一个带有SQL命令的字符串参数,并跟踪字符串实例并检查是否为concating。

我们使用.NET Reflector来反编译和跟踪字符串。但我不知道,如果有类似的Java工具:(。

你可以去预防而不是治愈。在你的UI下面添加一个清理层,所以你不会在用户输入中使用sql / scripts。 java中必须有一些例子,我在CakePHP中看到了这样一种方法

找到任何不使用 PreparedStatement 的地方。

我推荐CAL9000。您可以从以下链接获取详细信息:

CAL9000

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top