Вариант 1:
session_start();
if($_SESSION['login']==$login && $_SESSION['pass']==$pass){
#Код админки
}
else{exit("Вы не авторизованы.");}
Вариант 2:
session_start();
if($_SESSION['login']!=$login && $_SESSION['pass']!=$pass){
exit("Вы не авторизованы.");
}
#Код админки
Равнозначны-ли в плане безопасности оба варианта?
Спустя 5 минут, 56 секунд (8.03.2011 - 21:17) Trianon написал(а):
Цитата |
Вариант 2: session_start(); if($_SESSION['login']!=$login && $_SESSION['pass']!=$pass){ exit("Вы не авторизованы."); |
Попробуйте запустить скрипт N 2 так, чтобы в сессии оказался правильный логин и неправильный пароль.
Или наоборот - правильный пароль и ошибочный логин.
Что будет?
Обе в плане безопасности не выдерживают критики.
Хотя бы потому, что пароли не хранят вообще, а в сессии их хранить нет никакого толку.
Спустя 6 минут, 14 секунд (8.03.2011 - 21:24) Dron19 написал(а):
Trianon , да кстати! Войдет в админку!
Спустя 41 минута, 39 секунд (8.03.2011 - 22:05) alex12060 написал(а):
Почему войдет? оО
Ведь && - логическое AND
И если одно из условий неверно, то вернет false
Ведь && - логическое AND
И если одно из условий неверно, то вернет false
Спустя 31 минута, 28 секунд (8.03.2011 - 22:37) Evilsoul написал(а):
alex12060
ага, вот и я не понял почему войдет...
LRCenter
вообще как по мне, лучше проверять по отдельности и еще строгим равенством ===
ага, вот и я не понял почему войдет...
LRCenter
вообще как по мне, лучше проверять по отдельности и еще строгим равенством ===
Спустя 7 часов, 37 минут, 58 секунд (9.03.2011 - 06:15) LRCenter написал(а):
Не, не, понятно что пароль не хранится в открытом виде, и вообще не хранится в сессии, это я так условно. Интересует именно надежность логики второго варианта, т.е. можно-ли использовать авторизацию как отдельный блок кода, не вписывая в него код админки? Это дает большую гибкость, например можно приинклудить один код авторизации к куче скриптов админки разом.
Т.е. достаточно ли exit; и само условие чтоб не допустить выполнения кода после, в случае непрохождения авторизации?
Вариант 2:
Evilsoul
Понял, насчет "===", спасибо!
Trianon
Dron19
Почему войдет, не понял?
Т.е. достаточно ли exit; и само условие чтоб не допустить выполнения кода после, в случае непрохождения авторизации?
session_start();
if($_SESSION['login']===$login && $_SESSION['userid']===$userid){
#Код админки
}
else{exit("Вы не авторизованы.");}
Вариант 2:
session_start();
if($_SESSION['login']===$login && $_SESSION['userid']===$userid){
exit("Вы не авторизованы.");
}
#Код админки
Evilsoul
Понял, насчет "===", спасибо!
Trianon
Dron19
Почему войдет, не понял?
Спустя 3 часа, 14 минут, 29 секунд (9.03.2011 - 09:29) linker написал(а):
LRCenter
А ты сам подумай
А ты сам подумай
$_SESSION['login']!=$login && $_SESSION['pass']!=$passусловие выполнится если $_SESSION['login']!=$login И $_SESSION['pass']!=$pass, т.е. одновременное неравенство двух условий. Таким образом, если хотя бы логин будет совпадать, то условие не выполнится и хацкер войдет в твою закрытую часть.
Спустя 18 минут, 34 секунды (9.03.2011 - 09:48) alex12060 написал(а):
точно)
Спустя 10 минут, 20 секунд (9.03.2011 - 09:58) LRCenter написал(а):
Че-то я запутался. Второй вариант кажется мне все же удобнее.
linker
Так все ок?
session_start();
if($_SESSION['login']!=$login){exit("Вы не авторизованы.");}
else{
if($_SESSION['pass']!=$pass){exit("Вы не авторизованы.");}
}
#Код админки
linker
Так все ок?
Спустя 33 минуты, 13 секунд (9.03.2011 - 10:31) twin написал(а):
Зачем пароль в сессию, ты можешь как то объяснить?
Спустя 16 минут, 29 секунд (9.03.2011 - 10:48) LRCenter написал(а):
Да, не пароль, а контрольную переменную! Кстати а что вообще записывать в сессию для авторизации?
Вот допустим, авторизовался юзверь, проверли логин, пароль, все ок - открываем сессию, записываем туда его логин, но этого явно недостаточно для надежности, чего еще "солёный" пароль например, в качестве котнтрольной переменной подойдет??
Вот допустим, авторизовался юзверь, проверли логин, пароль, все ок - открываем сессию, записываем туда его логин, но этого явно недостаточно для надежности, чего еще "солёный" пароль например, в качестве котнтрольной переменной подойдет??
Спустя 34 минуты, 49 секунд (9.03.2011 - 11:22) LRCenter написал(а):
linker
Сменить "&&" на "or" и все дела.
Сменить "&&" на "or" и все дела.
Спустя 3 часа, 51 минута, 12 секунд (9.03.2011 - 15:14) Trianon написал(а):
Цитата (LRCenter @ 9.03.2011 - 10:48) |
Да, не пароль, а контрольную переменную! Кстати а что вообще записывать в сессию для авторизации? Вот допустим, авторизовался юзверь, проверли логин, пароль, все ок - открываем сессию, записываем туда его логин, но этого явно недостаточно для надежности, чего еще "солёный" пароль например, в качестве котнтрольной переменной подойдет?? |
для какой надежности недостаточно?
Туда и логин-то писать необязательно.
Достаточно записать id в таблице пользователей.
Что Вам даст логин с паролем, помещенный в сессию?
Что он даст злоумышленнику, я могу сказать.
А что он даст для пользы дела?
Спустя 10 минут, 31 секунда (9.03.2011 - 15:24) linker написал(а):
Лично я для каждой сессии генерю уникальный хэш.
Спустя 21 минута, 36 секунд (9.03.2011 - 15:46) Michael написал(а):
Цитата (linker @ 9.03.2011 - 14:24) |
Лично я для каждой сессии генерю уникальный хэш. |
с привязкой к ip-шнику?
Спустя 45 минут, 57 секунд (9.03.2011 - 16:32) LRCenter написал(а):
Michael
Лучше, да + имя и версию браузера можно. А id обязательно должен менятся от сессии к сессии? может лучше использовать хеш логина с динамически ротируемой солью?
Лучше, да + имя и версию браузера можно. А id обязательно должен менятся от сессии к сессии? может лучше использовать хеш логина с динамически ротируемой солью?
Спустя 52 минуты, 19 секунд (9.03.2011 - 17:24) Michael написал(а):
Цитата (LRCenter) |
А id обязательно должен менятся от сессии к сессии? |
Ты о чем? Человек один раз залогинился и в сессии хранится id этого пользователя.
Спустя 5 минут, 18 секунд (9.03.2011 - 17:29) LRCenter написал(а):
Просто linker говорит, что генерирует уникальный id для каждой сессии, и в базе его перезаписывать, чтоб в сессии вообще не хранилось ничего постоянного, вот я и думаю настолько это целесообразно?
Спустя 3 минуты, 53 секунды (9.03.2011 - 17:33) Michael написал(а):
Цитата (LRCenter @ 9.03.2011 - 16:29) |
Просто linker говорит, что генерирует уникальный id для каждой сессии |
он сказал, что генерирует уникальный хеш.
Спустя 14 минут, 51 секунда (9.03.2011 - 17:48) linker написал(а):
Я для каждой новой сессии генерирую уникальный хэш. Данному хэшу противопоставляется идентификатор авторизованного пользователя, плюс время последнего обновления (лимит жизни сессии в таблице равен значению из session.gc_maxlifetime), все это дело хранится в таблице. Генерируемый хэш уникален и не завязан ни на логин, ни на пароль, ни на какие иные статические данные.
_____________
Меньше кода - меньше багов ©