2

我一直在尝试使用 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. 对不起大家。

4

4 回答 4

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

于 2013-09-03T14:25:06.137 回答
1

尝试:

function coolCheck($string) {
    return preg_match("/^[a-zA-Z0-9\s]*$/", $string);
}
于 2013-09-03T14:24:44.040 回答
0
preg_match('/[a-zA-Z0-9\s]+/', $searchkey);
于 2013-09-03T14:20:09.550 回答
-1

使用ctype_alnum()功能:

!ctype_alnum($searchkey)

这检查字符串是否是字母数字

于 2013-09-03T14:19:11.880 回答