Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 24.04.2012, 15:12
Интересующийся
Отправить личное сообщение для Diego Посмотреть профиль Найти все сообщения от Diego
 
Регистрация: 06.02.2011
Сообщений: 24

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

Но вопрос не в этом. Сейчас у меня сайт на укозе(собственно, именно из-за этого и пишу cms), и пользователи часто жалются что им надо каждый день логинится заново. А IP, потому как динамический, будет каждый день менятся и разлогинивать пользователя, поэтому я сейчас думаю над тем, как иными способами закрепить профиль пользователя за конкретным компом. Пока думаю "метить" пользователя, согласно этой статье http://javascript.ru/unsorted/id , по крайней мере заголовки много полезных данных содержат.
И напрашивается вопрос - как держать логин пользователя безопасным способом без привязки к IP?

Сообщение от devote Посмотреть сообщение
А еще не забывать о том что многие редакторы любят совать BOM который тоже иногда приводит к ошибкам.
Ну это совсем уж детские ошибки(всмысле, сохранить в неправильной кодировке). Тем более во многих редакторах можно сразу при создании документа менять кодировку, например в Notepad++

Последний раз редактировалось Diego, 24.04.2012 в 15:14.
Ответить с цитированием
  #12 (permalink)  
Старый 24.04.2012, 15:33
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Diego
Тем более во многих редакторах можно сразу при создании документа менять кодировку, например в Notepad++
речь не о кодировке.. Редакторы добавляют BOM в тех случаях если вы файл сохраняете в кодировке UTF-8 что чаще всего на сегоднящний день все и используют.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #13 (permalink)  
Старый 24.04.2012, 16:02
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Если таблица юзера в БД примерно такая:

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(15) NOT NULL AUTO_INCREMENT,

   // логин пользователя
  `username` varchar(255) NOT NULL,
   // пароль пользователя в md5 формате
  `password` varchar(32) NOT NULL,
   // некий md5 хеш для проверки авторизации юзера
  `passkey` varchar(32) NOT NULL,

   // NULL если не заблокирован, иначе время в формате unix timestamp указывающую дату блокировки
  `blocked` int(15) unsigned DEFAULT NULL,

   // NULL если не активирован аккаунт, иначе время в формате unix timestamp указывающую дату активации
  `activated` int(15) unsigned DEFAULT NULL,

  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


То можно сделать примерно такой вариант:
function check_user_auth() {

	if ( isset( $_COOKIE['ruirm'] ) ) {

		$sql_result = mysql_query( "SELECT COUNT(*) FROM `users` ".
				"WHERE md5(CONCAT(`passkey`, md5(`id`), md5(`username`), md5(`password`)))='".
				mysql_real_escape_string( $_COOKIE['ruirm'] )."' ".
				"AND ISNULL(`blocked`) ".
				"AND NOT ISNULL(`activated`);"
		);

		if ( mysql_num_rows( $sql_result ) > 0 ) {

			SetCookie( "ruirm", $_COOKIE['ruirm'], time() + 60*60*24*30*12*5 );

			return true;

		} else {
			SetCookie( "ruirm", '', time() + 60*60*24*30*12*5 );
		}
	}

	return false;
}

if ( check_user_auth() ) {
	echo "Пользователь авторизован!";
} else {
	echo "Пользователь не авторизован!";
}
Но без использования сессий, это критично для БД.

После авторизации в куку значение ruirm генерить так:
SetCookie("ruirm",
	md5( $user['passkey']. // текущее значение passkey из БД
	md5( $user['id'] ). // Id пользователя в БД
	md5( $user['username'] ). // логин пользователя
	md5( $user['password'] ) ), // хешпароль пользователя в БД
	time() + 60*60*24*30*12*5  // сохраним на пять лет :)
);
где переменная $user содержит данные пользователя из БД

Если пользователь сменит пароль, во всех браузерах где он был авторизован слетит авторизация, так же можно добавить у пользователя в аккаунте кнопочку, "Выйти из всех браузеров" после нажатия на которую меняем passkey на какой-нить другой. Генерация этого passkey может быть любая, на ваш вкус. Но менять ее может лишь юзер который жмакнул кнопку "Выйти из всех браузеров". Или сервак может сменить например при блокировании юзера что бы он вылетел со всех браузеров и т.д.

