使用preg_replace实现PHP安全性

时间:2012-05-17 12:27:30

标签: php sanitization

我正在开发一个PHP函数来处理来自Web表单的提交。

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

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

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

我在这里走在正确的轨道上吗?

1 个答案:

答案 0 :(得分: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.
}