背景:
我目前正在为企业CMS数据库(业务对象)开发Java前端。目前,我正在构建一个功能,以允许用户构建自定义数据库查询。我已经实施了一些措施,以确保用户只能使用已批准用于用户访问的可用列和运算符的子集进行选择(例如,可以选择SI_EMAIL_ADDRESS,而不能选择更强大的字段,如SI_CUID)。到目前为止,事情一直在进行,但是现在是时候保护此功能免受潜在的SQL注入攻击。
问题:
我正在寻找一种方法来转义用户输入的字符串。我已经看过PerparedStatement,但是我被迫使用第三方API来访问数据库。这些API对我来说是一成不变的,直接访问数据库是不可能的。各个方法采用表示要运行的查询的字符串,从而使PreparedStatement无效(据我所知,必须针对直接数据库连接运行)。
我已经考虑过使用String.replace(),但是如果可能的话,我不想重新发明轮子。此外,我与开发PerparedStatement的安全专家相去甚远。
我还查看了PerparedStatement的Java API参考,希望找到某种toString()方法。las,我一直找不到类似的东西。
任何帮助是极大的赞赏。先感谢您。
当然,使用PreparedStatement会更容易,更安全。
ANSI SQL要求字符串文字以单引号开头和结尾,并且单引号的唯一转义机制是使用两个单引号:
'Joe''s Caffee'
因此,从理论上讲,您只需要用两个单引号替换一个单引号即可。但是,存在一些问题。首先,某些数据库(例如MySQL)也(或仅)支持反斜杠作为转义机制。在这种情况下,您还需要将反斜杠加倍。
对于MySQL,我建议使用MySQLUtils。如果不使用MySQL,则需要检查要使用的确切转义机制。
本文向大家介绍Java转义字符,包括了Java转义字符的使用技巧和注意事项,需要的朋友参考一下 示例 通常 要使用正则表达式中的特定字符(?+|等),按其字面意思,必须对其进行转义。在常规正则表达式中,这是通过反斜杠完成的\。但是,由于它在Java字符串中具有特殊含义,因此必须使用双反斜杠\\。 这两个示例不起作用: 这个例子有效 分割管道分隔字串 这不会返回预期的结果: 这将返回预期结果: 转义
问题内容: 我试图在Java中放置一些反SQL注入,并发现使用“ replaceAll”字符串函数非常困难。最后,我需要,将转换现有的功能使得当字符串由MySQL的SQL注入评估将被阻止。 我已经整理了一些正在使用的代码,并且该函数中的所有内容都使我大失所望。如果有人碰巧有这个例子,我将不胜感激。 问题答案: PreparedStatement是可行的方法,因为它们使SQL注入成为不可能。这是一个
问题内容: 我试图在Java中放置一些反SQL注入,并发现使用“ replaceAll”字符串函数非常困难。最后,我需要,将转换现有的功能来,任何到,任何到,任何以使得当字符串由MySQL的SQL注入评估将被阻止。 我已经整理了一些正在使用的代码,并且该函数中的所有内容都使我大失所望。如果有人碰巧有这个例子,我将不胜感激。 问题答案: PreparedStatement是可行的方法,因为它们使SQ
问题内容: 我不敢相信我在问这个,但是… 您如何使用SCALA在SPARK SQL中逃逸SQL查询字符串? 我已经厌倦了一切,到处搜寻。我以为apache commons库可以做到,但是没有运气: ”‘“).map(_.getValuesMapAny)).collect().foreach(println); 返回以下内容: topic =’‘’Ulmus_minor _’‘Toledo’‘’^在
我不敢相信我问这个但是... 如何使用Scala在SPARK SQL中转义SQL查询字符串? 我累了所有的东西,到处找。我以为apache commons库可以做到这一点,但运气不好: 返回以下内容: 帮个忙就好了。 j
问题内容: 我有以下要发送到NodeJS服务器的JSON字符串: 当字符串包含字符和 在NodeJS服务器上,我正在像这样解析JSON: 有什么想法我可以设法毫无问题地发送所有字符吗? 问题答案: 我会使用一个库来为您创建JSON 。一些选项是: GSON 克罗福德的解放 这将使转义变得更加容易。一个示例(使用)为: