避免SQL注入

kra*_*moe 4 java security sql-injection

我想在我的Webapp中避免SQL注入.它是基于Java的.

PreparedStatements是否足够?

我是否必须过滤掉'和'?在Java中是否已有解决方案?

And*_*yle 5

我对你的第二段中的问题的直觉反应是,对于这类问题,考虑单个方面"足够"通常是一个坏主意 - 至少如果你这样做,你就不再考虑所涉及的原则了.

使用PreparedStatements确实可以很好地停止SQL注入,就像在synchronized任何地方使用slapping一样,停止数据竞争还有很长的路要走.在许多个人情况下,他们将完全足够.但在这两种情况下,他们不是灵丹妙药-你需要知道你在使用它们的原因,以及何时何地,他们是不够的.例如,如果您认为PreparedStatements是一个防止SQL注入的魔术包装器,那么您第一次需要根据用户输入创建动态语句(而不仅仅是参数化语句)时会非常失望.

因此,"足够"的东西就是教育.了解威胁的工作原理和原因; 一旦你理解了这一点,你将能够对给定的情况采取适当的行动(有时候只是使用PreparedStatement,但并非总是如此).我不知道SQL注入有什么特别好的资源(超出你可以从谷歌获得的内容),所以希望其他答案可以指向你的One True Tutorial!