Что касается внедрения SQL, да, вы можете быть на 100% уверены, что всегда используете подготовленные операторы.Что касается XSS, вы также должны убедиться, что все ваши страницы имеют UTF-8.HTML Purifier очищает данные, предполагая, что они закодированы в UTF-8, поэтому могут возникнуть непредвиденные проблемы, если вы поместите эти данные на страницу с другой кодировкой.На каждой странице должен быть тег <meta>
, который определяет кодировку как UTF-8.
Нет, вам не нужно очищать данные после того, как вы извлечете их из БД, при условиичто вы уже продезинфицировали его и не добавляете к нему какие-либо пользовательские материалы.
Если вы всегда используете подготовленные операторы, магические кавычки - не что иное, как неприятность.Это не дает никаких дополнительных линий защиты, потому что подготовленные заявления являются пуленепробиваемыми.
Теперь вот вам вопрос.PDO::PARAM_INT
превратит $field1
в целое число.Целое число нельзя использовать при атаке SQL-инъекцией.Почему вы пропускаете его через HTML Purifier, если это просто целое число?
HTML Purifier замедляет все, поэтому вы должны использовать его только в тех областях, где вы хотите разрешить HTML.Если это целое число, просто сделайте intval($var)
, чтобы уничтожить все, что не является числом.Если это строка, которая в любом случае не должна содержать HTML, просто сделайте htmlspecialchars($var, ENT_COMPAT, 'UTF-8')
, чтобы уничтожить весь HTML.Оба они гораздо более эффективны и одинаково безопасны, если вам не нужно разрешать HTML.Каждое поле должно быть обработано, но каждое поле должно быть очищено в соответствии с тем, что оно должно содержать.
Ответ на ваши добавления:
Я не хотел подразумеватьчто если переменная должна содержать целое число, то ее не нужно очищать.Извините, если мой комментарий натолкнулся на это.Я пытался сказать, что , если переменная должна содержать целое число, ее не следует очищать с помощью HTML Purifier. Вместо этого ее следует проверять / очищать с помощью другой функции, такой как intval()
илиctype_digit()
.В этом случае HTML Purifier не только использует ненужные ресурсы, но и не может гарантировать, что в дальнейшем эта переменная будет содержать целое число.intval()
гарантирует, что результатом будет целое число, и результат будет в равной степени безопасным, поскольку никто не может использовать целое число для проведения атаки с использованием XSS или SQL-инъекций.
Аналогично, если переменная не должна содержать HTMLво-первых, как и заголовок вопроса, вы должны использовать htmlspecialchars()
или htmlentities()
.HTML Purifier следует использовать только в том случае, если вы хотите, чтобы ваши пользователи вводили HTML (например, с помощью редактора WYSIWYG).Поэтому я не хотел утверждать, что некоторые виды входных данных не нуждаются в санитарной обработке.Я считаю, что входные данные следует очищать с использованием различных функций в зависимости от того, что вы хотите, чтобы они содержали.Не существует единого решения, которое работает на всех типах входов.Совершенно возможно создать безопасный веб-сайт без использования HTML-очистителя, если вы принимаете только текстовые комментарии.
«Защита на стороне клиента» - это не линия защиты, а просто удобство.
У меня также возникает неприятное ощущение, что вы смешиваете XSS и SQL-инъекции вместе, когда они представляют собой совершенно разные векторы атак."XSS инъекция"?Что это?
Вы, вероятно, также захотите добавить в свой код проверку в дополнение к sanitization .Санитарная обработка гарантирует, что данные в безопасности.Валидация гарантирует, что данные не только безопасны, но и правильны .