我在前缀单引号'
字符时遇到问题。我正在尝试制作一个简单的注射预防功能...
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注入函数。 无需重新发明轮子。