2

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

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

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

我想得到一些反馈,你认为这是足够的保护吗?是否有某种方法可以编写可以保护我们的 SQL,类似于将表名括在适当的引号中?

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

4

2 回答 2

1

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

于 2012-06-21T15:02:22.653 回答
1

我看到您正在使用 PHP,为什么不使用净化过滤器净化您的用户输入并按照您的方式做所有其他事情!让我们知道这是否适合您?您正在寻找的 PHP 函数是FILTER_SANITIZE_STRING或其他类似的函数。你可以在这里浏览那些http://php.net/manual/en/filter.filters.sanitize.php

于 2012-06-21T15:11:35.190 回答