Web Security: Вы часть проблемы?

Сайт security интересная тема и должна быть высокой на радаре у кого есть веб-присутствия под их контролем.Неэффективные безопасности Web приводит к все вещи, которые заставляют нас ненавидеть Web: спам, вирусы, кража личных данных, чтобы назвать few.

Проблема с веб-безопасности является то, что, как важно, как она есть, это тоже очень сложно.Я совершенно уверен, что некоторые из вас, читающих это уже являются частью сети атаку компьютеров и серверов посылают спам-сообщений без вас, даже зная об этом.Ваши электронные письма и пароли были собраны и перепродаются людям, думаю, вам нужно либо новые часы, мужской продукт повышения или дешевой ипотеки.Дело в том, что вы часть проблемы и don’ знаю, что вы сделали, чтобы вызвать it.

Причина в том, что эксперты по безопасности don’ T хотел слишком много говорить на публике о том, что они делают, и где лежат вопросы, и ни печально, они также могут встретить, как высокомерны в своих взглядах.Это может быть результатом людей, не принимающих безопасности серьезно, а не после самых основных советов, таких как использование паролей, которые умны, не “ password” или “ letmein.”

Другая причина заключается в тех учебников, которые показывают, как “ сделать что-то в пяти minutes” и удобно забывают упомянуть безопасности, связанных с их советам.Если это звучит слишком просто, чтобы быть правдой, это вероятно.Прекрасным примером этого является PHP решения, использующие файл для хранения данных и попросить вас, чтобы сделать его записи в мире.Это легко осуществить, но это означает, что любой спамер может написать на эту file.

Disclaimer: вещи we’ поговорим в этой статье сегодня won’ т сделать вас экспертом по безопасности, так же как покупка швейцарский армейский нож won’ T, чтобы вы слесарь или покупке кнутом won’ т сделать васукротитель львов.Целью здесь является повышения awareness и, возможно, сделать некоторые, что безопасность фетиш немного более понятным для you.

Интересный доклад о веб-Security

Веб-безопасности компании Cenzic выпустил подробный отчет о тенденциях и цифры, связанные с веб-безопасности для первого и второго кварталов 2009 года. PDF доклада является available, а число говорят:

Web Vulnerabilities Q1/Q2 2009.
PDF:. Уязвимости Web Q1/Q2 2009

Среди наиболее серьезных уязвимостей пути обхода, межсайтовый скриптинг, кросс-сайта запрос подделки и SQL инъекций.Незамеченными являются новой угрозой, ClickJacking, и пользовательИнтерфейс проблем, фишинг-атак.Вы можете иметь дело со всем этим в качестве веб-разработчика, если вы касаетесь PHP и HTML, CSS и JavaScript.Даже если вы don’ T использование PHP, вы можете по-прежнему вызывают много проблем.Даже если вы don’ трогай код и просто дизайн, вы могли бы быть очень полезны в этой области.Вы можете помочь сделать веб безопаснее, сделав вопросам безопасности понятна ваша users.

Let’ S пройти через все эти вещи, и объяснить, что они и делают.Первое, что вам нужно знать, хотя, как URI, work.

URI: Главный способ борьбы с веб-Service

Адрес любого документа (т.е. файл в Интернете) является Uniform Resource Identifier (URI).Это то, что вы вводите в строке браузера для доступа к документу и то, что вы вставлять в код, чтобы указать на документ.Например, мой адрес веб-сайта составляет http://icant.co.uk, и документ, вы видите, когда вы открываете его в браузере http://icant.co.uk/index.php (сервер автоматически перенаправляет к этому документу).Логотип находится на URI http://icant.co.uk/iconslogo.png, и мой образ, указывая на вас на совершенно другом сервере и имеет URI http://farm4.static.flickr.com/3172/3041842192_5b51468648.jpg.

Все эти URI, хорошо для Вас доступе.Некоторые URI, однако, содержат информацию, которая не должна быть доступна для внешнего мира.Например, /etc/password папки на сервере содержится пользователя и пароль, информация, которая не должна течь к Internet.

Каждый URI может также содержать параметры.Эти инструкции вы можете отправить скрипт, расположенный в этом URI и которые добавляются к URI, начиная с ?, а через амперсенды.Если вы хотите найти для щенков на Google, например, вы можете использовать URI http://www.google.com/search?q=puppies, и, если вы хотите, чтобы начать поиск после первых 50 результатов, вы можете использовать http://www.google.com/search?q=puppies&start=50.

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

