使用preg_replace实现PHP安全

使用preg_replace实现PHP安全,php,sanitization,Php,Sanitization,我正在开发一个PHP函数来处理来自web表单的提交 允许的字符严格为字母数字、a-b、0-9 在处理和插入数据库之前,依靠preg_replace with regular expression清除这些数据是否安全 我已经研究了很多我看到的常规PHP数据清理选项,但由于系统设计严格禁止使用或使用非字母数字字符,我认为从一开始就去除任何与/[^a-zA-Z\s-0-9.,']/不匹配的内容会更容易 我说的对吗?如果只允许在数据库中存储字母数字字符,而不是删除无效字符,那么最好向用户返回一个错误,因

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

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

在处理和插入数据库之前,依靠preg_replace with regular expression清除这些数据是否安全

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


我说的对吗?

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

换句话说,使用
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.
}

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

换句话说,使用
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.
}

您显示的正则表达式不是严格意义上的字母数字。在存储到数据库之前,您当然应该先转义(如果您还没有使用准备好的语句的话)。您显示的正则表达式并不是严格意义上的字母数字。在存储到数据库之前,您当然应该先转义(如果您还没有使用准备好的语句)。需要
/i
。虽然我更喜欢
if(preg\u match('/^[\W\u]$/',$input)){
需要
/I
。尽管我更喜欢
if(preg\u match('/^[\W\u]$/',$input)){