Реализация безопасной передачи данных на сервер средствами языка php

Значение информационной безопасности невозможно переоценить. Особенно сейчас: в век информационных технологий. Интернет-магазины и информационные порталы школ сегодня – это уже реальность. Среди всего множества Интернет-атак особое внимание уделяется XSS- атакам. XSS атака – это атака на уязвимость, которая существует на сервере, позволяющая внедрить в генерируемую сервером HTML-страницу некий произвольный код, в котором может быть вообще все что угодно и передавать этот код в качестве значения переменной, фильтрация по которой не работает. PHP – довольно мощное средство для разработки сайтов, а также обеспечения безопасности электронных ресурсов сети Интернет. В данной статье, программная реализация некоторых функций защиты электронных ресурсов представлена именно на языке PHP.

Значение информационной безопасности невозможно переоценить. Особенно сейчас: в век информационных технологий. Интернет-магазины и информационные порталы школ сегодня – это уже реальность. Все больше людей пытаются создавать свои информационные ресурсы в сети Интернет. И все чаще и чаще встает вопрос: «А как защитить свой сайт от посягательств злоумышленника?»

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

Среди всего множества Интернет-атак особое внимание уделяется XSS- атакам. Аббревиатура XSS расшифровывается как Cross Site Scripting, или «межсайтовый скриптинг». При этом первую букву С заменили на Х вследствие того, что аббревиатура CSS уже занята, обозначает «Каскадные таблицы стилей» и применяется в веб-программировании.

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

А далее начинается самое интересное для хакера. РНР-скрипт в ответ на данный запрос генерирует HTML-страницу, в которой отображаются значения требующихся хакеру переменных, и отправляет данную страницу на браузер хакера. То есть, говоря проще, XSS атака - это атака с помощью уязвимостей на сервере на компьютеры клиентов [1].

Примером XSS-атаки может служить ввод в адресной строке браузера после адреса сайта известный вам параметр со значением, которое он в принципе принять не может (в соответствии с рисунком 1).

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

129

Рисунок 1 - Пример типичной XSS атаки

Теперь опишем другие возможности XSS атак (конечно при условии их успешного проведения).

  1. Возможно при открытии страницы вызвать открытие большого количества ненужных пользователю окон.
  2. Возможна вообще переадресация на другой сайт (например, на сайт конкурента).
  3. Существует возможность загрузки на компьютер пользователя скрипта с произвольным кодом (даже вредоносного) путем внедрения ссылки на исполняемый скрипт со стороннего сервера.
  4. Зачастую происходит кража личной информации с компьютера пользователя, помимо Cookies в качестве объекта кражи выступает информация о посещенных сайтах, о версии браузера и операционной системе, установленной на компьютере пользователя, да к тому же еще и плюсуется IP-адрес компьютера пользователя.
  5. XSS атака может быть проведена не только через сайт, но и через уязвимости в используемом программном обеспечении (в частности, через браузеры). Поэтому рекомендуем как можно чаще обновлять используемое программное обеспечение.
  6. Также возможно проведение XSS атак через использование SQL- кода [1].

Итак, XSS-атаки являются мощным и достаточно распространенным средством взлома Интернет-ресурсов. По данным Википедии XSS на сегодняшний день составляют около 15% всех обнаруженных уязвимостей.

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

Для того чтобы защитить сайт, для начала нужно знать какие уязвимые места он имеет. Любой незащищенный сайт имеет стандартные уязвимости:

  1. прием любой информации из форм, параметров GET запроса, cookie;
  2. в особо критичных случаях: прием любой информации с backend- серверов, например из баз данных;
  3. использования принятой информации для отображения на странице, формирования выходных данных (файлов, Email и т.д.), формирования параметров для последующей обработки (например, параметры передаваемые JavaScript).

Для защиты любой из этих уязвимостей нужно запомнить одно правило: «Проверок входных данных много не бывает». Рассмотрим основные способы и правила контроля входных данных на сервер:

  1. никогда не доверяйте никакой входной информации (GET, POST, Cookie);
  2. любые входные параметры требуют обязательной проверки на корректность, приведения к требуемому типу данных (int, boolean, float и т.д.), проверки на длину передаваемой строки;
  3. никогда не следует искать ошибки в полученных данных. Ищите только правильные с точки зрения приложения значения, и отметайте все остальное;
  4. обязательно фильтруйте HTML-тэги, т.к. безопасных тегов не бывает.

Способ произвести проверку входных данных на корректность – фильтрация.

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

  • string strip_tags(string $str [, string $allowable_tags]);
  • string trim (string $str [, string $charlist]);
  • string substr(string $str, int $start [, int $length]);
  • string strtr(string $str, array $replace_pairs).

Фильтрация числовых данных тоже очень важна. Рекомендуется приводить входную строку к заданному типу, и делать проверки уже после приведения. Например, вот так:

  • $bar = (boolean) $foo;
  • $bar = (int) $foo;
  • $bar = (float) $foo;

Существует еще ряд возможностей отфильтровать данные посылаемые на сервер:

  1. Проверка на пустоту поля

Проверка того, что пользователь ввел данные, может осуществляться, к примеру, с помощью функции isset:

<?

$name = $_POST['name'];

if (!isset($name))

{ // если переменная $name не существует, просим повторить ввод имени

?>

<h1>

Вы забыли ввести ваше имя </h1>

<!—

далее следует HTML-код формы, в которой вводится имя -->

<?

132

Точно таким же образом вы можете проверить и остальные заполняемые пользователем поля.

  1. Удаление HTML - тегов и обратных слешей.

Как уже говорилось, вводимый пользователем текст необходимо обработать функциями удаления HTML-тегов (для исключения возможности написания скриптов на JavaScript и Visual Basic) и обратных слешей (для исключения возможности написания скриптов на Perl). К примеру, если переменная $name содержит текст с именем пользователя, то обработка этого текста выглядит так:

<? $name = substr($_POST["name"],0,32);

$name = htmlspecialchars(stripslashes($name));

?>[2]

Еще одна возможность уберечься от посягательств на Ваш электронный ресурс – это отключение конфигурационных параметров языка программирования PHP. Таких как session.auto_start, register_globals, magic_quotes_gpc, allow_url_fopen, allow_url_include.

Также рекомендуется производить считывание всех входных данных из браузера в один специализированный модуль, который и будет заниматься фильтрацией всех входных данных, данный модуль еще называют «Одним окном» (в соответствии с рисунком 2).

Для предотвращения проведения XSS-атак также рекомендуется следующее:

  1. Запретите загрузку произвольных файлов на сервер во избежание загрузки вредоносных скриптов.
  2. Все загруженные файлы храните в базе данных, а не в файловой системе.
  3. Расширяя функциональность своего сайта, помните, что при этом возрастает возможность проведения XSS атак, так что расширяйте ее с крайней осторожностью и все время тестируйте.

 

ЛИТЕРАТУРА

  1. XSS атака [электрон. ресурс]. - 2012. URL: http://thelocalhost.ru/xss- ataka/ (дата обращения: 21.09.2012).
  2. Кузнецов М.В., Симдянова И.В. Учебник по PHP [электрон. ресурс].- 2010. URL: http://www.softtime.ru/bookphp/gl1_1 .php (дата обращения: 23.09.2012).
Год: 2012
Город: Костанай