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


Escaping SQL Data Types in a CREATE TABLE statement

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

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

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

我想得到一些反馈,你认为这是足够的保护吗?有没有某种方法可以编写SQL来保护我们,就像用正确的引号括住表名一样

此外,有人知道数据类型大小有什么危险吗我预计可能会出现占用大量空间的问题,但安全方面没有问题。

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

我看到您正在使用PHP,为什么不使用消毒过滤器用户输入进行消毒;按照自己的方式做其他事情!请告诉我们这是否适合您?您要查找的PHP函数是FILTER_SANITIZE_STRING或类似的其他函数。你可以在这里浏览http://php.net/manual/en/filter.filters.sanitize.php