首页 > 解决方案 > 在 JavaCode 中生成安全 SQL

问题描述

如何像 PreparedStatement 一样编写 SQL(MySQL),如转义,避免 SQL 注入,生成安全的 SQL 语句。

是否有任何现有的 JavaCode 可以做到这一点?

真实场景:前端输入作为列值组成安全SQL(“where”部分),后端指定的是表名和列名。

标签: javamysql

解决方案


有一些 SQL 构建器,通常它们会跟踪所有参数并构建 PreparedStatement。不仅提供参数值,还提供参数名称甚至可能是一种想法,因此可以将其用作真正的 PreparedStatement。

您可以从 Spring 创建一个 JdbcTemplate。或标准 API。

如果你想建立自己的研究,你也可以探索逃避。

然后(研究)还考虑使用 LTR ( \u200E) 和 RTL ( \u200F) 来禁止 Unicode bidi 黑客攻击:通过使用从右到左的控件,可以混淆 SQL 在编辑器中看起来似乎没问题,但恶意地做一些不同的事情。您可以要求字符不能出现在字符串中,但也必须转义:\\u200F. (但是对于书呆子或内部人员来说,这是一些事情,并且您的 SQL 必须已经处于敏感点。)

SQL方言很重要;名称等的反引号(MySQL)或双引号(标准)。

有 Apache 的 commonlang escapeSql


推荐阅读