Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Реализация прав доступа AS3/PHP (http://www.flasher.ru/forum/showthread.php?t=123601)

willis83 06.04.2009 13:25

Реализация прав доступа AS3/PHP
 
Добрый день.
Возникла необходимость прикрутить к одному проекту систему пользователей, админку, но т.к. никогда с этим не сталкивался хочу узнать какие подводные камни могут встретиться и каким лучше путём пойти, оптимальные решения. Тема конечно не маленькая, и относится не только к AS3, но и к PHP. Может кто мануалом каким поделится на эту тему? Я так полагаю без сессий и куков этот вопрос не решить, а опыта работы в этом нет. Есть ли смысл взять уже готовые php скрипты и подстроить под них свой проект?
:confused: :o

duhowka 06.04.2009 19:49

Начну с конца. =) имхо готовых скриптов лучше не брать, хотя решать Вам. Подводные камни есть, и основной камень отсутствие опыта. Ссылки давать не вижу смысла,их будет просто очень много. Гугл должен всегда (ну или почти всегда) подсказать. Используем связку AS3+PHP+MySQL и все. =)

willis83 06.04.2009 21:30

на счёт связки AS3/PHP/MySQL в приницпе понятно. Вопросов в данный момент очень много и вываливать их все тут смысла нет. Ну основные 2 вопроса на данный момент это, пожалуй, сессии и куки. Я полагаю что без сессий вся система будет не полноценна в приницпе, а вот от куков на первых этапах можно и отказаться, они же не влияют на поддержание сессии? Как я понимаю сессия с пользователем держится по таймауту активности и основной плюс куков это отсутствие необходимости вводу логина/пасса при обращениях через определённое время?

Мечтатель 06.04.2009 21:38

Вместо куков, если у Вас весь проект держится на Flash-технологии, Вы можете использовать класс SharedObject, он гораздо более мощный нежели php-куки. По сессиям Вам нужно читать php.su.

Добавлено через 1 минуту
и для чего Вам нужны сессии, определять находится ли пользователь online?

willis83 07.04.2009 01:46

Мечтатель, ну вообще, в данный момент меня интересует сам приницип реализации алгоритма. А полное отсутствие опыт в этих вопросах кидает из крайности в крайность.
Я думал не изгалятся и попробовать такую схему: Пользователь вводит логин/пароль в флэшке, она отсылает запрос пхп скрипту и если скрипт даёт положительный ответ, то флэшка берёт эти логин/пароль константами и отсылает их с каждым запросом, а скрипт уже обрабатывая запрос, на основе логина и пароля выдаёт соответствующие ответы. В целях безопасности пароль можно пересылать в MD5, как защиту он сниферов. На лицо полное отсутствие сессий, куков и прочей ерунды. Особых минусов в данном алгоритме не вижу... хотя не имея опыта могу чё-то упустить из виду.
Про сессии. Я может совсем неправильно понимаю слово "сессия", для этого тут и пишу, чтобы меня научили. Пользователь вводит логин и пароль в флэшке, она отсылает их скрипту в MD5, и если скрипт авторизирует логин/пароль, то заносит данного пользователя в таблицу активных(открывает сессию) и отсылает флэшке номер сессии ID. В таблице активных пользователь имеет поля Login, IP, ID, LastRequestTime и др. При дальнейших запросах флэшка в запросе отсылает скрипту ID и собственно сам запрос. Скрипт сравнивает ID, проверяет соответствие IP отправителя и время запроса, если ID и IP соответствуют, проверяется время последнего и текущего запроса и если разница не превышает установленного TimeOut запрос выполняется, если TimeOut превышен, то пользователь из таблицы активных удаляется(сессия закрывается).
Принципиальной разницы в данных алгоритмах не вижу, за исключением того, что второй способ даёт возможность видеть onLine пользователей(хотя и к первому это можно прикрутить по LastRequestTime ). И то, надо будет прикрутить скрипт который будет через небольшое количество времени (1мин например) очищать таблицу активных пользователей по TimeOut. Я не отрицаю, что вышенаписанное может быть полным бредом
И кстати, извиняюсь за оффтоп.

Stargazer 07.04.2009 02:09

Цитата:

Сообщение от willis83 (Сообщение 811415)
не отрицаю, что вышенаписанное может быть полным бредом

Не бред. Написано правильно. Что такое "сессия"? Это, по сути, ваш сетевой идентификатор плюс сопутствующие данные в рамках одного сайта. Технически вы можете реализовать как хотите. Опираться на сессии php, если у вас полностью флешевый сайт, похоже, смысла мало.

