Очистка пользовательских данных: Как и где это сделать
Данные могут быть опасны. Независимо от принадлежности пользователя, как данные, особенно в веб-приложения, не может считаться безопасной. Напротив, Есть много злоумышленников, которые пытаются использовать каждую уязвимости в системе безопасности вашего приложения. XSS , CSRF , SQL-инъекции нападения знаком большинству из вас. (Если нет, то понять это и вернуться быстро.) В целях защиты приложения от таких атак, необходимо дезинфицировать данных пользователя, чтобы он не делает ничего вредного для вашей системы.
Большой вопрос активно обсуждается в сообществе веб-разработки является:
Где санировать пользовательских данных? Это должно быть сделано в исходном этапе, когда данные не вошли со стороны пользователя или в выходном каскаде, где данные будут отображаться для пользователя?
Решение, на мой взгляд, (и, по мнению большой группы экспертов в этой области) это сделать двойной санитарную обработку. Один проверки и SQL избежать, прежде чем в базу данных и один санитарной (фильтрация и уйти), прежде чем будет продукции.
Таким образом, процесс по существу сводится к проверке на входе и вырваться на выходе. Вот причины, почему вы должны идти по этому методу, а не бежать и санитарии на входе в одиночку:
- Как данные необходимо продезинфицировать зависит от контекста, предназначены эти данные будут использоваться. Например, если данные будут храниться в базе данных, мы должны уйти "характера для предотвращения атак SQL Injection. Если данные будут представлены в выходной HTML, мы должны бежать <и> символов для предотвращения XSS атак. В этапе подготовки мы не можем предвидеть, каким образом эти данные будут использоваться. Так что лучше для дезинфекции данных непосредственно перед выходом стадии, когда понятно, где данные идет.
- Вы не можете всегда быть уверены, что данные в базе данных, облагороженная данных. Вы не можете гарантировать, что она пришла из источников, мы ожидали, данные берутся. Существует вероятность того, что данные попали в базу данных через путь, где вы еще не разместили свой вход дезинфицирующее средство. Что делать, если пользователь непосредственно редактировать базу данных добавить данные? Что делать, если Есть лазейки в дезинфицирующее средство? Что делать, если данных был помещен нападения SQL инъекции против базы данных? Все эти моменты говорят нам, что нам нужно дезинфицировать пользовательских данных, где оно используется - то есть в выходном каскаде.
- Там могут быть и другие приложения, использующие данные из базы данных. Так, например приложения, написанные на COBOL могут использовать данные из базы данных для генерирования отчетов с ним. Если данные уже в базу данных в виде> сценарий <привет мир, приложение COBOL не сможете разобраться в данных. Он должен будет реализовать свой собственный декодер для чтения данных. Это очень болезненный процесс. Мы можем избежать подобной ситуации, если мы не толкать обработанные данные в базу данных.
- Это всегда лучше иметь чистый неизменными данные в базе данных, с тем чтобы его можно легко обрабатываются все приложения, использующие данные. После того как мы санировать данных, прежде чем она хранится в базе данных, теперь уже нет пути назад. Это действительно трудно получить исходные данные, введенные пользователем обратно после выполнения всех этих фильтров и избежать техники. С другой стороны, если мы имеем неизменный данных в базе данных можно легко избежать его позже в отношении каждого приложения, использующего эти данные.
- В соответствии с вышеуказанным пунктам, данные санитарной обработки на выходе все равно необходимо по очевидным причинам. Если кодирования пользовательских данных на входе, а также в выходные, то данные будут в зашифрованном виде дважды, и он не будет бесполезной. Существует нет необходимости двойного санитарной обработки в любом случае. Таким образом, всегда рекомендуется кодировать данные в целевом формате только перед передачей данных на целевой системе.
- Пользователи сообщили дыр в безопасности при таких приложений, как PhpMyAdmin при отображении значений базы данных без кодирования в формат HTML. Разработчики PhpMyAdmin предвосхитил данные в базы данных пользователей, чтобы быть свободной от любого вредоносного кода, но она не может быть. Так ваше приложение нуждается в выходе санитарной обработки, особенно если вы используете формы данных из внешних источников. Не доверяйте никаким данным, поступающим свой путь.
- Предположим, что вы используете ввода санитарную обработку. Если есть ошибка в дезинфицирующее средство, вредоносные данные будут ползать в базу данных и теперь вам придется исправить дезинфицирующее и удалять все вредоносные данные из базы данных. Это может быть очень утомительная работа. Но если вы использовали выходной дезинфицирующее средство, вы просто должны изменить код, чтобы исправить дыру в безопасности.
Так, как это сделать два шага sanization? Вот как это делается:
- Данные приходит в
- Проверка данных
- Если действительно, делать SQL Обработка и хранить в базе данных. ( mysql_real_escape_string () в PHP)
- Если недействительными, отказаться от данных. Не пытайтесь изменить данные и вставьте его в базу данных. Это принесет больше вреда, чем пользы. Пользователь будет думать, что данные прошли успешно, а данные в базе данных будет что-то другое. Так что принять или отклонить пользовательских данных. Не пытайтесь изменить его.
- Вывод: Если данные собираются страницы HTML, побег HTML. ( htmlentities () в PHP). Если данные собираются UNIX командной строки, побег оболочки. ( escapeshellarg () в PHP). Если данные собираются URL, URL кодирование данных. ( urlencode () в PHP) и т.д.
В шаге проверки, проверьте правильность кодировки данных - URL/UTF-7/Unicode/US-ASCII и т.д. Затем проверить, если данные содержат надлежащего характера-множество. Разрешить только символы, которые действительно необходимы для применения. Положите ограничивать длину входных данных. Помните, что злоумышленник обычно использует длинные строки для изготовления нападения. Убедитесь в том, формат данных, правильно или нет. Телефоны должны содержать только числа, адреса электронной почты должен содержать текст в определенном формате электронной почты т.д.
Всегда используйте методы или рамок, предоставляемых язык / платформой для побега и кодирования / декодирования. Большинство Языки там поддержку этих операций. Java является исключением, хотя: при использовании Java, вы должны написать свой собственный метод обрабатывать HTML кодирования / декодирования.
Наконец, при передаче данных в веб-браузере, не забудьте установить правильную кодировку для веб-страницы. Это можно сделать с помощью атрибута заголовка ответа или с помощью мета-тегов. Желательно, чтобы использовать оба метода. Забыв этот шаг может способствовать некоторые виды атак XSS.
Другие проблемы
Некоторые веб-сайты нужно вывести ввод пользователя как HTML себе - например, сайты, которые позволяют HTML редактирования. В этом случае вы не можете сделать кодировку в вашем приложении. Не забудьте добавить надлежащую механизмов фильтрации позволяют только метки, предназначенные для использования. Всегда блокировать потенциально опасные теги, такие как <script> </> сценарий
Узнайте больше на сайте:



[...] Finalmente, Quiero Compartir Эсте pequeño artículo. [...]