【发布时间】:2016-01-30 07:02:07
【问题描述】:
我最近了解到不使用 PreparedStatements 的 .set() 方法是一个相当大的安全漏洞。
在查看了一些代码示例后,我对 PreparedStatements 及其安全性有一些疑问。
如果有人可以攻击 MySQL 查询以更改数据,PreparedStatement 的 .set() 方法究竟如何防止攻击?
例如,如果查询是
INSERT INTO table_name(?, ?);
(假设两个问号都是字符串)
难道不能简单地将 table_name 更改为另一个表吗?
另一个例子; 如果查询是
UPDATE table_name SET column_name=?;
一个人不能更改 column_name 以使查询更改不同的列吗?
我能想到的最后一个例子; 如果查询是
SELECT column_name FROM table_name WHERE column2_name = ?;
攻击者是否有可能修改 column_name、table_name 等,或者在查询中注入其他操作?
您可能会说,我对安全性和 MySQL 知之甚少,如果这些问题非常明显,请见谅。谢谢!
【问题讨论】:
标签: java mysql security jdbc prepared-statement