Посоветуйте как защитить сайт - чтобы параметры строки браузера зашифровать или ..

HelpFinder

Новичок
Посоветуйте как защитить сайт - чтобы параметры строки браузера зашифровать или ..

Написал один из первых сайтиков. Там после ввода логина/пароля, происходит сверка в базе данных с существующим пользователем. в случае удачи, программа достаёт id этого пользователя и на каждой страничке это значение id фигурирует в страке адреса, потомучто попасть с одной странички на другую можно либо через ссылку с параметром, либо через отправку данных формой. На каждой страничке вначале происходит проверка if(isset($_GET("u_id"){...}else{header("location: /index.php");}
Злоумышленник легко в этом случае сможет поменять в строке адреса id на другой и получит доступ к данным другого зарегестрированного пользователя. Подскажите трюки наиболее умные для решения проблемы.

Сам думаю закодировать просто этот ID функцией crypt и чтобы её хеш висел наверху. тогда уж юзеры точно не подберут id, хотя наверняка это слабо.
Есть ещё вариант ввести константу глобальную и с ней сравнивть всегда. а ещё сессиями можно но стоит ли их использовать там? не слишком ли сложно?
 

HelpFinder

Новичок
Попинайте пожалуйста мой метод?

1)в файле авторизации после сопоставления с базой "логин, пароль", вызываются строчки - если всё удачно прошло:
session_start();
if(!isset($_SESSION['u_id'])){
S_SESSION['u_id']=$user['id'];
session_regenerate_id();
$_SESSION['SesID']=session_id();
}else{
if($_SESSION['u_id']!=$user['id']){
$_SESSION['u_id']=$user['id'];
session_regenerate_id();
$_SESSION['SesID']=session_id();
}
}
if(!isset($_SESSION['SesID'])){
session_regenerate_id();
$_SESSION['SesID']=session_id();
}
header("location: /good?SesID=".$_SESSION['SesID']);

Далее в каждом файле сайта вызываются строчки
session_start();
if(isset($_SESSION["u_id"])){
$u_id=$_SESSION["u_id"];
}else{
header("locatioon: /index.php");
}
if(isset($_SESSION["SesID"])){
if(!isset($_GET["SesID"])){
header("locatioon: /index.php");
}else{
if($_SESSION["SesID"]!=$_GET["SesID"])
{
header("locatioon: /index.php");
}
}
}else{
header("locatioon: /index.php");
}

Ну и разумеется к каждой строке Ссылок и к каждой форме прибавляют идентификатор сессии $_SESSIONS['SesID'];

Получается, что злоумышленник не может видеть ID пользователя, а также если он даже поменяет в строке адреса идентификатор сессии, то после перехода по адресу, это вкроется.

Ну как метод? есть уязвимые места?
 

Фанат

oncle terrible
Команда форума
насчёт уязвимых мест не знаю, а вот лишнего - много.
во втором скрипте - всё, что начинается с if(isset($_SESSION["SesID"])){

ну, и в первом - соответственно - тоже.
вообще, вся эта возня с GET и SesID абсолютно непонятна

и зачем руками что-то дписывать - тоже непонятно
почитай
PHP FAQ: Сессии. Подробное описание работы и объяснение механизма.
 

Markus

Новичок
Не вижу вообще проблемы.

При авторизации запихивать в сессию id пользователя.
Зачем передавать id пользователя в строке? разве она не присутсвует уже в сессии?

вот пример небольшой
SELECT * FROM table WHERE user_id = '".$_SESSION['user_id']."'
 

Фанат

oncle terrible
Команда форума
Markus
во-первых, не $_SESSION['user_id'], а intval($_SESSION['user_id'])
во-вторых, зачем передавать id пользователя в строке товарищ объяснил (для тех, кто умеет читать) - он просто не умел раньше по-другому. после того, как ему объяснили про сессии, он стал делать ими. Так что ты со своим удивлением опоздал.
 
Сверху