Вопрос

Выходная или входная фильтрация?

Я постоянно вижу людей, пишущих «фильтр вы вводах», «Sanitize ваши входы», не доверяйте пользователям пользовательских данных, но я только согласен с последним, где я считаю, что доверие к любым внешним данным, даже если она является внутренним относительно система.

Входная фильтрация:Самое распространенное, что я вижу. Возьмите данные Post Post или любой другой внешний источник информации и определите некоторые границы при сохранении его, например, убедитесь, что текст - это текст, цифры - это цифры, что SQL является действительным SQL, что HTML является действительным HTML и что он не содержит вредных Разметка, а затем вы сохраняете «безопасные» данные в базе данных.

Но при получении данных вы просто используете необработанные данные из базы данных.

По моему личному мнению, данные никогда не в безопасности никогда. Хотя это звучит легко, просто фильтруйте все, что вы получаете от форм и URL, на самом деле это намного сложнее, чем это может быть безопасным для одного языка, но не другого.

Выходная фильтрация:Используя это таким образом, я сохраняю необработанные неизменные данные, что бы она ни было, с подготовленными утверждениями в базу данных, а затем отфильтровать проблемный код при доступе к данным, это имеет свои преимущества:Это добавляет слой между HTML и скриптом бокового сервера.которые я считаю, чтобы быть разделением доступа к данным в родах.

Теперь данные отфильтрованы в зависимости от контекста, например, у меня могут иметь данные из базы данных, представленной в HTML-документе, как просто-сбеженный текст, или как HTML или как угодно.

Недостатки вот в том, что вы никогда не забудете добавить фильтрацию, что немного сложнее, чем с входной фильтрацией, и он использует немного более CPU при предоставлении данных.

Это не значит, что вам не нужно делать проверки проверки, вы все еще делаете, просто вы не сохраняете отфильтрованные данные, вы его проверяете и предоставляете пользователя сообщение об ошибке, если данные каким-то образом неверны.

Таким образом, вместо того, чтобы идти с «фильтровать ваши входы», может быть, он должен быть «подтвердить ваши входы, отфильтровать ваши выходы».

Итак, я должен идти с «входной проверкой и фильтрацией» или «Vavelation Validation и выходной фильтрацией»?

Это было полезно?

Решение

Нет общего «фильтрации» для ввода и вывода.

Проверьте свой вход, убейте свой выход. Как вы это делаете, зависит от контекста.

Валидация заключается в том, что входной вход падает в разумных диапазонах, таких как длина строк, числовая численность количества доллара или что обновляется запись, принадлежащая пользователю, выполняющее обновление. Реконала о поддержании логической консистенции ваших данных и предотвращения того, чтобы люди подобные тому, как обнуривание цены продукта, которую они покупают или удаляются записи, к которым они не должны иметь доступ. Это не имеет ничего общего с «фильтрацией» или избежать определенных символов на вашем входе.

Сбежав - это вопрос контекста, и действительно имеет смысл, когда вы делаете что-то с данными, которые могут быть отравлены, впрыскивая определенные символы. Побегайте символы HTML в данных, которые вы отправляете в браузер. Побег символов SQL в данных, которые вы отправляете в базу данных. Выбежать цитаты, когда вы пишете данные внутри JavaScript <script> Теги. Просто осознайте, как данные вы имеете дело с интерпретацией системы, вы передаваете ее и сбежав соответствующим образом.

Другие советы

Лучшее решение - фильтр обоих. Только кто-то делает более вероятно, что вы пропустите случай, и можете оставить вас открытыми для других типов атак.

Если вы делаете только входную фильтрацию, атакующий может найти способ обойти ваши входы и вызывать уязвимость. Это может быть кто-то с доступом к вашей базе данных ввода данных вручную, это может быть злоумышленник, загружающий файл через FTP или какой-либо другой канал, который не проверяется, или многие другие методы.

Если вы выполняете только выходную фильтрацию, вы можете оставить себя открытым для SQL Injection и других боковых атак на сервере.

Лучший метод - фильтровать как ваши входы, так и выходы. Это может вызвать больше нагрузки, но значительно снижает риск нападающего на поиск уязвимости.

Звучит как семантика для меня. В любом случае важно помнить, чтобы убедиться, что плохие данные не попадают в систему.

Выполнение выходной фильтрации вместо входной фильтрации просит инъекцию SQL.

alt text

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top