我的HTML代码不会从$ this->用户名中删除

时间:2015-04-02 04:35:49

标签: php string pdo tags strip-tags

我正在尝试删除我的代码,因为有人通过使用旧的"> 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();
        }
 }

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

Picture of what it entered

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

在任何情况下,只要在输出代码中正确呈现它们,尖括号和用户名的引号就没有任何内在错误。

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

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