ПЛАТФОРМА:
PHP и MySQL
В своих экспериментальных целях я сам попробовал несколько инъекций XSS на своем собственном сайте. Рассмотрим ситуацию, когда у меня есть форма ввода textarea. Поскольку это текстовая область, я могу вводить текст и все виды (английских) символов. Вот мои наблюдения:
A). Если я применяю только 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, и в то же время скрытый ввод собирает этот ввод. При нажатии кнопки «Отправить» на кнопке «Просмотр» данные из скрытого ввода помещаются в POST на новую страницу, и эта страница вставляет данные, содержащиеся в скрытом вводе, в БД. Если я не применяю htmlentities при первоначальной отправке формы (но применяю только strip_tags и mysql_real_escape_string), и в текстовой области есть вредоносный ввод, скрытый ввод прерывается, и последние несколько символов скрытого ввода видны как " />
на страница, которая нежелательна. Поэтому, помня об этом, мне нужно что-то сделать, чтобы должным образом сохранить целостность скрытого ввода на странице предварительного просмотра, и в то же время собирать данные в скрытом вводе, чтобы он не нарушал его. Как мне это сделать? Приносим свои извинения за задержку публикации этой информации.
Заранее спасибо.