快速背景:我们正在为我们的 Web 应用程序创建一个表单生成器。构建器的目标是允许我们的管理员在我们的页面上快速添加/修改表单。为了确保这些表单收集的数据可以轻松搜索到报告,我们决定让应用程序为每个包含用户输入数据的表单创建一个表。
考虑到安全性,我们所有的表名和列名都被正确地转义并用正确的引号括起来(MySQL 的后引号 `)。但是,我不知道 CREATE 语句中的数据类型有任何转义或引用。我们希望允许不同的数据类型来解释更好的索引和搜索,这意味着它们是在创建/修改表单时动态决定的。
我们正在采取的当前路线是将我们支持的可能数据类型列入白名单,并强制任何可选的大小输入为数字。这样,任何恶意代码都无法创建 BLOB 列,并传入大小为“128); DROP DATABASE;”的 VARCHAR 将变成 128 或 0(我现在忘记了 PHP 如何处理字符串到数字的转换)。
我想得到一些反馈,你认为这是足够的保护吗?是否有某种方法可以编写可以保护我们的 SQL,类似于将表名括在适当的引号中?
另外,有没有人知道数据类型大小有什么危险?我预计占用大量空间可能会出现问题,但安全性却没有。