<form name="f" action="/search">
  <input type="hidden" value="en" name="hl"/>
  <input type="hidden" value="hp" name="source"/>
  <input name="q"/>
  <input type="submit" name="btnG"/>
  <input type="submit" name="btnI"/>
  <input type="hidden" name="aq"/>
  <input type="hidden" name="oq"/>
  <input type="hidden" name="aqi"/>
</form>

Таким образом, в сущности, эта форма передает содержание всех этих полей в URI search и добавляет их к этому URI.Это, как вы закончите с этим,

http://www.google.com/search?hl=en&source=hp&q=puppies&aq=f&oq=&aqi=

При отправке формы.Обратите внимание, например, что у меня нет btnG параметр, потому что я использовал Enter ключ представить form.

На странице результатов поиска, вы можете видеть нумерацию страниц ссылки внизу ( 1 2 3 и так далее в соответствии с Gooooooogle логотип), и вы можете видеть, что эти ссылки отправить те же данныеURI и добавить start Параметр:

<a href="/search?hl=en&amp;q=puppies&amp;start=40&amp;sa=N">5</a>

Вы можете отправить параметры в скрипт с помощью URI поля формы, ссылки или любой другой вещью в HTML, который содержит URI: картинки, ссылки элементов, рамок, все, что может занять href или src атрибут.Если злоумышленник может изменить любой из этих или добавить новое изображение на Ваш HTML без вашего ведома, они могли бы указать на свое URI, и отправить своиparameters.

Вы должны быть осторожны с тем, что ваши параметры содержат и где они указывают, что может быть кто-то else’ с сервера (чтобы получить код) или разделы вашего собственного сервера, который вы don’ т хотите, чтобы показать или отправить на другойserver.

Различных типов атак.Что означают эти слова

Let’ S быстро пройти через различные предметы, указанные в графике, объясняя, что они есть и что они mean.

SQL Injection

С SQL injection, злоумышленник получает доступ к базе данных путем отправки SQL команды на сервере через URI или полей формы.Это легко обойти, sanitizing, но Невыполнение этого требования может быть фатальным для вашего сайта, как показано в следующем XKCD comic Просмотров:

comic showing how SQL injection would delete a database
XKCD comic показывающие, как SQL инъекции бы удалить database.

Cross-Site Scripting (XSS)

Cross-Site Scripting, вероятно, самая большая и самая распространенная проблема.С его помощью злоумышленник внедряет JavaScript код в ваш документ, добавив его в конце URI в качестве параметра или в виде field.

Допустим, вы хотите быть прохладным и позволяют посетителям настроить определенные цвета на вашей странице.Вы можете сделать это легко в PHP:

<?php
  // predefine colors to use
  $color = 'white'; 
  $background = 'black'; 
  // if there is a parameter called color, use that one
  if(isset($_GET['color'])){
    $color = $_GET['color'];
  }
  // if there is a parameter called background, use that one
  if(isset($_GET['background'])){
    $background = $_GET['background'];
  }
?>

<style type="text/css" media="screen">
  #intro{
    /* color is set by PHP */
    color:<?php echo $color;?>;
    /* background is set by PHP */
    background:<?php echo $background;?>;
    font-family:helvetica,arial,sans-serif;
    font-size:200%;
    padding:10px;
  }
</style>

<p id="intro">Cool intro block, customizable, too!</p>

Пока everything’ с кошерным, и we’ повторно даже не используя встроенные стили!Если вы сохраните это сейчас как test.php и называем его на ваш сервер в браузере, как URI http://example.com/test.php, вы получите текстовый блок вступление, которое является черным по белому.$_GET[] переменные приходят из URI в качестве параметров, а потому, что они не установлено, ничего не меняется.Если вы хотите, чтобы цвет будет красным на розовый, вы можете сделать это: http://example.com/test.php?color=red&background=pink

.

Но поскольку вы позволяете любые значения для переменных, злоумышленник может отправить следующее:

http://example.com/test.php?color=green&background=</style><script>alert(String.fromCharCode(88,83,83))</script>

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

XSS example.
Большой view

После того как вы успешно вводят JavaScript, вы сможете считывать печенье, открытые формы, которые просят пользователя ввести свои пароли и данные кредитных карт, выполнение вирусов, червей и “ проезжавшего мимо downloads”; много.Причина в том, чтоJavaScript не связаны никакими модель безопасности, любой скрипт на странице имеет те же права, независимо от того, на каком сервере он родом.Это большая проблема безопасности с JavaScript и что-то умные люди работают on.

XSS, это очень распространенная проблема.Сайты, такие как XSSED.org иметь полевой день показать миру, как много веб-сайтов уязвимы:

XSSed.org lists cross-site-scripting vulnaribilities.

