* Фиксиране на сесиите по IP адрес
Публикувано на 15 ноември 2008 в раздел ПТСК.
Забележка: Този метод е валиден само за вътрешни или фиксирани мрежи. Използване на фиксация по 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 адреса, от който жертвата ще влезне на сайта. Това определено не решава проблема, но може да приемем, че значително затруднява атаките.
Задача: Помислете какви други отличителни белези за потребителската сесия бихте могли да използвате, за да направите подобни „капани“ за атакуващия.
Пусни коментар
Категории
- Бази от Данни (39)
- Вероятности (30)
- История (14)
- Кучета (67)
- Лада Нива (91)
- Математика (158)
- Методика (52)
- Общи работи (107)
- ПИК-3 Java (38)
- Политика (40)
- Програмни Среди (1)
- ПТСК (37)
- С/C++ (45)
- Семейни (15)
- Физика (35)
- ХHTML/JS (25)
- Храна (11)
Нови
- Здравей бебе!
- Какво означават метеорологичните кодове?
- Берра проправя пътеки
- Задача от YES
- Колан за теглене на автомобил