Есть несколько вещей, которые следует учитывать при разработке приложения PHP, strip_tags()
помогает только в одном из них. На самом деле strip_tags()
, хотя и эффективен, может даже сделать больше, чем нужно: преобразование потенциально опасных символов с htmlspecialchars()
должно быть даже предпочтительнее, в зависимости от ситуации.
Как правило, все сводится к двум простым правилам: фильтровать весь ввод, экранировать весь вывод. Теперь вам необходимо понять, что именно представляет собой ввод и вывод.
Вывод прост, все, что ваше приложение отправляет в браузер, выводится, поэтому используйте htmlspecialchars()
или любую другую экранирующую функцию каждый раз, когда вы выводите данные, которые вы не писали сами.
Ввод - это любые данные, не закодированные в вашем PHP-коде: вещи, поступающие из формы через POST, из строки запроса через GET, из файлов cookie, все эти должны фильтроваться наиболее подходящим способом в зависимости от твои нужды. Даже данные, поступающие из базы данных, следует считать потенциально опасными; особенно на разделяемом сервере, вы никогда не знаете, была ли база данных взломана в другом месте таким образом, что это может повлиять и на ваше приложение.
Существуют различные способы фильтрации данных: белые списки, разрешающие только выбранные значения, проверка на основе ожидаемого формата ввода и т. Д. Одна вещь, которую я никогда не предлагаю, это попытаться исправить данные, которые вы получаете от пользователей: пусть они играют по вашим правилам, если вы не получаете того, что ожидаете, отклоните запрос вместо того, чтобы пытаться очистить его.
Особое внимание, если вы имеете дело с базой данных, должно быть уделено инъекциям SQL: этот тип атаки основан на том, что вы неправильно строите строки запросов, которые отправляете в базу данных, чтобы злоумышленник мог подделать их, пытаясь выполнить вредоносную инструкцию , Вы всегда должны использовать экранирующую функцию, такую как mysql_real_escape_string()
или, лучше, использовать подготовленные операторы с расширением mysqli или PDO .
На эту тему есть что сказать, но эти пункты должны помочь вам начать.
НТН
РЕДАКТИРОВАТЬ : чтобы уточнить, под «фильтрацией входных данных» я имею в виду решить, что хорошо, а что плохо, а не изменять входные данные каким-либо образом. Как я уже сказал, я никогда не буду изменять пользовательские данные, если они не выводятся в браузер.