我的 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();
}
}
这是它进入我的数据库时的结果:
简单地禁止可能导致问题的用户名可能是更 simple/efficient 的解决方案。例如,preg_match("/^[a-zA-Z0-9\._]+$/", $username)
将允许您拒绝包含除字母、数字、点或下划线以外的其他字符的用户名。
strip_tags()
函数不是解决此问题的最佳方法 - 如果没有相应的 <
开始标记,我不确定它是否会删除 >
结束标记,例如。
在任何情况下,用户名的尖括号和引号本身都没有错,只要您在输出代码中正确呈现它们即可。
这样就可以了(调整 HTML 类型和字符集以适应):
echo htmlspecialchars($username, ENT_HTML5, 'UTF-8');
我正在尝试去除我的标签,因为有人一直使用旧的 ">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();
}
}
这是它进入我的数据库时的结果:
简单地禁止可能导致问题的用户名可能是更 simple/efficient 的解决方案。例如,preg_match("/^[a-zA-Z0-9\._]+$/", $username)
将允许您拒绝包含除字母、数字、点或下划线以外的其他字符的用户名。
strip_tags()
函数不是解决此问题的最佳方法 - 如果没有相应的 <
开始标记,我不确定它是否会删除 >
结束标记,例如。
在任何情况下,用户名的尖括号和引号本身都没有错,只要您在输出代码中正确呈现它们即可。
这样就可以了(调整 HTML 类型和字符集以适应):
echo htmlspecialchars($username, ENT_HTML5, 'UTF-8');