转义字符的代码不能取代'

时间:2013-12-29 20:22:07

标签: php escaping

我无法预先修复单引号'字符。我正在尝试制作一个简单的注射预防功能......

function injectionProtect($string) {
    $notallowed = array('\'','"','\\');
    $letters=str_split($string);
    foreach($letters as $key => $value) {
        if (array_search($value,$notallowed)>=1) {
            $letters[$key]='\\' . $value;
        }
    }
    $string=implode("",$letters);
    return $string;
}

适用于\"字符,但不适用于'字符......任何人都知道哪里出错了?

我尝试将'键入为'\''"'"但不起作用,它仍然将其输出为'

2 个答案:

答案 0 :(得分:1)

首先,使用此功能来阻止SQL注入。创建一个可以解释所有可能的SQL注入情况的函数并不容易。正确的方法是将MySQLi / PDO用于预处理语句。

现在,回答你的问题:

如果在数组FALSE中找到,则

array_search()会返回针的密钥。目前,您正在检查返回值是否为>=1。单引号字符是数组中的0th索引,因此当if$value时,'块中的代码将无法执行。

要知道$notallowed中是否存在$value中的任何数组值,您只需检查返回值是否为FALSE

if (array_search($value,$notallowed) !== FALSE) {
    $letters[$key]='\\' . $value;
}

答案 1 :(得分:0)

存在大量SQL注入功能。无需重新发明轮子。