java - 防止 Redshift SQL 注入(inject)

标签 java postgresql sql-injection mybatis amazon-redshift

我遇到了不幸的情况,我必须通过连接字符串来构建 SQL 字符串 - 经典的 SQL 注入(inject)场景。我无法使用准备好的语句。

如果我转义 ' 字符,我安全吗?或者还有其他攻击媒介吗?

我正在使用 MyBatis,它是 ${} 表示法(与生成准备好的语句的 #{} 相比)。我对此别无选择 - 它必须是${}。我无法使用准备好的语句。

编辑:

增加一点清晰度;这是一个ASW Redshift UNLOAD command 。 UNLOAD 的第一个参数是 SQL 字符串。

最佳答案

(由于 Redshift 的限制,您无法以正确的方式执行此操作):

在 PostgreSQL 上,将 standard_conforming_strings 设置为 on 所有,您需要做的就是双引号,将 ' 变成''。就是这样。

除非 standard_conforming_strings 关闭或者您使用 E'' 字符串,否则反斜杠并不重要。如果其中任何一个为真,那么您必须进行反斜杠转义。

由于 Redshift 基于一个古老的 PostgreSQL 版本的分支,我不确定这如何适用于它。阅读有关其词法结构和语法的文档是明智的做法,以验证它是否与 PostgreSQL 的工作方式一致。

关于java - 防止 Redshift SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29045170/

相关文章:

java - 如何将我的 requestdispatcher 发送到两个不同的 jsp 页面路径?

hibernate - jOOQ 无法映射 PostgreSQL 列以使 JPA 满意

mysql - Rails 中根据中文拼音对列进行排序的可移植方法

php - MATCH AGAINST SQL 注入(inject)预防和 wpdb->prepare

java - 在我的项目中使用 JAVA 实现 Elasticsearch 的最佳方法是什么?

java - 使用方法中声明的相同方法?

postgresql - 组和子组关系的最优关系设计

java - 使用 org.postgresql.core.Utils.escapeLiteral 是否足以防止 SQL 注入(inject)?

php - 使用 $_GET 和 $_POST

java - 泛型类中的广泛类型删除