Средство для XSS должна быть очень параноидальный обо всем, что приходит через формы или URI.Вы также должны быть уверены, что ваши PHP настроен правильно (we’ вернемся к несколько способов, чтобы проверить, что и написать хороший код позже).

Путь Traversal

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

An unprotected cgi_bin will hurt you.
Большой view

Я был в состоянии получить всю эту информацию просто доступ к CGI-bin папку, которая была защищена от их списке.Таким образом, вместо того, чтобы http://example.com, я пошел к http://example.com/cgi-bin/ В моем браузере.Я знал, что что-то не так на их сайте большой вспышки, когда я нажал на меню.Он выскочил в новом окне и имел URI, как

http://www.example.com/cgi/food_db/db.cgi?db=default&uid=default&Category=Sandwiches&Subcategory=Sandwiches&Product=Chicken%20and%20Bacon&Soup_size=&Drinks_milk_type=&ww=on&view_records=yes

Который дал мне всю информацию, я должен был играть around.

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

Вы могли поиск, скажем, “ индексе / ebooks” найти электронные книги в Интернете или “ индексе / photos” найти фотографии.Чтобы увидеть поиска тестов, таких, как этот, проверить Google Dream Come True (!). Статья, в которой перечислены многие из них в 2003 году

Этот метод поиска работает намного лучше и в прошлом, кстати: не потому, что людям защитить свои серверы лучше, а потому, что спамеры, которые предлагают поддельные пиратской продукциипонимаю, что люди эти поиски и поддельные его сейчас оптимизировать свои websites’ поисковая система rankings.

Cross-Site запрос Forgery

межсайтовых запросов forgery (CSRF) использует браузеры и веб-сайты, которые позволяют функциональности можно назвать не зная, что фактический пользователь инициировал его.Скажем, у вас форму на Ваш сайт http://example.com, которая работает с GET и отправляет вещи в базе данных:

<form method="get" action="add_to_db.php">
  <div>
    <label for="name">Name</label>
    <input type="text" id="name" name="name">
  </div>
  <div>
    <label for="email">email</label>
    <input type="text" id="email" name="email">
  </div>
  <div>
    <label for="comment">Comment</label>
    <textarea id="comment" name="comment"></textarea>
  </div>
  <div><input type="submit" value="tell me more"></div>
</form>

Формы могут быть отправлены двумя методами: GET добавляет все параметры в URI заметно в адресной строке, в то время POST отправляет их “ под hood.” POST также позволяет передавать гораздо больше данных.Это упрощение, но все, что вам нужно знать для now.

Если скрипт, который добавляет в базу данных doesn’ T убедитесь, что форма была действительно отправлено с вашего сервера, я мог бы добавить изображение на любой сайт, делая это:

<img src="http://example.com/add_to_db.php?
name=cheap%20rolex&email=susan@hotchicks.com&comment=mortgage%20help" width="1" height="1">

Любой подходит к моему сайту теперь будет положить еще один комментарий в базу данных.Я мог бы использовать изображения или CSS ссылку или скрипт или что-нибудь, что позволяет URI должны быть определены и загружается браузер, когда HTML делает.В CSS, это может быть фон image.

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

Действительно интересный случай CSRF (хотя и невинным) произошло в 2006 году, когда Google выпустил настоящее время прекращено веб-ускоритель инструмент (GWA) .Идея заключалась в том, чтобы заранее получить сайтов, которые были связаны с текущим документом, таким образом делая серфинг быстрее.Все хорошо и good… пока вы не закончили с удалять ссылки на сайты, которые работали так:

<a href="/app/delete_entry.php?id=12">delete</a>

Потому что некоторые приложения не проверить, если это был инициирован удаление или попытка GWA предварительной загрузки страницы, инструмент удалены все блоги и продуктов баз данных.Google не сделал ничего плохого, но общество узнали много нового о CSRF, что day.

Теперь вы можете предположить, что перемещение форм из GET к POST бы сделать их безопасными, верно?Частично, да, но злоумышленник может по-прежнему использовать формы и обмануть людей на нажатие кнопки, чтобы сделать запрос:

<form method="post" action="add_to_db.php">
  <div>
    <input type="hidden" name="name" value="bob">
    <input type="hidden" name="email" value="bob@experts.com">
    <input type="hidden" name="comment" 
           value="awesome article, buy cialis now!">
  <input type="submit" value="see beautiful kittens now!">
  </div>
</form>

Вы даже можете использовать JavaScript для автоматической отправки формы или скрипта на другой сервер, чтобы сделать POST запрос от фоновых.Есть много способов использовать CSRF, и защита от это не так hard.

