gpt4 book ai didi

java - 如何防止特殊字符的SQL注入(inject)

转载 作者:行者123 更新时间:2023-12-02 12:49:37 26 4
gpt4 key购买 nike

我想保护参数化 SQL 查询免受 SQL 注入(inject)的影响。我读过一篇文章,描述了如何使用PreparedStatement 避免SQL 注入(inject)。 link

根据文章,它描述了preparedstament有助于从缓存中选择预编译查询,并且在最后一步将laceholders替换为用户数据,并且查询不会再次编译。因此,如果有人提供 sql 查询作为用户输入,将有助于避免 SQL 注入(inject),因为查询只会编译一次。

但是如果有人给出带有特殊字符(例如“x”=“x”)的字符串,会发生什么情况。例如,当在最终查询中将占位符替换为“x”=“x”等用户数据时,例如“SELECT * FROM users WHERE username = 'blah' AND password = 'foo' OR 'x'='x'”。 JavaPreparedStatement如何处理这些类型的特殊字符?

任何人都可以帮助我理解这一点

最佳答案

基本上,数据库引擎使用占位符解析 SQL 字符串,并记住仅执行该部分。

完成此操作后,它将接受数据并用实际数据替换占位符。

这意味着,如果有人设法将 SQL 字符串放入您的变量之一以破坏 SQL 并使其执行其他操作,数据库引擎会将其视为不会执行的文本。

因此,您可能会在文本字段中输入完整的 SQL 语句,并且它只会作为文本插入,而不是由数据库引擎解析和执行,因此,您的代码是“安全的”(总有一些东西)您错过了可能存在潜在漏洞的地方)

这也不是 JAVA 独有的,它也适用于 PHP 等,它只是告诉数据库以与通常不同的方式处理查询。

关于java - 如何防止特殊字符的SQL注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44650512/

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