![]() |
Реализация прав доступа AS3/PHP
Добрый день.
Возникла необходимость прикрутить к одному проекту систему пользователей, админку, но т.к. никогда с этим не сталкивался хочу узнать какие подводные камни могут встретиться и каким лучше путём пойти, оптимальные решения. Тема конечно не маленькая, и относится не только к AS3, но и к PHP. Может кто мануалом каким поделится на эту тему? Я так полагаю без сессий и куков этот вопрос не решить, а опыта работы в этом нет. Есть ли смысл взять уже готовые php скрипты и подстроить под них свой проект? :confused: :o |
Начну с конца. =) имхо готовых скриптов лучше не брать, хотя решать Вам. Подводные камни есть, и основной камень отсутствие опыта. Ссылки давать не вижу смысла,их будет просто очень много. Гугл должен всегда (ну или почти всегда) подсказать. Используем связку AS3+PHP+MySQL и все. =)
|
на счёт связки AS3/PHP/MySQL в приницпе понятно. Вопросов в данный момент очень много и вываливать их все тут смысла нет. Ну основные 2 вопроса на данный момент это, пожалуй, сессии и куки. Я полагаю что без сессий вся система будет не полноценна в приницпе, а вот от куков на первых этапах можно и отказаться, они же не влияют на поддержание сессии? Как я понимаю сессия с пользователем держится по таймауту активности и основной плюс куков это отсутствие необходимости вводу логина/пасса при обращениях через определённое время?
|
Вместо куков, если у Вас весь проект держится на Flash-технологии, Вы можете использовать класс SharedObject, он гораздо более мощный нежели php-куки. По сессиям Вам нужно читать php.su.
Добавлено через 1 минуту и для чего Вам нужны сессии, определять находится ли пользователь online? |
Мечтатель, ну вообще, в данный момент меня интересует сам приницип реализации алгоритма. А полное отсутствие опыт в этих вопросах кидает из крайности в крайность.
Я думал не изгалятся и попробовать такую схему: Пользователь вводит логин/пароль в флэшке, она отсылает запрос пхп скрипту и если скрипт даёт положительный ответ, то флэшка берёт эти логин/пароль константами и отсылает их с каждым запросом, а скрипт уже обрабатывая запрос, на основе логина и пароля выдаёт соответствующие ответы. В целях безопасности пароль можно пересылать в MD5, как защиту он сниферов. На лицо полное отсутствие сессий, куков и прочей ерунды. Особых минусов в данном алгоритме не вижу... хотя не имея опыта могу чё-то упустить из виду. Про сессии. Я может совсем неправильно понимаю слово "сессия", для этого тут и пишу, чтобы меня научили. Пользователь вводит логин и пароль в флэшке, она отсылает их скрипту в MD5, и если скрипт авторизирует логин/пароль, то заносит данного пользователя в таблицу активных(открывает сессию) и отсылает флэшке номер сессии ID. В таблице активных пользователь имеет поля Login, IP, ID, LastRequestTime и др. При дальнейших запросах флэшка в запросе отсылает скрипту ID и собственно сам запрос. Скрипт сравнивает ID, проверяет соответствие IP отправителя и время запроса, если ID и IP соответствуют, проверяется время последнего и текущего запроса и если разница не превышает установленного TimeOut запрос выполняется, если TimeOut превышен, то пользователь из таблицы активных удаляется(сессия закрывается). Принципиальной разницы в данных алгоритмах не вижу, за исключением того, что второй способ даёт возможность видеть onLine пользователей(хотя и к первому это можно прикрутить по LastRequestTime ). И то, надо будет прикрутить скрипт который будет через небольшое количество времени (1мин например) очищать таблицу активных пользователей по TimeOut. Я не отрицаю, что вышенаписанное может быть полным бредом И кстати, извиняюсь за оффтоп. |
Цитата:
|
Цитата:
|
Мой серверник требовал от меня в каждом запросе ид юзера и сессию. Ид и сессия получались мною после логина.
|
serenkiy, Я Вас слегка не понял... С Ваших слов получается, что если к скриптам вообще никто не обращается, то пользователь так и остаётся в таблице активных с прошедшим таймаутом, а если обращений слишком много, то сервер от каждого обращения загружает себя работой по чистке таблицы. Помоему если поставить скрипт на выполнения раз в минуту это не очень загрузит сервер и таблица будет всегда актуальна.... можно даже раз в 5 минут поставить.
Stargazer, вообще надеялся услышать описания стандартных, "объезженных" алгоритмов работы таких приложений. Уж если что-то создавать и набираться опыта, то не охото чтобы этот опыт был ненужным. GBee, гм... я так и написал вроде... за исключением того, что отсылается только ID сессии. Думаю, нет смысла пересылать ненужные данные, так как по номеру сессии скрипт сможет определить какому пользователю принадлежит текущая сессия и все требуемые для этого переменные. |
ИД не такая уж тяжелая инфа. Кроме того можно сделать проверку - юзер ты свою сессию юзаешь?
|
GBee, ну тут совсем не понимаю.... Если ID сессии проверятся на соответсвие IP, да и сам ID это десятизначный набор букв и цифр, то как может другой пользователь узнать этот ID?? С таблицой активных пользователей работает только скрипт и если даже снифером перехватить ID сессии, то скрипт отклонит запрос с другого IP. Да и вообще как по мне, сниферить ID сессий дело не благодарное. Не военную базу данных создаю.
|
willis83, сессия не уникальна. исключается вероятность совпадения.
|
да ну... какое совпадение? если рандомно генерить десятизначные ID? какое может быть совпадение??? шансы один на миллиарды... этим можно принебречь.
|
принебречь? посмотрим, что будет, когда Ваши деньги будут зависеть от этого "принебречь" :)
понимаете ... вот у Вас есть сгенерированная сессия. я хакер. сижу и обычным скриптом на 10 серверах генерю 10 сессий в секунду и пытаюсь зайти на ваш сервер. в конце концов захожу обязательно. чем больше популярность ресурса, тем проще мне это сделать, так как вероятность угадывания увеличивается с каждым пользователем онлайн. если я добавляю ещё один параметр, уникальный для пользователя, то я тем самым из формулы вероятности убираю "количество_пользователей_онлайн". обычно никто не замарачивается на удаление старых сессий. ну удаляются может рас в день :) |
to BloodHound, маленько теории: генерится код из десяти знаков, могут быть как буквы так и цифры, т.е. на один знак имеем примерно 43 возможных значения. Итого имеем 21611482313284249 вариантов ID из 10 значений. Думаю совпадения можно откинуть сразу, в крайнем случае, если этот проект когда-нибудь приобретёт коммерческую окраску, я допишу функцию которая будет проверять только что сгенеренный ID с уже существующими и при совпадении я повешусь... тьфу ты... генерить повторно ID и опять проверять. По поводу подбора: на счёт чем больше пользователей онлайн - тем больше шансов подбора, согласен, НО! я собираюсь прикрутить алгоритм проверки соответсвия ID сессии к IP компьютера с которого логинился пользователь. Если человек пересел на другую машину, ему придётся залогиниться снова и вы с другого компьютера, даже зная ID активной сессии не сможет ничего сделать. Вы также невнимательно читали мои предыдущие сообщения, в которых я писал, что думаю написать скрипт который будет запускаться через небольшие промежутки времени (5-10) минут и очищать таблицу открытых сессий, если по данной сессии истёк ТаймАут по активности. Если от человека в течении 5 минут не поступали запросы, его сессия автоматически закрывается и запись удаляется из таблицы открытых сессий. В MySQL создаётся таблица открытых сессий(залогиненых пользователей) из 4х полей: sessionID, IP, Login, LastTimeRequest. По логике должно всё получиться
|
А GUID чем не угодил?
|
это чё? Логика подсказывает что UID это unique identification descriptor? Что-то из той же оперы?
|
Ну, а в гугле набрать?
|
mre, то что надо. И как я полагаю в php есть функция для генерации такого ключа?
|
Все же меня не отпускает...
... чувство, что вы создаете велосипед. Вроде у сессий в пхп и так есть время жизни и т.п. без всяких дополнительных таблиц. Не надо ничего при этом запускать каждые н-минут. |
Цитата:
|
GBee, тут я ничего не могу возразить... возможно вы совершенно правы. Полезу дальше читать.
|
Цитата:
Если просто почитать и поучится, то ничего не мешает погуглить или например почитать вот тут Сессии — всегда ли они нужны? и сделать соответствующие выводы. Цитата:
Только смысл "домашную страницу" так защищать? |
willis83, я не понимаю, что Вы мне там втираете за ИД и, что там за варианты. я не смог осознать нормально первых 3 предложения. я говорил не о совпадениях на уровне генерации (это вообще обязательно проверять надо), а о методе подбора.
следом я Вам тупо рассказал отрывок из теории взлома. по поводу ИП ... люди сидящие на джиперазах, модемах, за 3мя проксями и прочими приблудами создающими не стабильный конект, с динамическими ИП, скажут Вам спасибо, за то, что Вы их заставляете логиниться постоянно :) |
duhowka, Во-первых, как я уже писал, интересуют принципы реализации. Когда я создавал тему, у меня было мнение, что есть уже обкатанные алгоритмы по этому направлению, но чем глубже я копаю, тем больше понимаю, что тут "кто как хочет так и ..." делает. Сессии которые предостовляет php тоже не всем нравятся, да и сам я не до конца понял как им задавать таймауты и другие интересующие мелочи. Во-вторых создаётся не домашняя страничка, по крайней мере, в планах нечно большее, да и не в этом дело. Дело в опыте, если уж что-то делать, то делать это нормально. В принципе все мои вопросы можно решить бросив флэш и творить прекрасное в word'e... зачем флэш, скрипты какие-то...
to BloodHound. Ну может я Вас не правильно где-то понял, но то, что я написал, впринципе покрывало Ваши вопросы. А по поводу людей... ну я уж не знаю что тут сказать... думаю, говорить "спасибо" этим людям не привыкать. Кстати с проксями этот приницип должен бы работать, и с прозрачными, и с анонимными, да и динамический IP меняется не каждую минуту, ну если уж такое дело, то перелогинился и сиди дальше до следующего обрыва связи. Хотя, конечно, есть смысл пересмотреть привязку к IP... буду думать. |
Скажу по своему опыту. ( не обязательно хороший вариант)
При логине посылаем логин/пароль, получаем Md5 sid, который хранится в базе. юзер выбирается как по своему статичному id так и по sid, каждые 2 минуты флэшка послает запрос с сидом ( полинг активности) каждые 5 минут по крону запускается демон который смотрит таблицу текущих юзверей и удаляет тех чей таймаут полинга вышел. серверная часть на перл, но думаю с пыхой разницы большой нет. Если создавать сокетное соединение, то смысла в полинге нет ( разве-что параллельно ддля безсокетных клиентов) |
вот и я про автоматисекий скрипт очитски таблицы онлайнеров... и свежая идея про автоматическое отсылания запросов от флешки на обновление значения LastTimeRequest... хотя тоже спорный вариант. А сокетное соединение не все прокси пропускают, и далеко не каждый веб проект требует постоянного обмена данными... а сокеты вроде на это адаптированы.
|
У нас полинг, не только сообщает об активности, кроме того возвращает на флэшку информацию о поступивших платежах, новых сообщениях и.т.п.
|
А как сервер флэшке значения возвращает? Через сокетное соединение?
|
в виде xml
флэка послыает htpp запрос Цитата:
sid получаем при авторизации Цитата:
|
| Часовой пояс GMT +4, время: 12:02. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.