Я пытаюсь убрать мои теги, потому что кто-то продолжает взламывать мой сайт, используя старый «> бла в качестве имени пользователя. Почему-то мой 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');