我正在开发一个PHP函数来处理来自Web表单的提交。使用preg_replace进行PHP安全性
允许的字符严格为字母数字,a-b,0-9。
在处理和插入数据库之前,依靠preg_replace和正则表达式来清理此数据是否安全?
我已经看过很多关于正常PHP数据清理选项的内容,但是由于系统设计严格禁止使用非字母数字字符,所以我认为这将更容易去除任何不符合从一开始就匹配/[^a-zA-Z\s-0-9.,']/。
我在正确的轨道上吗?
我正在开发一个PHP函数来处理来自Web表单的提交。使用preg_replace进行PHP安全性
允许的字符严格为字母数字,a-b,0-9。
在处理和插入数据库之前,依靠preg_replace和正则表达式来清理此数据是否安全?
我已经看过很多关于正常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.
}
需要'/ i'。虽然我更喜欢'if(preg_match('/^[\ W _] $ /',$ input)){ – DaveRandom
您显示的正则表达式不是严格的字母数字。在存储到数据库中之前,您肯定应该转义(如果您尚未使用准备好的语句)。 – kapa