Я немного смущен этим. Я читал о htmlspecialchars()
и я планирую использовать это для htmlspecialchars()
POST
чтобы предотвратить атаку XSS. Я понимаю, что обычно htmlspecialchars()
используются для генерации вывода HTML, который отправляется в браузер. Но я не уверен:
1) Безопасно ли использовать htmlspecialchars()
для пользовательских входных данных, прежде чем вставлять их в MySQL? Я уже использую подготовленный отчет PDO с параметризованными значениями, чтобы предотвратить SQL Injection.
2) Или мне действительно не нужно беспокоиться об использовании htmlspecialchars()
для вставленных значений (при условии их параметризации) и использовать только htmlspecialchars()
когда я получаю результаты из MySQL и отображаю их пользователям?
Как указывали другие, № 2 – правильный ответ. Оставьте его «сырым» до тех пор, пока он вам не понадобится, а затем убежайте.
Чтобы уточнить, почему (и я буду повторять / обобщать другие сообщения), давайте рассмотрим сценарий 1 до его логической крайности.
Что происходит, когда кто-то вводит « ' OR 1=1 <other SQL injection> --
». Теперь, возможно, вы решили, что, поскольку вы используете SQL, вы должны кодировать для SQL (возможно, потому, что вы не использовали параметризованные утверждения). Итак, теперь вы должны смешивать (или решать) SQL и HTML-кодирование.
Неожиданно ваш босс решает, что ему нужен вывод XML. Теперь, чтобы сохранить ваш шаблон согласованным, вам также нужно закодировать.
Следующий CSV – о нет! Что делать, если в тексте есть цитаты и запятые? Больше побегов!
Эй, как насчет приятного интерактивного интерфейса AJAX? Теперь вы, вероятно, захотите начать отправку JSON обратно в браузер, так что теперь {, [и т. Д. Все должны быть приняты во внимание. ПОМОГИТЕ!!
Таким образом, храните данные как заданные (с учетом ограничений домена), и кодируйте их соответствующим образом в то время, когда оно вам нужно . Ваш результат не совпадает с вашими данными.
Надеюсь, этот ответ не слишком покровительствует. Кредит другим респондентам.