gpt4 book ai didi

java - JDBC 驱动程序转义准备好的语句的参数?

转载 作者:行者123 更新时间:2023-12-02 06:02:24 25 4
gpt4 key购买 nike

来自OWASP page on Preventing SQL Injection in Java :

Variables passed as arguments to prepared statements will automatically be escaped by the JDBC driver.

我了解准备好的语句如何将用户输入分开以作为参数内容而不是作为 SQL 命令的一部分进行处理。但我偶然发现了上面引用的句子,我想知道逃避的到底是什么。这如何帮助防止注入(inject)攻击?

最佳答案

假设你的陈述是

"select * from foo where name = '" + name + "'";

现在,如果 name 变量恰好是 O'Reilly,您最终会得到以下无效的 SQL 查询:

select * from foo where name = 'O'Reilly'

改用准备好的语句:

"select * from foo where name = ?"

然后,驱动程序会将参数正确绑定(bind)为字符串,并且 O'Reilly 中的单引号不会被解释为以 'O 开始的字符串结尾。

在这个简单的情况下,不使用准备好的语句“只会”导致应用程序出现异常。但如果有人使用像这样的名字

' or 1 = 1 or name <> '

查询将变成

select * from foo where name = '' or 1 = 1 or name <> ''

因此查询将加载表的每一行。这就是 SQL 注入(inject)的全部内容。

关于java - JDBC 驱动程序转义准备好的语句的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22569694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com