java - 这个查询可以进行 SQL 注入(inject)吗?

标签 java sql sql-injection

UPDATE `company` SET `itnumber` = '595959' WHERE (id = 932) 

因此 itnumber 的值来自该公司的用户输入。我想确保我能够防止任何类型的 sql 注入(inject)。因此,用户输入 595959,我在动态查询中将该值构建为“595959”。这个查询中还可能存在sql注入(inject)攻击吗?我知道使用prepare语句来防止sql注入(inject),但是prepare语句可能需要我的应用程序进行大量的开发工作,所以我正在寻找耗时更少且更简单的方法来修复大多数可能注入(inject)的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 注入(inject)的攻击.

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

<小时/>

更新:

由于您使用的是 Oracle SQL 库中的 getSQLvalue(),因此这将确保传入的值正确转义。这确实可以避免 SQL 注入(inject),但是它要求您记住在每个地方都使用它。但是,使用参数可以确保相同的效果,而且不会有忘记转义 SQL 值的风险。

关于java - 这个查询可以进行 SQL 注入(inject)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5147217/

相关文章:

java - 在 openjdk docker 镜像上安装 Rust

java - 从点创建 java.awt.geom.Area

mysql - 如何根据条件排序?

sql - bWAPP- SQL 注入(inject) Hack 显示白屏?

php: 如何防止 $_POST 中的 SQL 注入(inject)

python - PostgreSQL COPY SQL 注入(inject)

java - 重新触发 MouseListener 事件

java - Redis:在集合中存储 HashMap

c# - 如何在 MVC 模型中从 SQL Server 数据库一次检索一条记录

sql - 对不能同时为空的多列的唯一约束