在CREATE TABLE语句中转义SQL数据类型

时间:2012-06-21 14:34:40

标签: php mysql security

快速背景:我们正在为我们的网络应用程序创建表单生成器。构建器的目标是允许我们的管理员在页面上快速添加/修改表单。为了确保这些表单收集的数据可以轻松搜索报表,我们决定让应用程序为每个保存用户输入数据的表单创建一个表。

意识到安全性,我们所有的表名和列名都被正确地转义并用适当的引号包围(对于MySQL来说是引号`)。但是,我不知道CREATE语句中的数据类型是否有任何转义或引用。我们希望允许不同的数据类型考虑更好的索引和搜索,这意味着它们是在创建/修改表单时动态决定的。

我们正在采用

当前路由将我们支持的可能数据类型列入白名单,并强制任何可选的大小输入为数字。这样,任何恶意代码都无法创建BLOB列,并且传入VARCHAR为“128”的大小; DROP DATABASE;“将被转换为128或0(我现在忘记了PHP如何处理字符串到数字的转换)。

我想得到一些反馈,你认为这是足够的保护吗?有没有办法编写它会保护我们的SQL,类似于用适当的引号括起表名?

此外,有没有人知道数据类型大小有什么危险?我预计可能会占用大量空间,但没有任何安全问题。

2 个答案:

答案 0 :(得分:1)

对我来说这一切似乎都很好,只是不要忘记DECIMAL类型需要两个输入,即比例和精度。

答案 1 :(得分:1)

我发现您使用的是PHP,为什么不使用清理过滤器&amp ;; 清理您的用户输入?以你的方式做其他事!如果这对您有用,请告诉我们吗?您正在寻找的PHP函数是FILTER_SANITIZE_STRING或其他类似的函数。您可以在此处浏览http://php.net/manual/en/filter.filters.sanitize.php