serenkiy 07.04.2009 03:21

Цитата:

Сообщение от willis83 (Сообщение 811415)
. И то, надо будет прикрутить скрипт который будет через небольшое количество времени (1мин например) очищать таблицу активных пользователей по TimeOut.

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

GBee 07.04.2009 08:50

Мой серверник требовал от меня в каждом запросе ид юзера и сессию. Ид и сессия получались мною после логина.

willis83 07.04.2009 11:03

serenkiy, Я Вас слегка не понял... С Ваших слов получается, что если к скриптам вообще никто не обращается, то пользователь так и остаётся в таблице активных с прошедшим таймаутом, а если обращений слишком много, то сервер от каждого обращения загружает себя работой по чистке таблицы. Помоему если поставить скрипт на выполнения раз в минуту это не очень загрузит сервер и таблица будет всегда актуальна.... можно даже раз в 5 минут поставить.
Stargazer, вообще надеялся услышать описания стандартных, "объезженных" алгоритмов работы таких приложений. Уж если что-то создавать и набираться опыта, то не охото чтобы этот опыт был ненужным.
GBee, гм... я так и написал вроде... за исключением того, что отсылается только ID сессии. Думаю, нет смысла пересылать ненужные данные, так как по номеру сессии скрипт сможет определить какому пользователю принадлежит текущая сессия и все требуемые для этого переменные.

GBee 07.04.2009 12:18

ИД не такая уж тяжелая инфа. Кроме того можно сделать проверку - юзер ты свою сессию юзаешь?

willis83 07.04.2009 13:03

GBee, ну тут совсем не понимаю.... Если ID сессии проверятся на соответсвие IP, да и сам ID это десятизначный набор букв и цифр, то как может другой пользователь узнать этот ID?? С таблицой активных пользователей работает только скрипт и если даже снифером перехватить ID сессии, то скрипт отклонит запрос с другого IP. Да и вообще как по мне, сниферить ID сессий дело не благодарное. Не военную базу данных создаю.

BlooDHounD 07.04.2009 13:33

willis83, сессия не уникальна. исключается вероятность совпадения.

willis83 07.04.2009 13:52

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

BlooDHounD 07.04.2009 14:55

принебречь? посмотрим, что будет, когда Ваши деньги будут зависеть от этого "принебречь" :)

понимаете ... вот у Вас есть сгенерированная сессия. я хакер. сижу и обычным скриптом на 10 серверах генерю 10 сессий в секунду и пытаюсь зайти на ваш сервер. в конце концов захожу обязательно. чем больше популярность ресурса, тем проще мне это сделать, так как вероятность угадывания увеличивается с каждым пользователем онлайн. если я добавляю ещё один параметр, уникальный для пользователя, то я тем самым из формулы вероятности убираю "количество_пользователей_онлайн".

обычно никто не замарачивается на удаление старых сессий. ну удаляются может рас в день :)

willis83 07.04.2009 15:22

to BloodHound, маленько теории: генерится код из десяти знаков, могут быть как буквы так и цифры, т.е. на один знак имеем примерно 43 возможных значения. Итого имеем 21611482313284249 вариантов ID из 10 значений. Думаю совпадения можно откинуть сразу, в крайнем случае, если этот проект когда-нибудь приобретёт коммерческую окраску, я допишу функцию которая будет проверять только что сгенеренный ID с уже существующими и при совпадении я повешусь... тьфу ты... генерить повторно ID и опять проверять. По поводу подбора: на счёт чем больше пользователей онлайн - тем больше шансов подбора, согласен, НО! я собираюсь прикрутить алгоритм проверки соответсвия ID сессии к IP компьютера с которого логинился пользователь. Если человек пересел на другую машину, ему придётся залогиниться снова и вы с другого компьютера, даже зная ID активной сессии не сможет ничего сделать. Вы также невнимательно читали мои предыдущие сообщения, в которых я писал, что думаю написать скрипт который будет запускаться через небольшие промежутки времени (5-10) минут и очищать таблицу открытых сессий, если по данной сессии истёк ТаймАут по активности. Если от человека в течении 5 минут не поступали запросы, его сессия автоматически закрывается и запись удаляется из таблицы открытых сессий. В MySQL создаётся таблица открытых сессий(залогиненых пользователей) из 4х полей: sessionID, IP, Login, LastTimeRequest. По логике должно всё получиться

mre 07.04.2009 15:45

А GUID чем не угодил?

willis83 07.04.2009 16:16

это чё? Логика подсказывает что UID это unique identification descriptor? Что-то из той же оперы?

