gpt4 book ai didi

java - 在 Java 中转义 SQL 字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:22:32 25 4
gpt4 key购买 nike

背景:

我目前正在为企业 CMS 数据库(业务对象)开发 Java 前端。目前,我正在构建一个允许用户构建自定义数据库查询的功能。我已经实现了措施以确保用户只能使用已批准用户访问的可用列和运算符的子集进行选择(例如,可以选择 SI_EMAIL_ADDRESS,而不能选择更强大的字段,如 SI_CUID)。到目前为止,一切进展顺利,但现在是保护此功能免受潜在 SQL 注入(inject)攻击的时候了。

问题:

我正在寻找一种方法来转义用户输入的字符串。我已经看过 PerparedStatement,但是我不得不使用第三方 API 来访问数据库。这些 API 对我来说是不可变的,直接访问数据库是不可能的。各个方法采用表示要运行的查询的字符串,从而使 PreparedStatement 无效(据我所知,它必须针对直接数据库连接运行)。

我考虑过使用 String.replace(),但如果可能我不想重新发明轮子。此外,我与开发 PerparedStatement 的安全专家相去甚远。

我还查看了 PerparedStatement 的 Java API 引用,希望找到某种 toString() 方法。唉,我找不到任何类似的东西。

非常感谢任何帮助。提前谢谢你。

引用资料:

Java - escape string to prevent SQL injection

Java equivalent for PHP's mysql_real_escape_string()

最佳答案

当然使用PreparedStatement会更容易也更安全。

ANSI SQL 要求字符串文字以单引号开始和结束,单引号的唯一转义机制是使用两个单引号:

'Joe''s Caffee'

所以理论上只需要将一个单引号换成两个单引号即可。但是,存在一些问题。首先,某些数据库(例如 MySQL)也(或仅)支持反斜杠作为转义机制。在这种情况下,您需要将反斜杠加倍(也)。

对于 MySQL,我建议使用 MySQLUtils .如果您不使用 MySQL,那么您需要检查要使用的确切转义机制是什么。

关于java - 在 Java 中转义 SQL 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10522257/

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