我有一段生成动态XML字符串的Javascript代码。然后将此XML字符串传递给PHP文件,我需要检查该文件以确保该字符串不包含任何可能允许SQL注入的错误单词。
我想我会创建一个黑名单,如果找到任何单词,我们就不会将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';
}
有没有更好的方法来处理这种类型的支票?我不确定要搜索什么,所以认为单词的黑名单就足够了。
答案 0 :(得分:1)
调用stripos
时,参数的顺序错误。而不是stripos($a,$str)
,您需要stripos($str,$a)
。第一个版本是在单个“坏”字中搜索整个XML字符串。第二个在XML字符串中搜索单词。