Обеспечение безопасности транзакций в Интернет сводится к проверке потока информации в системе и обеспечению того, что в каждой точке она является защищенной. В контексте сетевой безопасности не существует ни какого абсолюта. Ни одна система не может считаться полностью недоступной для проникновения. Под безопасностью здесь понимается то, что уровень усилий, необходимых для взлома системы или пересылаемой информации, сравним со значимостью этой информации.
Чтобы усилия по защите были эффективными, необходимо проверять прохождение потока информации во всех частях системы. Поток пользовательской информации в типичном приложении с использованием PHP и MySQL показан на рисунке.
Особенности каждой транзакции, происходящей в системе, могут быть различными в зависимости от внутренней структуры системы от пользовательских данных, а также действий, послуживших источником транзакции. Их можно исследовать следующим образом. Каждая транзакция между веб-приложением и пользователем начинается с того, что браузер пользователя отправляет черезИнтернет запросы к веб-серверу. Если страница содержит PHP-сценарий, то веб-сервер передает полномочия обработки страницы механизму PHP.
PHP-сценарий может считывать или записывать данные на диск. Он также может включать PHP или HTML-файлы с использованием функций include() или require() и отправлять SQL-запросы демону MySQL, получая от него ответы. Механизм MySQL отвечает за считывание и запись собственных данных на диск.
Такая система состоит из трех основных частей:
На компьютере пользователя действует веб-браузер. Вы не можете управлять такими факторами, как настройка безопасности этого компьютера. Более того, необходимо помнить, что компьютер может быть абсолютно не защищенным или даже служить в качестве общедоступного терминала в библиотеке, школе или интернет-кафе.
Существует несколько различных браузеров, предоставляющих разные возможности. Если принять во внимание только последние версии двух популярных браузеров, то большинство различий в них влияет лишь на то, как формируется и выводится HTML-код, однако нам требуется исследовать вопросы безопасности и функционирования.
Следует обратить внимание, что ряд пользователей могут отключить свойства, которые по их мнению, могут представлять опасность для системы или угрозу конфиденциальности, например, Java, cookie-наборы или поддержка JavaScript. Если вы используете эти свойства, то либо убедитесь, сто ваше приложение работает в условиях их отключения, либо обеспечте упрощенный интерфейс, который позволяет упомянутым пользователям успешно взаимодействовать с вашим сайтом.
Если только вы не гарантируете безопасность своим пользователям в тексте своего сайта, вам, как веб-разработчику, нет надобности беспокоиться об этих вопросах. SSL автоматически позволяет серверу и браузеру пользователя взаимодействовать на максимально возможном уровне безопасности.
К сожалению, нельзя быть уверенным в том, что именно веб-браузер соединяется с сайтом, используя предназначенный для этого интерфейс. Запросы сайта могут приходить с другого сайта, "заимствующего" изображения или данные, или же от кого-либо, использующего программное обеспечение наподобие библиотеки cURL с целью обхода защиты.
Библиотека cURL полезна для разработчиков, однако она может быть использована и в злонамеренных целях.
Хотя нет возможности изменить или управлять настройкой пользовательских машин, беспокоиться об этом не следует. Изменчивость машин пользователей играет роль только в том, какая функциональность может обеспечиваться в сценариях серверной (РНР), а какая — клиентской (JavaScript) стороны.
Функциональность, обеспечиваемая РНР, может быть совместимой с любым браузером, поскольку ее результатом является лишь HTML-страница. Использование чего-либо более сложного, нежели самый примитивный вариант JavaScript, приводит к необходимости учета свойств индивидуальных версий браузеров.
С точки зрения защиты, для проверки данных стоит использовать серверные сценарии, так как в таком случае исходный код не будет виден пользователю. При проверке данных средствами JavaScript пользователи могут видеть исходный код и, возможно, перехитрить его.
Все требуемые данные можно сохранять на сервере (файлы и записи базы данных) или на пользовательской машине (cookie-наборы).
Большая часть данных находится на веб-сервере или в базе данных. Существует немало причин, по которым следует хранить на пользовательской машине настолько мало информации, насколько это возможно. Информация, сохраненная за пределами системы, не придает уверенности в том, что она надежно сохранена, что пользователь не удалит ее, или же что он не изменит ее в целях взлома системы.
Как и в случае пользовательской машины, характеристики Интернет также не поддаются контролю, однако при разработке системы игнорировать их нельзя.
Интернет обладает множеством замечательных свойств, однако по определению не является безопасной сетью. При пересылке информации из одной точки в другую следует помнить, что ее могут просматривать и даже изменять другие пользователи. Памятуя об этом, можно решить, что следует предпринять:
Интернет — это еще и исключительно анонимная среда. Очень трудно удостовериться, что лицо является именно тем, за кого себя выдает. Даже если в этом можно убедиться для собственного удовлетворения, это будет непросто доказать, преодолевая достаточно высокий уровень сомнения в таких организациях, как, например, суд. А это вызывает проблемы с отказом от обязательств.
Короче говоря, приватность и отказ от обязательств — это большие проблемы при проведении транзакций через Интернет.
Есть, как минимум, два способа для защиты информации, поступающей на или с веб-сервера через Интернет:
Обе технологии обеспечивают приватный, защищенный от взлома обмен сообщениями и аутентификацию, однако если SSL широко распространен, то S-HTTP применяется еще нечасто.
Той частью Вселенной, которой вы можете полностью управлять, является ваша система. Ее компоненты обведены на рисунке сплошной линией. Эти компоненты могут быть физически разделены и соединены сетью, либо же существовать на одной машине.
Можно практически не беспокоиться о безопасности информации, пересылкой которой через веб занимаются продукты независимых разработчиков. Авторы этих программ уделили им достаточное внимание. Если используется последняя версия широко распространенного продукта, то все известные на текущий момент проблемы можно узнать, воспользовавшись любым поисковым сайтом, таким как Google. Очень важно постоянно следить за обновлением такого рода информации.
Если инсталляция и конфигурирование входят в ваши обязанности, следует побеспокоиться о том, как проинсталлировано и сконфигурировано программное обеспечение. Немало ошибок в защите системы являются результатом неследования предупреждениям в документации или же общими вопросами системного администрирования, которые представляют собой тему отдельной книги. Поэтому вам стоит или приобрести хорошую книгу по администрированию операционной системы, или нанять эксперта по этому вопросу.
Следует отметить, что в общем случае более безопасным (и эффективным) является установка РНР как модуля SAPI Web-сервера, а не запускать его через CGI-интерфейс.
Первое, о чем следует позаботиться — что должны, а чего не должны делать ваши сценарии.
Какие потенциально чувствительные к перехвату данные ваше приложение будет пересылать пользователю через Интернет? Какие данные оно будет запрашивать у пользователя? Если пересылается информация, представляющая собой приватную транзакцию между вами и пользователем, необходимо прибегнуть к SSL.
Здесь уже обсуждался вопрос применения SSL между пользовательским компьютером и сервером. Следует также рассмотреть ситуацию, когда данные пересылаются по сети от одного компонента системы другому. Так происходит, например, тогда, когда база данных MySQL находится не на одной и той же машине с веб-сервером. РНР соединяется с сервером MySQL по TCP/IP, а такое соединение не шифруется. Если обе машины находятся в локальной сети, следует убедиться, что сеть надежно защищена. Если они взаимодействуют через Интернет, то система, возможно, работает несколько медленнее, а к соединению необходимо относиться так же, как и к любому другому соединению через Интернет.
РНР не содержит естественного способа произвести такое соединение по SSL. Команда fopen() поддерживает HTTP, но не HTTPS. Поддержка SSL содержится в библиотеке cURL.
Очень важно, чтобы когда пользователи думают, что они имеют дело с вами, они действительно имели дело с вами. Регистрация с помощью цифрового сертификата поможет защитить посетителей от обманных действий (когда кто-то другой пытается выдать свой сайт за ваш), позволит использовать SSL, не выдавая пользователям предупреждающего сообщения, и обеспечит электронному предприятию определенную долю уважения.
Проверяют ли сценарии данные, вводимые пользователями? Действительно ли защищена сохраняемая информация? Ответы на эти и другие вопросы сформулированы в следующих разделах.