转义字符的代码不会替换"



我在前缀单引号'字符时遇到问题。我正在尝试制作一个简单的注射预防功能...

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;
}

它适用于"字符,但不适用于'字符......有人知道出了什么问题吗?

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

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

现在,回答您的问题:

如果在数组中找到针的键,array_search()返回该键,否则FALSE。目前,您正在检查返回值是否>=1 。单引号字符是数组中的0th索引,因此' $value时不会执行if块中的代码。

要知道$notallowed中的任何数组值是否存在于$value,您可以简单地检查返回值是否FALSE

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

存在大量的SQL注入函数。 无需重新发明轮子。

最新更新