此查询是否可以进行SQL注入?

yog*_*sma 0 java sql sql-injection

UPDATE `company` SET `itnumber` = '595959' WHERE (id = 932) 
Run Code Online (Sandbox Code Playgroud)

因此,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());
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 8

如果你只是简单地将输入连接到一个SQL字符串而不进行任何清理(并且简单地用单引号括起它并'不能使它干净),那么是的,它很容易受到SQL注入的攻击.

请发布构造此SQL的代码以获得明确的答案.


更新:

由于您使用getSQLvalue()的是Oracle SQL库,因此可确保传入的值正确转义.这确实是安全的SQL注入,但它要求你记住在每个地方使用它.但是,使用参数可以确保相同,而不会有忘记转义SQL值的风险.