filter_input-regexp是否足以用于"少量自由" ?

时间:2016-08-21 10:47:20

标签: php security xss

我目前正在建立一个允许一些用户输入不多的网站。我总是知道允许哪种角色,哪些不是。例如,所有输入都是字母数字,电子邮件或者有一些允许的符号,例如。$!?& @ ** - +。 (密码)

目前,我总是在使用任何输入之前检查,我使用php的filter_input函数执行此操作,使用

等过滤器
filter_var( $post['var'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
filter_input( INPUT_GET, 'id', FILTER_VALIDATE_REGEXP, array( "options"=>array( "regexp"=>"/^[a-zA-Z0-9]*$/")
filter_input( INPUT_POST, 'password', FILTER_VALIDATE_REGEXP, array( "options"=>array( "regexp"=>"/^[a-zA-Z0-9\.\$\-\_\!\£\@\#\*\:\?\&]+$/") )

我希望以后只使用带有regexp的验证,因为它似乎是决定批准什么和拒绝什么的最佳选择。

问题是我有点偏执,所以我想知道最初解释的用法(<([{"' / ..永远不允许)简单地通过regexp使用验证是安全的。

谢谢!

1 个答案:

答案 0 :(得分:1)

假设在某些字段验证失败后立即终止执行,并且在regexp中使用白名单方法,那么是的,这就足够了。有些东西(如电子邮件)可以通过本机PHP函数进行验证,但通常没有理由避免使用正则表达式。

但它并不能保护您免受SQL注入。这个问题必须单独解决。