1
下面是一個SQL查詢正在使用正則表達式來檢查數據庫包裝器矯枉過正的列嗎?
public function where ($col, $val)
{
if (!preg_match('~^[a-z0-9_]+$~i', $col))
throw new Exception('Invalid parameter $col');
$this->where.= "WEHERE $col = :$col";
}
爲例包裝,因爲正則表達式是可能使用資源,這是相當矯枉過正。 注意我實際上使用它來包裝PDO(請注意冒號:$ col)。
SQL注入預防是一個相當不好的例子,因爲您應該使用mysqli或類似的預備語句庫。 對字符串數據進行最後的完整性檢查以查看是否例如主要是有用的。在您點擊數據庫之前,用戶傳遞的電話號碼將處於預期的格式。 – JBert 2012-08-03 11:56:06
@JBert:我假設你要麼沒有仔細閱讀這個問題(使用PDO),要麼掩蓋了綁定*值*與預處理語句和綁定*模式對象名稱*之間的區別*(這在所有AFAIK中是不可能的)。 – Jon 2012-08-03 12:02:26
對不起,請忽略我的評論(一定是我的大腦關閉了)。我討厭看到應用程序在哪裏用戶需要輸入列名... – JBert 2012-08-03 12:14:48