我一直在尝试使用PHP进行安全搜索查询。
到目前为止,这是我的代码,这是错误的:
else if(!ctype_alpha($searchkey) && !is_numeric($searchkey) &&!ctype_print($searchkey)){
$data['errMsg'] = "Please enter a valid search key.";
}
虽然ctype_print
有点好,但它仍然接受非字母字符,这对SQL注入是不安全的。我可以使用哪些允许空格但不允许使用非字母数字字符?谢谢。所有答案将不胜感激。
编辑:
所以我明白了。有时,我变得如此愚蠢。为了防止不安全的输入,我使用了PHP的mysql_real_escape_string
。对不起伙计们。
答案 0 :(得分:1)
如果您正在尝试防范SQL注入,我会使用预准备语句(PDO示例):
$stmt = $dbh->prepare('SELECT stuff FROM table WHERE input = ?');
$stmt->execute($searchkey);
foreach($stmt as $row){
//do something
}
这比您可以创建的任何输入消毒更有效。
如果您只是想以特定方式简单地格式化搜索查询,请忽略它并使用类似ctype_alnum($searchKey)
的内容,PHP手册:http://php.net/manual/en/function.ctype-alnum.php
答案 1 :(得分:0)
使用ctype_alnum()
功能:
!ctype_alnum($searchkey)
检查字符串是否为字母数字
答案 2 :(得分:0)
preg_match('/[a-zA-Z0-9\s]+/', $searchkey);
答案 3 :(得分:0)
尝试:
function coolCheck($string) {
return preg_match("/^[a-zA-Z0-9\s]*$/", $string);
}