ПЛАТФОРМА: PHP и mySQL
В моих экспериментальных целях я пробовал несколько инъекций XSS самостоятельно на своем собственном веб-сайте. Подумайте об этой ситуации, когда у меня есть вход в форму textarea. Поскольку это текстовое поле, я могу вводить текст и всевозможные (английские) символы. Вот мои наблюдения:
А). Если я применяю только strip_tags и mysql_real_escape_string и не использую htmlentities на моем входе непосредственно перед вставкой данных в базу данных, запрос ломается, и я попал с ошибкой, которая показывает мою структуру таблицы, из-за аномальное завершение.
В). Если я применяю strip_tags, mysql_real_escape_string и htmlentities на моем входе непосредственно перед вставкой данных в базу данных, запрос НЕ разбивается на, и я могу успешно вставлять данные из текстового поля в мою базу данных.
Итак, я понимаю, что htmentities должны использоваться любой ценой, но не уверены, когда именно он должен использоваться. С учетом вышеизложенного я хотел бы знать:
-
Когда нужно использовать только htmlentities? Должен ли он использоваться непосредственно перед вставкой данных в БД или каким-то образом получить данные в БД, а затем применить htmlentities, когда я пытаюсь показать данные из БД?
-
Если я следую методу, описанному в пункте B) выше (который, по моему мнению, является наиболее очевидным и эффективным решением в моем случае), мне все еще нужно применять htmlentities, когда я пытаюсь показать данные из DB? Если да, то почему? Если нет, почему бы и нет? Я спрашиваю об этом, потому что это действительно сбивает меня с толку после того, как я прошел через пост: http://shiflett.org/blog/2005/dec/google-xss-example
-
Затем появляется еще одна функция PHP: html_entity_decode. Могу ли я использовать это для отображения моих данных из БД (после выполнения моей процедуры, как указано в пункте B), поскольку htmlentities применялись на моем входе? Какой из них я должен использовать: html_entity_decode и htmlentities и когда?
ПРЕДВАРИТЕЛЬНАЯ СТРАНИЦА:
Я подумал, что это может помочь добавить некоторые более конкретные детали конкретной ситуации здесь. Учтите, что есть страница "Предварительный просмотр". Теперь, когда я отправляю входные данные из текстового поля, страница предварительного просмотра получает вход и показывает его html, и в то же время скрытый ввод собирает этот вход. Когда нажата кнопка отправки на кнопке предварительного просмотра, данные со скрытого ввода отправляются на новую страницу и эта страница вставляет данные, содержащиеся в скрытом вводе, в БД. Если я не применяю htmlentities, когда форма изначально отправлена (но применимо только strip_tags и mysql_real_escape_string), и там есть вредоносный ввод в текстовом поле, скрытый ввод прерывается, а последние несколько символов скрытого ввода видимо воспринимаются как " />
on страницу, что нежелательно. Поэтому, помня об этом, мне нужно что-то сделать, чтобы сохранить целостность скрытого ввода на странице предварительного просмотра и все же собрать данные на скрытом входе, чтобы он не сломал его. Как мне это сделать? Извините за задержку в публикации этой информации.
Спасибо заранее.