Входная санировка VS валидация

Я внедрил проверку ввода всех моих входных данных, используя php (а также js на интерфейсе). Я набираю тип, где могу, проверяя такие вещи, как письма с регулярным выражением, убедившись, что выпадающие значения - это только те, которые я ожидаю, а также во многих случаях, когда я ожидаю только строку, у меня есть регулярное выражение, которое работает, что позволяет букв, цифр и пробелов. Все, что не соответствует этим правилам, приводит к ошибке проверки формы и не выполняется никаких запросов sql.

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

Итак, с учетом сказанного, почему мне нужна входная санитация?

Ответ 1

Если у вас очень строгая проверка на стороне сервера, вам не нужно санатировать. Например. проверка строки на /^ [a-z0-9] {5,25} $/не нуждается в какой-либо дезинфекции (удаление не буквенно-цифровых символов не имеет смысла, поскольку они не должны проходить в любом случае).

Просто убедитесь, что вы можете проверить все данные, и если это невозможно (например, с html, это немного сложно), вы можете использовать стратегии экранирования или такие вещи, как html очиститель.

Для получения хорошего обзора стратегий ускорения для предотвращения XSS: см. https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

Для понимания различных угроз безопасности: https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet

Ответ 2

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

Даже если вы на 100% доверяете своей проверке и делаете это на стороне сервера (теоретически, люди не должны связываться с данными), все равно стоит использовать какую-то форму дезинфекции, потому что это хорошая привычка войти.