Sanitize: trim() + mysqli_real_escape_string() ИЛИ filter_input()?

Я ищу самый безопасный способ обезопасить вводимые пользователем данные и избежать угроз безопасности в онлайн-приложении PHP.

До сих пор я использовал TRIM + mysqli_real_escape_string для очистки пробелов и очистки контента, как это (строковые данные):

$ca_title = trim(mysqli_real_escape_string($con,$_POST['ca_name']));

В связи с постоянным советом NetBeans "не обращаться напрямую к суперглобальному массиву $_post", я искал этот способ и нашел другой способ очистки, который, я сомневаюсь, делает то же самое, что и до сих пор:

$ca_title = filter_input(INPUT_POST, 'ca_name', FILTER_SANITIZE_STRING);

Изучив документы по PHP, я должен сказать, что я не вижу большой разницы между ними, и поэтому не могу отказаться от самого безопасного метода. Не могли бы вы посоветовать мне это?

2 ответа

Решение

Вместо того, чтобы фильтровать / дезинфицировать, используйте заранее подготовленные операторы mysqli. Они безопасны для выполнения независимо от содержимого параметра и не требуют громоздкого и подверженного ошибкам экранирования / неэкранирования.

Они делают разные вещи.

Всегда экранируйте данные для своей базы данных. Лучше всего это делать с подготовленными заявлениями.

Всегда экранируйте текст перед вставкой в ​​HTML (htmlspecialchars это основные инструменты здесь).

Всегда (кроме случаев, когда вы абсолютно уверены, что ваши пользователи не являются вредоносными и способны писать качественный HTML), используйте вставленный в DOM фильтр XSS для внесения белых списков во введенный HTML, прежде чем вставлять его в свои документы HTML.

Используйте фильтры (в дополнение к вышесказанному), когда никогда не имеет смысла иметь определенные символы в данных (например, не числа в номере телефона). Сначала убедитесь, что ваши предубеждения верны.

Другие вопросы по тегам