0

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

允许的字符是严格的字母数字、ab、0-9。

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

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

我在正确的轨道上吗?

4

1 回答 1

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.
}
于 2012-05-17T12:29:29.653 回答