E-mail Пароль
Забыли пароль?
Ardzo.Serenity - защита сайта от вирусов, троянов и внедрений

Защита идентификатора сессии

К списку статей

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

Использование cookie

Передаваемая информация о сессии, включая ID передается в cookie, но не всегда, поскольку некоторые пользователи отключают в браузерах cookie. Тогда браузер будет передавать идентификатор сессии в URL.
http://www.example.org/index.php?PHPSESSID=n2cnj59d7s3p30fjs0jfn28nf
В отличии от сессии через cookie, когда информация скрывается в HTTP-заголовке, ID передается открытым. Чтобы защитить от этого, необходимо запретить передачу идентификатора php сессии посредством адресной строки. В файле конфигурации Apache-сервера .htacess прописываем следующее:
php_flag session.use_only_cookies on

Использование шифрования

Если ваш сайт предназначен для обработки конфиденциальной информации, например номера кредитной карты, необходимо использовать шифрование SSL3.0 и TSL1.0. Для этого следует указать true для параметра secure при установке cookie.

Если у вас сохранен пароль сессии в переменной $_SESSION, то хранение его в открытом виде будет небезопасным.

if ($_SESSION['password'] == $userpass) {
    // код	
}
Указанный выше код не очень безопасен, так как его пароль хранится как обычный текст в переменной php сессии. Используйте лучше вместо этого md5-шифрование:
if ($_SESSION['md5password'] == md5($userpass)) {
    // код	
}

Проверка браузера

Чтобы предотвратить возможность использования сессии при помощи постороннего браузера или компьютера, необходимо ввести проверку поля HTTP-заголовка user-agent:
< ?php
session_start();
if (isset($_SESSION['HTTP_USER_AGENT']))
{
    if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT']))
    {
        // код
    }
}
else
{
    $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
}
?>

Привязка по IP-адресу

Не обязательно во всех ситуациях прибегать к установке првязки по IP-адресу. Зачастую, лучше это делать, при ограниченном количестве пользователей со статичными IP. Проверка осущеcтвляется, в основном, по списку разрешенных IP-адресов
< ?php 
include ("ip_list.php");

$ip_white_list = array ( 
	'admin1' => '111.222.333.444',
	'admin2' => '555.666.777.888');

if(!empty(array_search($_SERVER['REMOTE_ADDR'],$ip_white_list))) 
{
    header("Location: admin.php");
}
else 
{
    echo 'ACCESS DENY!';
}
?>
либо по IP-адресу для каждого конкретного запроса исключительно для статичных IP:
< ?php 
if(isset($_SESSION['ip']) and $_SESSION['ip'] == $_SERVER['REMOTE_ADDR']) 
{
    header("Location: admin.php");
}
else 
{
    session_unset();
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}
?>

Срок действия сессии

Целесообразно ограничивать время действия сессии. Сделать это можно через php.ini или .htaccess. Например, так для .htaccess:
# Время жизни сессии в секундах
php_value session.gc_maxlifetime 3600
# Время жизни cookie в секундах
php_value session.cookie_lifetime 3600
Помните, что гарантированно предотвратить возможность взлома невозможно. Создать препятствия для злоумышленников различными способами - возможно. При этом не забывайте обычных пользователей и не усложняйте им доступ. Все хорошо в меру, как говорится.