Безопасность сессий.

dEn

Guest
Безопасность сессий.

Я столкнулся с такой проблемой:
После авторизации пользователя его логин и пароль кладу в сессию (закриптировав эти два параметра - но это не важно). После того как пользователь авторизовался он идет на другую страничку с помощью

header("Location: test.php?=SID");

Другая страничка (test.php) проверяет сессию таким образом:

if (!isset($login) && !isset($passwd))
header("location: index.php");

Так вот. Вопрос такой. Если, предположим, мы напрямую постом указали скрипту параметры, он их "возьмет" не посмотрев в параметры сессии, а нужно добиться результата, чтобы ТАКОГО ВИДА ЗАПРОСЫ ОТПРАВЛЯЛИСЬ на index.php. Т.е. нужно добиться того, чтобы человек не смог напрямую скрипту указать параметры, скрипт эти параметры должен читать непосредственно из сессии!!! Логины и пароли я храню в БД. Я тут думал поставить в проверку сессии обращение к БД на сравнивание логина и пароля, но, получается, что человек путешествуя со страницы на страницу будет постоянно проверяться БД. Насколько это правильно? Есть какой-то другой вариант? Возможно, это покажется ламеризмом законченным, поэтому прошу не бить сильно по голове. :)

Д.
 

dEn

Guest
Кстати, есть вариант на проверку пустых полей используя $HTTP_SESSION_VARS["variable"] - вариант? -)
 

dEn

Guest
Вот работающий вариант, который не глючит.

Делаем ф-ию

function check_session($login = "", $passwd = "")
{
if (empty($login) && empty($passwd))
logg("session: Someone try to fool sessions.");
if (!isset($login) && !isset($passwd) || (empty($login) && empty($passwd))) {
logg("session: failed ");
header("location: index.php");
}
}

и вставляем ее ВНАЧАЛЕ каждой странички со следующим содержанием:

session_start();
check_session($HTTP_SESSION_VARS["login"],$HTTP_SESSION_VARS["passwd"];
 

dEn

Guest
Я знаю, что PHP читает переменные из сессии. Дело все в том, что когда я экспеременитровал, я увидел этот глюк... В начале странички, ставим:

test.php
<?
session_start();
include "/usr/local/httpd/stat/misc.inc"; // тут лежит ф-я check_session()
check_session()
...
echo "Login $login
".
"Passwd: $passwd
";

---
А вот если делать check_session() таким образом:

function check_session()
{
global $login, $passwd;
if (!isset($login) && !isset($passwd)) {
logg("session: failed ");
header("location: index.php");
}
}

Так вот если постом отправить скрипту test.php переменные $login и $passwd
http://hostname/test.php?login=test&passwd=test
То, этот скрипт возьмет значения перменные login и passwd не из сессии -) поэтому действительно лучше проверять HTTP_SESSION_VARS. По поводу секурити все-таки остается вопрос открытым.
 

chira

Новичок
В начале PHP скрипта вставь маленькую процедурку которая будет сбрасывать все переменные которые пришли к тебе методом GET.
 
Сверху