繁体   English   中英

MySQL和JDBC:管理多个模式的最安全方法是什么?

[英]MySQL & JDBC: What is the safest way to manage multiple schemas?

我正在使用JDBC和MySQL开发应用程序,并且担心SQL注入。 该数据库将是多租户,每个租户具有不同的“模式”。 结果,应用程序需要具有创建和删除模式的能力。

我的挑战是,这类查询似乎不适用于PreparedStatements,我无法对其进行参数化。 这让我有些害怕,我不喜欢将字符串与SQL命令连接在一起。

我唯一的安慰是应用程序用户无法直接创建模式名称。 它们由租户组织名称的前五个字符以及一个唯一索引组成。 至少这是一种安慰。

但是,我正在寻找最佳方法,以确保在可能的情况下,如何保护以下SQL语句免受潜在的注入攻击(参数显然只是此问题的占位符,不能对这些语句进行参数化):

CREATE SCHEMA ?

SHOW TABLES FROM ? (used to verify that the schema DDL script was executed properly)

DROP SCHEMA IF EXISTS ?

如果您使用字符串连接“注入”的唯一字符串完全在您的控制之下,那么您会没事的。

但是,即使在您的控制之下,您仍然可以通过拒绝或转义带有特殊字符的值(SQL注入问题的原因)来保护自己。 假设您使用'引用字符串文字,则需要考虑以下两个特殊字符: '\\

如果您正确地对字符串进行了转义,则可以将其“注入”到SQL中,甚至可以使用用户提供的字符串。 缺少转义字符串会导致SQL注入漏洞。

请注意,由于使用MySQL,因此只能保证上述内容是正确的。 其他RDBMS可以在'引号的字符串文字中使用其他特殊字符,这就是为什么使用PreparedStatement标记通常是确保抵御SQL Injection攻击的最佳方法的原因,其中JDBC驱动程序可以在需要的地方进行正确的转义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM