【发布时间】:2011-07-06 01:20:15
【问题描述】:
UPDATE `company` SET `itnumber` = '595959' WHERE (id = 932)
所以 itnumber 的值来自该公司的用户输入。我想确保我能够防止任何类型的 sql 注入。所以用户输入 595959,我在动态查询中将该值构建为“595959”。在这个查询中是否仍然可能有 sql 注入攻击?我知道使用prepare语句来防止sql注入,但是prepare语句可能需要我的应用程序进行大量的开发工作,所以我正在寻找更省时、更简单的方法来修复我的大部分sql语句注入是可能的.
StringBuffer sb = new StringBuffer();
sb.append(" UPDATE ");
sb.append(DB.quote(table));
sb.append(" SET ");
/* logic if column value has changed */
/* if yes */
sb.append(DB.quote(column.name));
sb.append(" = ");
sb.append(column.getSQLvalue());
sb.append(" WHERE (id = ");
sb.append(columns[0].getSQLvalue());
sb.append(")");
execute(sb.toString());
【问题讨论】:
-
分析 SQL 注入是否可能需要查看生成 SQL 的源,而不是生成的 SQL。
-
@Alexander Pogrebnyak - 猜测一下,SQL 字符串可能是在 Java 应用程序中构造的。
-
我们需要生成查询的动态 SQL 等等。
-
学习使用 Prepare Statements 的时间是值得的,而且时间并不长。这就像说“我没有时间学习如何制作水泥,我可以用强力胶建造房子吗?” :)
标签: java sql sql-injection