preg_match 清理输入以获得最佳安全性

preg_match to sanitize input for the best security

我正在 wordpress 网站上工作(我是网络开发的新手)。我安装了一个主题,现在我正在寻求改进它并使其适合我的需要。关于注册表单,主题检查密码中无效字符的代码是这样的:

else if(preg_match("/^([a-zA-Z0-9@#-_$%^&+=!?]{1,20})$/", $data['user_password'])==0) {
                SendtoUSER::$messages[]=__('Forbidden characters detected', 'mytheme');

用户名是这个

if(preg_match('/[@\s]/', $username)) {
            $valid=false;
        }

我做了一些研究,我理解了大部分表达方式 "/^([a-zA-Z0-9@#-_$%^&+=!?]{1,20})$/" - 我不明白的是为什么;仍然有效使用(我观察到删除 #-_ 会阻止 ; 工作,所以 #-_ 是一个 inverval 吗?)我的问题是 @#-_$%^&+=!? 在表达式中意味着什么?这段代码是否足够好,实施 preg_match 以获得最大安全性的一些好的做法是什么?预先感谢您的回复。

我想在 WordPress 中,sanitize_text_field 将是最好的解决方案。您可以验证它:

if ( sanitize_text_field( $data['user_password'] ) !== $data['user_password']  ) {
    $valid=false;
}

此外,我已经检查了它在配置文件页面上的工作方式,它看起来像在核心中,它验证为:

$pass1 = trim( $_POST['pass1'] );
//...
// Check for "\" in password.
if ( false !== strpos( wp_unslash( $pass1 ), '\' ) ) {
    $errors->add( 'pass', __( '<strong>Error</strong>: Passwords may not contain the character "\".' ), array( 'form-field' => 'pass1' ) );
}

可能最好的解决方案也是复制 WordPress 解决方案。