Фильтрация выхода или входа?
Я постоянно вижу, как люди пишут «фильтровать ваши входы», «очищают ваши входы», не доверяют пользовательским данным, но я согласен только с последним, где я считаю, что доверять любым внешним данным - плохая идея, даже если это внутренний относительно системы.
Входная фильтрация:
Самое распространенное, что я вижу.
Возьмите форму публикации данных или любой другой внешний источник информации и определите некоторые границы при ее сохранении, например, убедитесь, что текст - это текст, числа - это числа, что sql является действительным sql, что html является действительным html и что он не содержит вредных Разметка, а затем вы сохраните «безопасные» данные в базе данных.
Но при получении данных вы просто используете необработанные данные из базы данных.
По моему личному мнению, данные никогда не являются действительно безопасными.
Хотя это звучит просто, просто отфильтруйте все, что вы получаете из форм и URL-адресов, в действительности это намного сложнее, это может быть безопасно для одного языка, но не для другого.
Выходная фильтрация:
Делая это таким образом, я сохраняю необработанные неизмененные данные, какими бы они ни были, с подготовленными операторами в базу данных, а затем отфильтровываю проблемный код при доступе к данным, у этого есть свои преимущества:
Это добавляет слой между html и сценарием на стороне сервера.
который я считаю разделением доступа к данным.
Теперь данные фильтруются в зависимости от контекста, например, я могу получить данные из базы данных в виде html-документа в виде простого экранированного текста, либо в виде html, либо в любом другом месте.
Недостатки здесь в том, что вы никогда не должны забывать добавить фильтрацию, которая немного сложнее, чем с входной фильтрацией, и она использует немного больше ЦП при предоставлении данных.
Это не означает, что вам не нужно делать проверки, вы все равно делаете это, просто вы не сохраняете отфильтрованные данные, вы проверяете их и предоставляете пользователю сообщение об ошибке, если данные каким-то образом недействительный.
Таким образом, вместо «фильтрации ваших входов», возможно, следует «проверить ваши входы, отфильтровать ваши выводы».
так что мне идти с «Проверка и фильтрация входных данных» или «Проверка и фильтрация входных данных»?