ProfiPHPProfiPHP
Категория: PHP для чайников

Основы создания Web-приложений

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

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

Обеспечение безопасности Web-ресурса

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

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

Опишем основные замечания, которые позволят существенно повысить уровень защищенности Web-приложения.

Обеспечение безопасности сервера

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

Ограничение доступа к информации

Первое и обязательное правило при соблюдении безопасности приложения является ограничении доступа к закрытой информации. Например, пользователю нет необходимости видеть имена хранящихся в директориях файлов. Список файлов отображается в том случае, когда в URL-адресе не указано имя целевого файла, а в каталоге отсутствует файл, который отображается по умолчанию. Обычно Web-сервер настроен таким образом, чтобы в подобных ситуациях выводить определенный файл (обычно index. html), если явно не указано другое имя. В противном случае пользователь сможет увидеть список файлов, а это весьма опасно. Лучше всего настроить Web-сервер таким образом, чтобы при попытке доступа к каталогам выводилось сообщение о невозможности получения доступа к каталогу.
Forbidden
You don't have permission to access /file/ on this server.
(Доступ запрещен. У вас нет прав доступа к каталогу /file/ на этом сервере.)
При настройке Web-сервера Apache это можно сделать с помощью директивы Indexes конфигурационного файла httpd.conf:
Options +Indexes // позволяет отображать файлы каталога
Options -Indexes // запрещает отображать файлы каталога
Проверка входящей информации от пользователей

Злоумышленник может ввести в форме опасную информацию. Поэтому перед ее сохранением или использованием необходимо проверить на корректность и отсутствие опасных символов или строк. Введенная информация (даже случайная) может нанести существенный вред сценарию или базе данных.

Использование безопасного Web-сервера

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

Уровень защищенности данных можно повысить и при использовании безопасного Web-сервера. На безопасных Web-серверах для защиты данных часто используется протокол SSL (Secure Sockets Layer). При взаимодействии с использованием протокола SSL URL-адрес начинается с префикса https, а не http. При его использовании информация кодируется и лишь после этого передается через Web. Клиентское программное обеспечение выполняет обратное декодирование. Вне всякого сомнения, развертывание безопасного Web-сервера требует дополнительных усилий, но для некоторых приложений без этого просто не обойтись.

Работа с HTML формами

Благодаря HTML-формам можно добиться эффекта интерактивности, получая информацию от пользователей. Получаемые от пользователей данные могут быть простыми, такими как регистрационное имя и пароль. Однако форма может быть достаточно длинной и сложной и состоять из большого количества полей.

Вывод формы осуществляется так:
<form action="script.php" method="POST"> 
<input type="text" name="username" />
<input type="submit" value="Отправить" />
</form>
Данная форма содержит одно пустое текстовое поле и кнопку с именем Отправить. Пользователь может ввести в это поле свое имя, а затем щелкнуть на кнопке. В результате введенная информация будет передана сценарию, имя которого задано в атрибуте action дескриптора <form>. В приведенном примере обработку будет осуществлять файл script.php.

Также возможно в формах использовать значения по умолчанию, что существенно повышает их эффективность. Такой подход позволяет заполнять текстовые поля нужной информацией и динамически создавать раскрывающиеся списки, переключатели и флажки. Для этого необходимо использовать value="значение":
<input type="text" name="name" value="Василий" />
Аналогично можно создавать списки:
<select name='list'> 
<option>First</option>
<option>Second</option>
</select>
Получение информации

Имя файла, указанное в атрибуте action дескриптора <form>, будет обрабатывать данные формы. После щелчка на кнопке передачи данных введенная информация передается сценарию, указанному в атрибуте action.

Переданные сценарию данные можно извлечь из встроенных массивов РНР. Если при передаче использовался метод POST, то данные будут размещены в массиве $_POST, а если метод GET — в массиве $_GET. В качестве ключей этих массивов используются имена полей формы, а значениями являются пользовательские данные.

Для выше описанного примера, где имя поля является username, для получения введенного значения можно воспользоваться выражением $_POST['username']. Точно так же можно получить данные, которые были введены в форме с использованием раскрывающегося списка или переключателя. Если в форме содержатся флажки, пользователь может одновременно выбрать несколько значений. Поэтому соответствующий элемент массива $_POST тоже будет массивом.

При использовании метода GET данные формы передаются путем их добавления к URL-адресу вызываемого сценария, предназначенного для обработки информации, например script.php?username=Vasya.

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

При использовании метода POST данные формы передаются в области данных передаваемых пакетов. Основные преимущества этого метода заключаются в возможности передачи неограниченного количества данных и их большей защищенности. К недостаткам следует отнести небольшую скорость и необходимые затраты дополнительных усилий разработчиков.

В языке РНР одинаково просто применять оба метода. Поэтому с учетом преимуществ метода POST (неограниченное количество данных и большая безопасность) в языке РНР лучше использовать именно его.

Проверка данных

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

Обычно проверка данных, введенных в форме, связана с проверкой на наличие незаполненных полей и на соответствие введенных данных заданному формату.

Использование для проверки регулярных выражений

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

Например, проверка правильности заполнения поля Email:
if ( ! preg_match( "/^[a-z0-9_\-\.]+@[a-z0-9_^\.]+\.[a-z]{1,6}$/ui", $email ) ) {
...
}

Добавить комментарий

Имя:
Текст комментария: