java - 以最安全的方式使用准备好的语句

标签 java sql validation jdbc prepared-statement

从安全验证的角度来看,两者之间是否有区别:

stmt.setObject(1, theObject);

stmt.setString(1, theObject);?

我知道在这种情况下 theObject 是一个 String 但我有兴趣使这段代码的一部分更通用以涵盖其他情况,并且想知道是否从安全角度考虑输入验证受到影响

最佳答案

可以使用 ssetObject(),因为 jdbc 将尝试为所有 java.lang.* 类型进行类型解析。

但是,以这种方式将任意 SQL 字符串传递到数据库存在潜在问题 - 安全漏洞:如果没有对用于构建 SQL 字符串的任何参数进行非常明智的验证,您容易受到各种类型的 SQL 插入攻击。

小心将未类型化的 null 传递给 setObject()

关于java - 以最安全的方式使用准备好的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13228362/

相关文章:

java - 如何将字典项序列化为类的平面属性?

java - 当使用 URLFetch 和 Http 方法 'DELETE' 时,appengine 中的 Http 400

java - AWS SDK - 异步配置的目的 SdkAdvancedAsyncClientOption.FUTURE_COMPLETION_EXECUTOR

java - Java 中 int 数组键的 Apache Spark 类?

mysql - 在另一列的串联信息中查找一列信息 SQL

mysql - SQL:如何计算有多少行包含多个关键字

mysql - UNION 显示用于获取数据库中的所有字段,information_schema 不可用

php - Codeigniter提交后如何保值

java - Android更改错误验证文本字段的颜色

java - 跳过 Struts2 中某些字段的验证