* Фиксиране на сесиите по IP адрес
Публикувано на 15 ноември 2008 от Филип Петров. Записано в NetSec.
Забележка: Този метод е валиден само за вътрешни или фиксирани мрежи. Използване на фиксация по IP адрес в Интернет приложение може да създаде сериозни проблеми на легитимни потребители ако те са част от големи NAT мрежи (например всички потребители на AOL). Получава се така, защото при тях различните заявки идват от различни IP адреси (те нямат собствено IP, а използват няколко възможни изходящи). Използвайте този метод само ако сте напълно убедени, че нямате такива потребители в системата си.
Чрез използването на супер-глобалната променлива $_SERVER ние можем да извлечем IP адреса на сесията чрез стойността на полето ‘REMOTE_ADDR’. Идеята за фиксиране на сесия по IP адрес е при първоначалното зареждане на страницата да запазим IP адреса на потребителя. Ако някой друг IP адрес пожелае да използва същата сесия, то ние ще поискаме да го отхвърлим и ще унищожим сесията:
<?php
session_start();
session_regenerate_id(true);
?>
<html>
<head>
<title>WorldBank.dom session page</title>
</head>
<body>
<?php
if(isset($_SESSION['ip'])){
if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']){
echo 'You entered a session fixed by another IP!';
session_destroy();
return;
}
}
else{
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}
$maxSessionTime = 10 * 60;
$timeout = 5 * 60;
$curtime = (int)time();
if(! isset($_SESSION['initial_time'])){
$_SESSION['initial_time'] = (int)time();
}
if($curtime-$_SESSION['initial_time'] > $maxSessionTime){
echo 'Maximum session time exceeded';
session_destroy();
return;
}
if (isset($_SESSION['last_active'])){
if ($curtime-$_SESSION['last_active'] > $timeout){
echo 'Session timeout';
session_destroy();
return;
}
}
$_SESSION['last_active'] = $curtime;
echo 'session id is: ';
echo session_id();
echo '<br>';
if (!isset($_SESSION['counter'])){
$_SESSION['counter'] = 0;
}
else{
$_SESSION['counter']++;
}
echo 'counter: ';
echo $_SESSION['counter'];
?>
</body></html>
Полето ‘REMOTE_ADDR’ за съжаление не е достатъчно надеждно. CGI environment променливите могат лесно да пъдат подменени (spoof) и затова не би трябвало да се доверявате на тяхната достоверност. Този метод обаче е доста удобен за справяне с проблема за фиксиране на сесия. Така атакуващият ще трябва предварително да знае IP адреса, от който жертвата ще влезне на сайта. Това определено не решава проблема, но може да приемем, че значително затруднява атаките.
Задача: Помислете какви други отличителни белези за потребителската сесия бихте могли да използвате, за да направите подобни „капани“ за атакуващия.
Пусни коментар
Страници
Категории
- C/C++ (45)
- DB (36)
- Dogs (51)
- Food (8)
- History (9)
- Java (33)
- Lada (45)
- Math (104)
- Metodos (35)
- NetSec (36)
- Other (78)
- Politics (32)
- Probability (13)
- VC++.Net (1)
- XHTML/JS (25)
Нови
- ASCII Лада Нива
- Анимация и обучение чрез забавление
- Активизиране на студентите по време на лекции
- Проблемно-ситуационно обучение
- Стратегии за учене и преподаване