2012-05-17 49 views
0

我正在开发一个PHP函数来处理来自Web表单的提交。使用preg_replace进行PHP安全性

允许的字符严格为字母数字,a-b,0-9。

在处理和插入数据库之前,依靠preg_replace和正则表达式来清理此数据是否安全?

我已经看过很多关于正常PHP数据清理选项的内容,但是由于系统设计严格禁止使用非字母数字字符,所以我认为这将更容易去除任何不符合从一开始就匹配/[^a-zA-Z\s-0-9.,']/。

我在正确的轨道上吗?

+0

您显示的正则表达式不是严格的字母数字。在存储到数据库中之前,您肯定应该转义(如果您尚未使用准备好的语句)。 – kapa

回答

4

如果您只允许字母数字字符存储在您的数据库中,而不是剥离无效字符,则最好向用户返回一个错误,以提供无效输入。这样,用户在看到他们的数据以不同于最初输入的形式显示给他们时,不会感到困惑。

换言之,使用preg_match()验证输入以确保它符合您的要求,如果没有,请将错误返回给用户以便他们修复它。然后将其转义以插入到数据库中或使用准备好的语句。

if (!preg_match('/^[a-z0-9., ]$/i', $input)) { 
    // error Invalid input. Please use only letters and numbers 
} 
else { 
    // call escape function on $input or insert it with a prepared statement 
    // whatever is the appropriate method for your RDBMS api. 
} 
+0

需要'/ i'。虽然我更喜欢'if(preg_match('/^[\ W _] $ /',$ input)){ – DaveRandom