filter_input-regexp是否足以满足“自由度很小”的输入?.


Is filter_input-regexp enough for inputs with "little freedom" ?

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

目前,我总是在使用任何输入之前进行检查,我使用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简单地使用验证是安全的。

谢谢!

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

它不能保护你免受SQL注入,但是。这件事必须单独处理。