[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Безопастность входа на сайт и прибывание
agentor
насколько защищена данная функция входа на сайт?
можно ли улучшить безопастность данной функции и каким методом?

PHP
session_start();

if(
$_SESSION["user"]!="")
$user = strtolower($_SESSION["user"]);

if(
$_SESSION["pass"]!="")
$pass = strtolower($_SESSION["pass"]);

if(
$_POST["user"]!="")
$user = strtolower($_POST["user"]);

if(
$_POST["pass"]!="")
$pass = strtolower($_POST["pass"]);

if(
$user!="" && $pass!="" && $d!="logout") {
$mdc = mysql_query("SELECT * FROM `user` WHERE `user` = ".sqlesc($user)." LIMIT 1");
$usrd = mysql_fetch_array($mdc);
$password = md5($usrd["secret"] . $pass . $usrd["secret"]);
if ($usrd["id"]){
if(
$usrd["pass"] == $password){
$_SESSION["user"] = $user;
$_SESSION["pass"] = $password;
$lg="ok";
mysql_query("UPDATE `user` SET `online`='".time()."' WHERE `id`=".sqlesc($usrd["id"])."");
$GLOBALS["CURUSER"] = $usrd;
}
}else{
session_unset();
}
}


насколько защищена данная функция входа на сайт?
можно ли улучшить безопастность данной функции и каким методом?

функция sqlesc() работает по принцыпу mysql_real_escape_string
пароли зашифрованы SALT

заранее благодарен......



Спустя 1 час, 20 минут, 39 секунд (7.05.2009 - 16:40) jetistyum написал(а):
1. Если пользователь есть в сессии, зачем проверять $_POST?
2. Зачем уменьшать степень безопасности преобразуя пароли к strtolower??? пароли должны быть чувствительны к регистру.
Еще было бы хорошо проверять, а существует ли в сессии вообще элемент массива с индексом user
стоит ли проверять авторизацию, если юзер занесен в сессию?
на случай если юзер поменял пароль - можно очищать данные сессии, или подменять на новые, во всех остальных случаях это делать бесполезно.
А пароли ты солишь не ответом на секретный вопрос юзера????

Спустя 57 минут, 10 секунд (7.05.2009 - 17:37) agentor написал(а):
пароли шифруются спец функцией рендомом, а ткаже сам хеш шифрования сохраняет в базу, после входа сверяютя они 1 и 2 данные..после чего производит вход..присмене пароля таже ситуация

я не профи в программировани и пока на обучении и многое мне непонятно..
прошу так ли вы имели в виду
поправьте меня пожалуйста если я не верно написал код

PHP
session_start();
////$lg - äà èëè íåò////
if(!isset($_SESSION["user"]) || $_SESSION["user"] == "" || $_SESSION["user"] !=""){
unset(
$_SESSION['user']);
$lg="";
}else{
$user = htmlspecialchars(trim($_SESSION["user"]));
}
if(!isset(
$_SESSION["pass"]) || $_SESSION["pass"] == "" || $_SESSION["pass"] !=""){
unset(
$_SESSION['pass']);
$lg="";
}else{
$pass = htmlspecialchars(trim($_SESSION["pass"]));
}
if(!isset(
$_POST["user"]) || $_POST["user"] == "" || $_POST["user"] !="")
$user = htmlspecialchars(trim($_POST["user"]));

if(!isset(
$_POST["pass"]) || $_POST["pass"] == "" || $_POST["pass"] !="")
$pass = htmlspecialchars(trim($_POST["pass"]));

if(
$user!="" && $pass!="" && $d!="logout") {
$mdc = mysql_query("SELECT * FROM `user` WHERE `user` = ".sqlesc($user)." LIMIT 1");
$usrd = mysql_fetch_array($mdc);
$password = md5($usrd["secret"] . $pass . $usrd["secret"]);

if ($usrd["id"]){

if(
$usrd["pass"] == $password){
$_SESSION["user"] = $user;
$_SESSION["pass"] = $password;
$lg="ok";
mysql_query("UPDATE `user` SET `online`='".time()."' WHERE `id`=".sqlesc($usrd["id"])." LIMIT 1");
$GLOBALS["CURUSER"] = $usrd;
}
}else{
session_unset();
}
}



что то не так просит авторизацию на каждой странице

Спустя 36 минут, 23 секунды (7.05.2009 - 18:14) jetistyum написал(а):
Спецом быть вовсе не обязательно, достаточно включить фантазию.....
давай тогда построчно


PHP
if(!isset($_SESSION["user"]) || $_SESSION["user"] == "" || $_SESSION["user"] !=""){
unset(
$_SESSION['user']);
$lg="";
}else{
$user htmlspecialchars(trim($_SESSION["user"]));
}


а что если у тебя нет в сессии user
тоесть срабатывает блок if на первом же условии...
и пытается сделать unset($_SESSION['user'])
что получаем - варнинг, т.к. нет такого индекса..
Правда ведь для этого не нужно быть профи...

тем более как у тебя может возникнуть в сессии $_SESSION['user'] == ''
ну сам подумай, при каких условиях ты в сессию можешь записать такого юзера????
когда проверил пользователя - его юзернейм уже не равен пустой строке, когда ты уничтожил сессию - там нет поля юзернейм...
зачем сравнивать с пустой строкой?????
а третье условие ... взаимоисключающее второе..
получается ты всегда будешь удалять юзера из сессии..
ну если $_SESSION['user'] = 'root'
то выполняется условие root!='' и юзер из сессии удаляется...

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



Спустя 1 день, 17 часов, 46 минут, 23 секунды (9.05.2009 - 12:00) agentor написал(а):
спасибо за ответ..по немногу вроде начинаю разбиратся с сесиями..читаю манулы...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.