Мой блог онлайн журнал! Меня нет в ЖЖ-дневнике и на лесби форумах. Я обычная девушка-блоггер! Мои заметки о любви и цитатах, о детях, о машинах, полезные советы и новости, рецепты и домашние заботы!

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

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

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

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

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

По умолчанию вся информация о сессии, включая ID, передается в cookie. Но так бывает не всегда. Некоторые пользователи отключают cookie в своих браузерах. В таком случае браузер будет передавать идентификатор сессии в URL.

www.site.ru/index.php?PHPSESSID=n2cnj59d7s3p30fjs0jfn28nf

Здесь ID передается в открытом виде, в отличие от сессии через cookie, когда информация скрыта в HTTP-заголовке. Самым простым способом защиты от этого будет запрет передачи идентификатора сессии через адресную строку. Сделать это можно, прописав следующее в конфигурационном файле Apache-сервера .htaccess:

php_flag session.use_only_cookies on

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

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

Если вы храните пароль сессии в переменной $_SESSION (все-таки лучше использовать sql), то не стоит хранить его в открытом виде.

if ($_SESSION['password'] == $userpass) {
    // код	
}

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

 

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


 Чтобы отсечь возможность использования сессии с другого браузера (компьютера), следует ввести проверку поля HTTP-заголовка user-agent:
 
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']);
}

 

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


 Ограничьте время жизни сессии, а также время действия cookie. По умолчанию срок действия сессии 1440 секунд. Изменить это значение можно через php.ini и .htaccess. Пример для .htaccess:
 
 # Время жизни сессии в секундах
 php_value session.gc_maxlifetime 3600
 # Время жизни куки в секундах
 php_value session.cookie_lifetime 3600
 
 

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


 В определенных ситуациях (не всегда) следует установить привязку по IP-адресу. В основном когда количество пользователей ограничено и имеют статичные IP. Проверка может быть либо по списку разрешенных IP-адресов,
 
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):
 
if(isset($_SESSION['ip']) and $_SESSION['ip'] == $_SERVER['REMOTE_ADDR']) 
{
    header("Location: admin.php");
}
else 
{
    session_unset();
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}

 
 Следует осознавать, что полностью избежать взлома невозможно. 
Можно только максимально усложнить этот взлом любыми известными способами.
Однако следует также не забывать о своих легальных пользователях, 
чтобы не осложнить им жизнь такой защитой.
habr.com/ru/post/120636/

Оставить комментарий

Blue Captcha Image
Новый проверочный код

*

..

Мы живем и радуем наших читателей

Подписка на почту:

Сервис FeedBurner

Топ просмотров
Blog Traffic

Pages

Pages|Hits |Unique

  • Last 24 hours: 753
  • Last 7 days: 30 981
  • Last 30 days: 57 631
  • Online now: 5
Яндекс.Метрика

Нравится