mre 07.04.2009 16:26

Ну, а в гугле набрать?

willis83 07.04.2009 16:38

mre, то что надо. И как я полагаю в php есть функция для генерации такого ключа?

GBee 07.04.2009 16:46

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

mre 07.04.2009 16:55

Цитата:

Сообщение от willis83 (Сообщение 811551)
mre, то что надо. И как я полагаю в php есть функция для генерации такого ключа?

Надо полагать, есть :)

willis83 07.04.2009 16:56

GBee, тут я ничего не могу возразить... возможно вы совершенно правы. Полезу дальше читать.

duhowka 07.04.2009 17:05

Цитата:

Сообщение от willis83 (Сообщение 811415)
Мечтатель, ну вообще, в данный момент меня интересует сам приницип реализации алгоритма....

Так давайте все таки определимся, что в итоге-то надо?
Если просто почитать и поучится, то ничего не мешает погуглить или например почитать вот тут Сессии — всегда ли они нужны? и сделать соответствующие выводы.
Цитата:

Сообщение от willis83 (Сообщение 811415)
В целях безопасности пароль можно пересылать в MD5, как защиту он сниферов.

Умилило. Если уж Вы так заморачиваетесь, используете htpps, да еще лучше сразу с SSL3.0 работать. =)
Только смысл "домашную страницу" так защищать?

BlooDHounD 07.04.2009 17:07

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

по поводу ИП ... люди сидящие на джиперазах, модемах, за 3мя проксями и прочими приблудами создающими не стабильный конект, с динамическими ИП, скажут Вам спасибо, за то, что Вы их заставляете логиниться постоянно :)

willis83 07.04.2009 20:54

duhowka, Во-первых, как я уже писал, интересуют принципы реализации. Когда я создавал тему, у меня было мнение, что есть уже обкатанные алгоритмы по этому направлению, но чем глубже я копаю, тем больше понимаю, что тут "кто как хочет так и ..." делает. Сессии которые предостовляет php тоже не всем нравятся, да и сам я не до конца понял как им задавать таймауты и другие интересующие мелочи. Во-вторых создаётся не домашняя страничка, по крайней мере, в планах нечно большее, да и не в этом дело. Дело в опыте, если уж что-то делать, то делать это нормально. В принципе все мои вопросы можно решить бросив флэш и творить прекрасное в word'e... зачем флэш, скрипты какие-то...
to BloodHound. Ну может я Вас не правильно где-то понял, но то, что я написал, впринципе покрывало Ваши вопросы. А по поводу людей... ну я уж не знаю что тут сказать... думаю, говорить "спасибо" этим людям не привыкать. Кстати с проксями этот приницип должен бы работать, и с прозрачными, и с анонимными, да и динамический IP меняется не каждую минуту, ну если уж такое дело, то перелогинился и сиди дальше до следующего обрыва связи. Хотя, конечно, есть смысл пересмотреть привязку к IP... буду думать.

Котяра 07.04.2009 22:33

Скажу по своему опыту. ( не обязательно хороший вариант)
При логине посылаем логин/пароль, получаем Md5 sid, который хранится в базе. юзер выбирается как по своему статичному id так и по sid, каждые 2 минуты флэшка послает запрос с сидом ( полинг активности) каждые 5 минут по крону запускается демон который смотрит таблицу текущих юзверей и удаляет тех чей таймаут полинга вышел. серверная часть на перл, но думаю с пыхой разницы большой нет.
Если создавать сокетное соединение, то смысла в полинге нет ( разве-что параллельно ддля безсокетных клиентов)

willis83 08.04.2009 01:02

вот и я про автоматисекий скрипт очитски таблицы онлайнеров... и свежая идея про автоматическое отсылания запросов от флешки на обновление значения LastTimeRequest... хотя тоже спорный вариант. А сокетное соединение не все прокси пропускают, и далеко не каждый веб проект требует постоянного обмена данными... а сокеты вроде на это адаптированы.

Котяра 08.04.2009 11:09

У нас полинг, не только сообщает об активности, кроме того возвращает на флэшку информацию о поступивших платежах, новых сообщениях и.т.п.

willis83 08.04.2009 12:03

А как сервер флэшке значения возвращает? Через сокетное соединение?

Котяра 08.04.2009 13:24

в виде xml
флэка послыает htpp запрос
Цитата:

polling.php?sid=md5
в ответ получает сгенеренную xml
sid получаем при авторизации
Цитата:

login.php?name=name&pass=pass;


Часовой пояс GMT +4, время: 12:02.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.