繁体   English   中英

我的 HTML 标签不会从 $this->username 中剥离

[英]My HTML Tags won't be stripped from $this->username

我试图剥离我的标签,因为有人一直使用旧的 ">blah 作为他们的用户名来入侵我的网站。出于某种原因,我的strip_tags()没有剥离标签,但addslashes()正在工作。

我不知道我是否省略了括号 - 但这是代码:

     public function register() {
    $correct = false;
        try {
            $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
            $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
            $this->username = strip_tags($this->username);
            $this->username = addslashes($this->username);
            $sql = "INSERT INTO User_Agents(username, password) VALUES(:username, :password)";

            $stmt = $con->prepare( $sql );
            $stmt->bindValue( "username", $this->username, PDO::PARAM_STR );
            $stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
            $stmt->execute();
            return "Registration Successful <br/> <a href='index.php'>Login Now</a>";
        }catch( PDOException $e ) {
            return $e->getMessage();
        }
 }

当它进入我的数据库时,结果是这样的:

它输入的图片

简单地禁止可能导致问题的用户名可能是一个更简单/有效的解决方案。 例如, preg_match("/^[a-zA-Z0-9\\._]+$/", $username)将允许您拒绝包含字母、数字、点或下划线以外的其他字符的用户名。

strip_tags()函数不是解决此问题的最佳方法 - 例如,如果没有相应的<开始标记,我不确定它是否会删除>结束标记。

在任何情况下,用户名的尖括号和引号都没有本质上的错误,只要您在输出代码中正确呈现它们即可。

像这样的事情可以解决问题(调整 HTML 类型和字符集以适应):

echo htmlspecialchars($username, ENT_HTML5, 'UTF-8');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM