我无法预先修复单引号'
字符。我正在尝试制作一个简单的注射预防功能......
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;
}
适用于\
和"
字符,但不适用于'
字符......任何人都知道哪里出错了?
我尝试将'
键入为'\''
和"'"
但不起作用,它仍然将其输出为'
答案 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注入功能。无需重新发明轮子。