Если юзать сессии, то тогда не нужно будет постоянно обращаться в БД, а лишь один раз в случае если в сессии нет инфы об авторизации юзера.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #14 (permalink)  
Старый 24.04.2012, 16:31
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Много вы тут про сессии говорите. А можно ссылку - глянуть, что это и как реализуется
Ответить с цитированием
  #15 (permalink)  
Старый 24.04.2012, 17:23
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,576

Сообщение от devote
Уж неужто вычитали где-то что это влияет на безопасность?
это доморощенная мудрость пых программистов. , почерпнутая из холиваров на форумах.
Смысл в том, что если стоит закрывающий тег, то html вирус(если как то проникнет) спокойно себя допишет в конец файла и будет работать незамеченным.
А если не стоит тег, то пых выкинет ошибку и сайт ляжет, зато сразу можно будет и устранить проблему.
Ответить с цитированием
  #16 (permalink)  
Старый 24.04.2012, 17:23
Интересующийся
Отправить личное сообщение для Diego Посмотреть профиль Найти все сообщения от Diego
 
Регистрация: 06.02.2011
Сообщений: 24

Сообщение от devote Посмотреть сообщение
$sql_result = mysql_query( "SELECT COUNT(*) FROM `users` ".
"WHERE md5(CONCAT(`passkey`, md5(`id`), md5(`username`), md5(`password`)))='".
mysql_real_escape_string( $_COOKIE['ruirm'] )."' ".
"AND ISNULL(`blocked`) ".
"AND NOT ISNULL(`activated`);"
);
то есть как ответ из бд вернутся не данные, а количество строк, в которых сумма хешей совпадает данным из куки?
Сообщение от devote Посмотреть сообщение
Если юзать сессии, то тогда не нужно будет постоянно обращаться в БД, а лишь один раз в случае если в сессии нет инфы об авторизации юзера.
тогда буду использовать сессии

Сообщение от devote Посмотреть сообщение
Генерация этого passkey может быть любая, на ваш вкус.
значит, что всю безопасность обеспечивает passkey? Если у злоумышленника сгенерированный по данным его компа passkey не совпадет с passkey пользователя, то защита работает?

Сообщение от Раед Посмотреть сообщение
Много вы тут про сессии говорите. А можно ссылку - глянуть, что это и как реализуется
http://www.php.su/articles/?cat=examples&page=070
Ответить с цитированием
  #17 (permalink)  
Старый 24.04.2012, 17:24
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,576

сессии
Ответить с цитированием
  #18 (permalink)  
Старый 24.04.2012, 17:30
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,576

Сообщение от Diego
Не люблю кашу в ссылках
А такая ссылка и не нужна. Сессии через куки работают, а автоподстановку в адреса и формы(получаются некрасивые адреса) обычно не включают.
Ответить с цитированием
  #19 (permalink)  
Старый 24.04.2012, 17:52
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Сообщение от micscr
сессии
Спасибо, почитал
Ответить с цитированием
  #20 (permalink)  
Старый 24.04.2012, 17:57
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Diego
значит, что всю безопасность обеспечивает passkey?
Нет конечно, он лишь подтверждает то что юзер когда-то залогинелся. А если злоумышленник узнает passkey то он ему совершенно ничего не даст, так как помимо этого нужно знать и пароль пользователя и логин пользователя и ID пользователя в БД.. потому как все это связано между собой и любое изменение этих параметров приведет к тому что юзер вылетит из сайта, со своего аккаунта и ему придется авторизоваться снова.

Сообщение от Diego
то есть как ответ из бд вернутся не данные, а количество строк, в которых сумма хешей совпадает данным из куки?
Да, но хеш код уникален, поэтому всегда будет возвращаться лишь одна строка если совпадение найдено, либо не одной если не найдено.

Сообщение от Diego
Если у злоумышленника сгенерированый по данным его компа passkey не совпадет с passkey пользователя, то защита работает?
не переживайте через эту систему ему вечность ломать придется вас
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Связь между страницами с javascript и php ... и обратно okrip25 AJAX и COMET 7 09.01.2012 14:43
Запуск выполнения PHP при нажатие на кнопку??? Abibas220 Общие вопросы Javascript 1 05.01.2011 12:05
Как передать картинку из javascript в php KIVagant AJAX и COMET 3 12.05.2010 11:54
javascript и php (Вопрос) Гауляйтер Общие вопросы Javascript 3 06.05.2009 09:23