我知道使用 MySQLi 和 PDO 的好处,但我想知道清理多选选择列表的最佳方法是以下选项:
首先是使用 mysql_real_escape_string 的明显方法:
$clean_POST = array();
$clean_POST = mysql_real_escape_string($_POST['foo']);
但是是否存在恶意用户可以发送大量 POST 值并设法阻止服务器的风险?回帖here似乎暗示这是一种可能性。
可以通过创建白名单并遍历它检查 POST 中的精确匹配来缓解此问题:
$_POST['foo'] = array('a', 'b');
$whitelist = array(‘a’, 'b', 'c', 'd');
$clean_POST = array();
if (isset($_POST['foo']))
{
foreach ($whitelist as $value)
{
if (in_array($value, $_POST['foo']))
{
$clean_POST[] = $value;
}
}
}
但是与 mysql-real-escape-string 方法相比,使用这种方法可能在处理时间上有明显的劣势,特别是在需要同时处理大量字段的情况下?
考虑到安全性和性能,是否可以认为一种方法更优越?
最佳答案
性能与安全性在许多编程环境中是不合适的。您的输入检查很可能会导致数据库更新或插入查询,这将比您的“复杂”输入检查花费 100 到 1000 秒的时间。
考虑一下,在 1 (2,5,20) 年的时间里,您或其他人将处理您的代码,但不知道为什么或是否做了某事。最佳做法是检查一组允许的条目,否则您将没有下拉列表。此外,在下拉列表的显示和表单提交之间,此值列表可能已更改,因此您需要再次检查它。
所有主要框架都是这样检查的,所以迟早你会得出相同的结论。
关于php - 清理多项选择列表的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19628972/