Дистанционное включение файлов (RFI)

С Удаленный файл inclusion или Код injection, злоумышленник использует брешь в вашем сайте, чтобы внедрить код с другого сервера для запуска на ваш.Это в той же семье, как XSS, но гораздо более проблематичным, потому что у вас есть полный доступ к вашемусервер (с JavaScript, вы можете украсть печенье и вызова другого кода, но вы can’ т доступ к файловой системе, не прибегая к хитрости со вспышкой или Java-апплеты).

Любой код вводится на сервере с непроверенными переменных и include() команды, например, может запустить сервер команды: загружать и скачивать и передавать данные на другие серверы, проверьте свой сервер пароли и имена пользователей, все, что вы можете сделать накомандной строки с помощью PHP или ASP, если ваш сервер позволяет it.

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

Обойти ее можно отключить globals и никогда не ever собрать URI из параметров или данные формы.(. Подробнее об этом позже в PHP раздел советов)

Phishing

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

Трюк с фишингом, чтобы сделать вид действительно похожи оно исходит от сайта вы доверяете.Вы, наверное, получили сообщения электронной почты говорят, что ваша “ XYZ банка account” была скомпрометирована, и вы знаете наверняка, что это isn’ T так, потому что у Вас нет счета в этом банке и не может даже слышали о нем.Это дикий думаю, фишинг попытки, которые обычно не effective.

В Интернете, однако, злоумышленник может выполнить трюк JavaScript, чтобы выяснить, где you’ посетили.Как Иеремия Гроссман показал несколько лет ago, вы можете использовать JavaScript для определения состояния ссылку на страницу.Поскольку цвета посещенных и непосещенных ссылки разные, мы можем использовать эту технику, чтобы выяснить, какие сайты пользователь был, и затем отображать соответствующий логотип над формой. Этот пример показывает, что это вполне effectively.Забавно, вы также можете использовать этот трюк для хорошего, например, от показать людям только кнопки социальных сайтах средств массовой информации, они use

.

Clickjacking

Clickjacking это ужасно умный способ использования CSS и встроенные кадры, чтобы заставить пользователей нажав что-то, не зная об этом.Вероятно, наиболее известным примером этого был “ Don’ T Нажмите me” подвиг Twitter несколько месяцев назад.Вдруг, Twitter был полон сообщений, указывающих на веб-сайте с помощью кнопки, которые читают“ Don’ T Нажмите me”.Вот примеры для Джейсона Kottke’ S потока:

The don't click Twitterbomb in action.
Twitter “Не Нажмите кнопку” шалость, explained

Человеческая природа, что это такое, многие люди нажал на кнопку, которая, казалось бы ничего не сделал.Что он на самом деле сделал, хотя, было положить Twitter главную страницу на верхнюю часть кнопки в виде рамки с прозрачностью 0 в CSS.Поле обновление было предварительно установлено с твит указывая на этой странице.На следующем скриншоте делает это очевидно, с непрозрачностью Здесь устанавливается до 0,5:

How the clickjacking twitter bomb worked.

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

ClickJacking массивная проблема, потому что это делается с помощью CSS, а не скрипт.Если браузеры блокируют кадры из наличия прозрачностью 0, не существует простой обходной путь.Основные контрмеры людей принять это, чтобы запретить вложения в кадры, используя JavaScript.Однако, с JavaScript выключен, ClickJacking еще works.

Основные способы увеличения веб-Security

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

Код Держите до Date

Существует нет лучшей защиты, чем сохранение вашего кода в актуальном состоянии.Устаревшие версии WordPress, старые установки из PHP и MySQL, даже старые браузеры, все они являются вопросы безопасности, потому что большинство обновления программного обеспечения в эти дни патчей безопасности.Это мышиная возня между теми, кто хочет Web работать и тех, кто хочет злоупотреблять этим, чтобы сделать быстрый доллар или украсть вашу личность.Поэтому, пожалуйста, помочь хорошим парням за счет модернизации всякий раз, когда новая версия out.

Don’ T оставаться в системе, и Don’ T побудить других к Either

Остаться вошли в то время не используется система опасна.Другие веб-сайты вы работаете, чтобы можно убедиться, что вы вошли в систему, а затем clickjack вас заставлять вас делать то, что вы don’ т означает или aren’ T знать.Это особенно опасно с социальными медиа, потому что все, что вам делать будет отправлено на все ваши друзья и, возможно, реплицируются им.Это снежный ком effect.

В моем идеальном мире, не имеет формы “ Запом …

Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров

Comments are closed.