0
我有一段生成動態XML字符串的Javascript代碼。然後將該XML字符串傳遞給PHP文件,我需要檢查該文件以確保該字符串不包含任何可能允許SQL注入的不良詞。PHP字符串中的黑名單字
我想我只是創建一個黑名單,如果找到任何單詞,我們只是不發送XML到數據庫。
但是,當我傳入一個或多個黑名單單詞時,我的代碼片段並未返回true。
// Create a blacklist array
$blacklist = Array('create', 'alter', 'update', 'delete', 'drop', 'insert', 'into', 'from', 'where');
// Define our vars
$xml = '<blah>alert table drop something create</blah>';
$actor = $_COOKIE['QID'];
$sp = $_POST['sp'];
// Lets check the XML string to see if it contains any database altering words
function contains($str, array $arr)
{
foreach($arr as $a) {
if (stripos($a,$str) !== false) return true;
}
return false;
}
// Check our XML string
if(contains($xml, $blacklist))
{
echo 'Contains';
}
else
{
echo 'Does not contain';
}
有沒有更好的方法來處理這種類型的檢查?我不確定要搜索什麼,所以認爲單詞的黑名單就足夠了。
你應該不那麼擔心字符串中的單詞,而更擔心引號。只要它們被正確引用,這些詞語都不會引起任何問題。 –
xml正在用於動態SQL查詢。 xml包含用戶想要包含在其報告中的字段名稱。查詢運行時,它將使用XML字符串中的每個值作爲字段名稱創建一個select語句。我寧願只是不讓這些單詞超過這個函數,也不需要它們存在於正在創建的字符串中。 – SBB
然後你能展示更多的代碼嗎?包括生成並執行任何查詢的部分?使用參數化查詢可能會提供您所需的保護。如果你真的想使用黑名單方法,你將需要一個更大的名單。 –