我知道使用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的實時的轉義字符串的方法是有可能是使用這種方法的顯着的處理時間缺點,特別是在需要同時處理大量字段的情況下?
考慮到安全性和性能,是否可以將一種方法視爲優越?
很好的答案。消毒後的確有一些相對較重的查詢,所以聽起來相對來說,後者不太可能導致顯着的性能下降。這就是說我可能會嘗試一些基準來滿足我的好奇心。 – user2468499