preparedStatement是否可以避免SQL注入?
我已阅读并尝试将易受攻击的 SQL 查询注入到我的应用程序中。还不够安全。我只是使用语句连接进行数据库验证和其他插入操作。
准备好的语句安全吗?而且这个说法也会有问题吗?
I have read and tried to inject vulnerable sql queries to my application. It is not safe enough. I am simply using the Statement Connection for database validations and other insertion operations.
Is the preparedStatements safe? and moreover will there be any problem with this statement too?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用字符串连接从任意输入构建查询不会使
PreparedStatement
安全。看一下这个例子:如果有人输入
userName
,你的PreparedStatement
将很容易受到 SQL 注入攻击,因为该查询将在数据库上执行,所以,如果你使用
你会安全的。
部分代码取自这篇维基百科文章。
Using string concatenation for constructing your query from arbitrary input will not make
PreparedStatement
safe. Take a look at this example:If somebody puts
as
userName
, yourPreparedStatement
will be vulnerable to SQL injection, since that query will be executed on database asSo, if you use
you will be safe.
Some of this code taken from this Wikipedia article.
如果使用得当,准备好的语句确实可以防止 SQL 注入。但请针对您的问题发布一个代码示例,以便我们可以查看您是否正确使用它。
The prepared statement, if used properly, does protect against SQL injection. But please post a code example to your question, so we can see if you are using it properly.
仅仅使用
PreparedStatement
并不能保证您的安全。您必须在SQL
查询中使用参数,这可以通过PreparedStatement
实现。请参阅此处了解更多信息。Well simply using
PreparedStatement
doesn't make you safe. You have to use parameters in yourSQL
query which is possible withPreparedStatement
. Look here for more information.PreparedStatement如果您仍在连接字符串,那么单独使用
并不能帮助您。例如,一名恶意攻击者仍然可以执行以下操作:
受影响的不仅仅是 SQL。如果不使用绑定参数,甚至 JPQL 也可能受到损害。
最重要的是,在构建 SQL 语句时绝对不应该使用字符串连接。为此目的使用专用 API:
The
PreparedStatement
alone does not help you if you are still concatenating Strings.For instance, one rogue attacker can still do the following:
And it's not just SQL that can b affected. Even JPQL can be compromised if you are not using bind parameters.
Bottom line, you should never use string concatenation when building SQL statements. Use a dedicated API for that purpose: