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