Очистка пользовательских данных: Как и где это сделать

11 сентября 2008

Данные могут быть опасны. Независимо от принадлежности пользователя, как данные, особенно в веб-приложения, не может считаться безопасной. Напротив, Есть много злоумышленников, которые пытаются использовать каждую уязвимости в системе безопасности вашего приложения. XSS , CSRF , SQL-инъекции нападения знаком большинству из вас. (Если нет, то понять это и вернуться быстро.) В целях защиты приложения от таких атак, необходимо дезинфицировать данных пользователя, чтобы он не делает ничего вредного для вашей системы.

Exploits-of-a-mom

Большой вопрос активно обсуждается в сообществе веб-разработки является:

Где санировать пользовательских данных? Это должно быть сделано в исходном этапе, когда данные не вошли со стороны пользователя или в выходном каскаде, где данные будут отображаться для пользователя?

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

Таким образом, процесс по существу сводится к проверке на входе и вырваться на выходе. Вот причины, почему вы должны идти по этому методу, а не бежать и санитарии на входе в одиночку:

  1. Как данные необходимо продезинфицировать зависит от контекста, предназначены эти данные будут использоваться. Например, если данные будут храниться в базе данных, мы должны уйти "характера для предотвращения атак SQL Injection. Если данные будут представлены в выходной HTML, мы должны бежать <и> символов для предотвращения XSS атак. В этапе подготовки мы не можем предвидеть, каким образом эти данные будут использоваться. Так что лучше для дезинфекции данных непосредственно перед выходом стадии, когда понятно, где данные идет.
  2. Вы не можете всегда быть уверены, что данные в базе данных, облагороженная данных. Вы не можете гарантировать, что она пришла из источников, мы ожидали, данные берутся. Существует вероятность того, что данные попали в базу данных через путь, где вы еще не разместили свой вход дезинфицирующее средство. Что делать, если пользователь непосредственно редактировать базу данных добавить данные? Что делать, если Есть лазейки в дезинфицирующее средство? Что делать, если данных был помещен нападения SQL инъекции против базы данных? Все эти моменты говорят нам, что нам нужно дезинфицировать пользовательских данных, где оно используется - то есть в выходном каскаде.
  3. Там могут быть и другие приложения, использующие данные из базы данных. Так, например приложения, написанные на COBOL могут использовать данные из базы данных для генерирования отчетов с ним. Если данные уже в базу данных в виде> сценарий <привет мир, приложение COBOL не сможете разобраться в данных. Он должен будет реализовать свой собственный декодер для чтения данных. Это очень болезненный процесс. Мы можем избежать подобной ситуации, если мы не толкать обработанные данные в базу данных.
  4. Это всегда лучше иметь чистый неизменными данные в базе данных, с тем чтобы его можно легко обрабатываются все приложения, использующие данные. После того как мы санировать данных, прежде чем она хранится в базе данных, теперь уже нет пути назад. Это действительно трудно получить исходные данные, введенные пользователем обратно после выполнения всех этих фильтров и избежать техники. С другой стороны, если мы имеем неизменный данных в базе данных можно легко избежать его позже в отношении каждого приложения, использующего эти данные.
  5. В соответствии с вышеуказанным пунктам, данные санитарной обработки на выходе все равно необходимо по очевидным причинам. Если кодирования пользовательских данных на входе, а также в выходные, то данные будут в зашифрованном виде дважды, и он не будет бесполезной. Существует нет необходимости двойного санитарной обработки в любом случае. Таким образом, всегда рекомендуется кодировать данные в целевом формате только перед передачей данных на целевой системе.
  6. Пользователи сообщили дыр в безопасности при таких приложений, как PhpMyAdmin при отображении значений базы данных без кодирования в формат HTML. Разработчики PhpMyAdmin предвосхитил данные в базы данных пользователей, чтобы быть свободной от любого вредоносного кода, но она не может быть. Так ваше приложение нуждается в выходе санитарной обработки, особенно если вы используете формы данных из внешних источников. Не доверяйте никаким данным, поступающим свой путь.
  7. Предположим, что вы используете ввода санитарную обработку. Если есть ошибка в дезинфицирующее средство, вредоносные данные будут ползать в базу данных и теперь вам придется исправить дезинфицирующее и удалять все вредоносные данные из базы данных. Это может быть очень утомительная работа. Но если вы использовали выходной дезинфицирующее средство, вы просто должны изменить код, чтобы исправить дыру в безопасности.

Так, как это сделать два шага sanization? Вот как это делается:

  1. Данные приходит в
  2. Проверка данных
  3. Если действительно, делать SQL Обработка и хранить в базе данных. ( mysql_real_escape_string () в PHP)
  4. Если недействительными, отказаться от данных. Не пытайтесь изменить данные и вставьте его в базу данных. Это принесет больше вреда, чем пользы. Пользователь будет думать, что данные прошли успешно, а данные в базе данных будет что-то другое. Так что принять или отклонить пользовательских данных. Не пытайтесь изменить его.
  5. Вывод: Если данные собираются страницы HTML, побег HTML. ( htmlentities () в PHP). Если данные собираются UNIX командной строки, побег оболочки. ( escapeshellarg () в PHP). Если данные собираются URL, URL кодирование данных. ( urlencode () в PHP) и т.д.

В шаге проверки, проверьте правильность кодировки данных - URL/UTF-7/Unicode/US-ASCII и т.д. Затем проверить, если данные содержат надлежащего характера-множество. Разрешить только символы, которые действительно необходимы для применения. Положите ограничивать длину входных данных. Помните, что злоумышленник обычно использует длинные строки для изготовления нападения. Убедитесь в том, формат данных, правильно или нет. Телефоны должны содержать только числа, адреса электронной почты должен содержать текст в определенном формате электронной почты т.д.

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

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

Другие проблемы

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

Узнайте больше на сайте:

Один ответ до сих пор

Написать ответ