PHP XSS Вопрос / Уточнение

Это было задано раньше, но мне нужна 100% ясность по этому вопросу, так как для меня очень важно, чтобы все было правильно.

Ситуация: система сообщений на веб-сайте. Пользователь вводит сообщение в текстовое поле, он передает форму и вводится в базу данных. Эти данные затем могут вызываться из базы данных и отображаться в тегах <span> другому пользователю.

Какие меры безопасности я должен предпринять, чтобы предотвратить распространение этих данных? Я уже использую mysql_real_escape_string, чтобы остановить любую инъекцию, и strip_tags кажется полезным, но я слышал много других имен. Что мне нужно использовать для защиты этих данных, учитывая, что оно отображается только в тегах <span> ?

Спасибо.

Solutions Collecting From Web of "PHP XSS Вопрос / Уточнение"

Заблуждение состоит в том, что вы хотите избежать ввода, что неверно. Вы должны отфильтровать вывод (и база данных также является результатом).

Это означает, что при mysql_real_escape_string() формы вы используете mysql_real_escape_string() для отправки (вывода) данных в базу данных, и вы используете htmlspecialchars() для вывода содержимого на экран. Тот же принцип применяется к регулярным выражениям, в которых вы должны использовать preg_quote() и т. Д.

Независимо от того, откуда поступают данные, вы должны избегать его в контексте того, куда вы его отправляете.

Поэтому для предотвращения атак XSS вы должны использовать htmlspecialchars() / htmlentities() . mysql_real_escape_string имеет ничего общего с XSS (но вы все равно должны использовать его при отправке данных в базу данных).

Используйте htmlspecialchars при выводе на HTML-страницу. Он будет отображать данные так же, как пользователь ввел его (чтобы пользователи могли использовать что-то вроде <3 в своих сообщениях, не снимая остальную часть)

Пожалуйста, проверьте Cheat Sheet OWASP XSS. Он объяснит, как избежать XSS для разных контекстов. Htmlentities должны выполнять работу, когда между тегами.