Авторизация куки + сессии + пгскул

Статус
В этой теме нельзя размещать новые ответы.

afonya09

Полезный
Регистрация
31 Янв 2009
Сообщения
260
Реакции
19
PHP:
session_start();
 if ($_POST['loginout']) {	
	setcookie("login", "", time()-36000);
    setcookie("password", "", time()-36000);
    session_destroy();
    Header("Location: ".$_SERVER['HTTP_REFERER']);   
}

if ($_POST['login']!='' && $_POST['password']!='' && $_SESSION['grant'] != 1) {	
    $login = pg_escape_string($_POST['login']);
    $password = pg_escape_string(md5(md5($_POST['password'])));    
	$result = pg_query($db, "SELECT user_id FROM people where user_name='".$login."' and user_pass='".$password."'");
	if ($result) {
  		$row = pg_fetch_row($result);  		
  		$_SESSION['grant'] = 1;	
  		$_SESSION['login'] = $login;  		
  		setcookie("login", $login, time() + 36000,"/", $_SERVER['SERVER_NAME'], 0);
        setcookie("password", $password, time() + 36000,"/", $_SERVER['SERVER_NAME'], 0);
        Header("Location: ".$_SERVER['HTTP_REFERER']); 
	}  
}

if ($_SESSION['grant']!=1) {
    if (isset($_COOKIE['login']) && isset($_COOKIE['password'])) {       
        $login = pg_escape_string($_COOKIE['login']);
        $password = pg_escape_string($_COOKIE['password']);
        
        $result = pg_query($db, "SELECT user_id FROM people where user_name='".$login."' and user_pass='".$password."'");
		if ($result) {
  			$row = pg_fetch_row($result);  			
  			$_SESSION['grant'] = 1;
  			$_SESSION['login'] = $login;	
		}  
    }   
}
if ($_SESSION['grant'] == 1){
	echo "<form action=index.php?loginout=ok method=post name=au><input type=submit value=Выйти  name=loginout>";
}else {
	echo "<form action=index.php method=POST name=au>Name:<input type=text name=login maxlenght=20>";
    	echo "Pass:<input type=password name=password maxlenght=16 size=12>";
echo "<input type=submit value=Войти name=sub> ";
echo "<a href=index.php?act=1>Регистрация</a><hr noshade></form>";
}
Ваше мнение насколько безопасно от взлома??
 
А зачем вы используете pg_escape_string без проверки на включение магических кавычек
отфильтруйте вх данные в том числе и куки через РВ
забыли exit;
 
Разве pg_escape_string не достаточно??
Зачем exit у меня дальше модули грузяца.
 
Точно сразу не понял но это ведь не ведет к уезвимости ведь так??
Ну а если с точки зрения безопасности насколько все безопасно кража кук не в счет??
 
Разве pg_escape_string не достаточно??
Зачем exit у меня дальше модули грузяца.
если магические кавычки включены то pg_escape_string добавит лишние слэши...насчет exit не дописал что надо сделать рефреш и exit чтобы перегрузить страницу и очистить форму .
 
Зачем перегружать?? Лишний траффик и нагрузка!!!
 
Если обработчик и форма в одном скрипте то перегрузить надо обязательно чтобы очистить поля формы иначе по ф5 будут снова вводиться те-же данные.. если форма отдельно от обработчика то надо в обработчике после внесения данных в бд делать редирект на основную или куда нибудь и завершить работу скрипта..причина та-же самая...трафик мизер ну если уж совсем хочется его минимизировать пользуйтесь аяксом...
 
Я делаю так..

Есть таблица с sesions_key, в ней поля hash_key и user_id,
при успешном логине или где поставили галочку запомнить меня, в табилицу пишется случайнос генерированый хеш и id пользователя, и этот хеш пишется ему в куки.

Далее если он заходит на сайт и у него нет сессии то проверяется куки, и если есть в куках хеш и он присутсвует в таблице, то пользователь автоматически авторизируется.
 
я бы не советовал хранитьв куках пароль, пускай даже в захешированном виде.
при краже кук, подбор пароля вопрос времени.
хотя двойной хеш в несколько тысяч раз лучше, чем одинарный, но все же это является недостаточно безопасным.
лучше генерировать случайный хеш при авторизации, и заносить его в БД для данного пользователя, и в куки ему
только хеш должен быть действительно случайным.
то есть не просто от времени, умноженного на случайное число(такой хеш довольно быстро выявляется, а затем подбирать хеши для доступа по кукам только дело техники)
хеш должен братся от строки случайной длины, содержащей в себе что угодно, но главное, чтобы одна такая строка не была похожа на другую
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху