java - 在 JavaCode 中生成安全 SQL
问题描述
如何像 PreparedStatement 一样编写 SQL(MySQL),如转义,避免 SQL 注入,生成安全的 SQL 语句。
是否有任何现有的 JavaCode 可以做到这一点?
真实场景:前端输入作为列值组成安全SQL(“where”部分),后端指定的是表名和列名。
解决方案
有一些 SQL 构建器,通常它们会跟踪所有参数并构建 PreparedStatement。不仅提供参数值,还提供参数名称甚至可能是一种想法,因此可以将其用作真正的 PreparedStatement。
您可以从 Spring 创建一个 JdbcTemplate。或标准 API。
如果你想建立自己的研究,你也可以探索逃避。
然后(研究)还考虑使用 LTR ( \u200E
) 和 RTL ( \u200F
) 来禁止 Unicode bidi 黑客攻击:通过使用从右到左的控件,可以混淆 SQL 在编辑器中看起来似乎没问题,但恶意地做一些不同的事情。您可以要求字符不能出现在字符串中,但也必须转义:\\u200F
. (但是对于书呆子或内部人员来说,这是一些事情,并且您的 SQL 必须已经处于敏感点。)
SQL方言很重要;名称等的反引号(MySQL)或双引号(标准)。
有 Apache 的 commonlang escapeSql
。
推荐阅读
- nan - 如何在综合控制方法中运行负值
- php - 在我的购物车中创建会话数组不起作用
- sql - 在 sqlalchemy 中设置自引用多对多关系
- tensorflow - 如何仅在主块对角线上为协方差矩阵 RBF 加上噪声在 GPflow 中编写自定义内核?
- azure - 此 Azure DevOps 存储库中的宏是否会导致我的部署管道失败?
- python - Word2Vec 对象不可下标
- import - 如何生成从自定义模块下载文件的链接?PrestaShop 1.7
- sql - 序列容器
- uno-platform - Uno 平台底座面板
- performance - VMware - “ethernetX.pnicFeatures”和“ethernetX.ctxPerDev”参数有什么区别?