0

我想知道,如果 preg_match() 可以用作 PHP 的唯一防线。

测试 preg_match(),至少对于一个简单的输入表单字段,它只接受正则表达式可接受的内容,并为其他所有内容返回 false:

对于数字:

function GetUserID($userid) {
   $regexnum = "/^[0-9]+$/";
   if(preg_match($regexnum, $userid) != 1 OR empty($userid)) {
      return false;
   }
   else {
      return $userid;
   }
}

对于名称:

function GetUsername ($user) {
   $regex = "/^[a-zA-Zà-ûÀ-ÛçÇ\s]+$/";
   if (preg_match($regex, $user) != 1 OR empty($user)) {
      return false;
   }
   else {
      return $user;
   }
}

所以我的问题是,preg_match() 是否可以成为不使用 htmlentities() 或 filter_var() 的唯一防线,因为它不接受任何其他内容,或者我错过了什么?

* 编辑 * 我创建了这段代码来测试它: 测试站点

4

1 回答 1

0

是的。然而,不要完全依赖它是个好主意,因为对正则表达式的轻微更改可能会使您容易受到攻击。使用正确的转义函数是理想的,因为即使您的验证代码发生变化,您的清理代码也不会发生变化。

于 2014-03-27T16:03:17.457 回答