![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Modus ponens
|
Предполагается, что вы знаете, на каком языке пишете
Цитата:
http://en.wikipedia.org/wiki/Client_%28computing%29 Это не я называю, это терминология общего употребления. Знание и понимание этой терминологии необходимо для создание интернет приложений. Это клиент вас не будет спрашивать, смешной вы однако ![]() Мне - даст, я даж может вашу ХТМЛ страницу загружать не буду, зависит по обсоятельствам. Цитата:
__________________
Hell is the possibility of sanity |
|
||||||
|
Регистрация: Mar 2009
Сообщений: 23
|
Цитата:
Цитата:
Цитата:
Цитата:
1) Откуда вы собственно пришли. Обычный юзер не сможет попасть на форму сразу, ему надо будет нажать на страницу с сайта, т.е. реферер. (на странице точно также проверяется сессия, которая стартовала на главной, опять же число 10000-999999) 2) Клиент-Браузер, который подгружал страницу, если его нет или он левый, то простите пролетаете. 3) Была ли физически нажата кнопка. (название переменной вряд ли угадаете, хотя её тоже можно генирировать)))) 4) Передано случайное число для сверки. (10000-999999) Поэтому необходимым вам обстоятельством будет удача в гадании всех этих переменных, может 1 из 1*10 в степени где-нить 6 хотя-бы, случай и будет счастливым, что вряд ли. Цитата:
|
|
|||||
|
Модрон-ветеринар
|
Вам пытаются объяснить, что всю защиту нужно строить на стороне сервера средствами php, флеш тут ни при чем.
Загружаем ваше приложение в FireFox, включаем HttpFox, нажимаем в приложении "отправить", в HttpFox смотрим, копируем, какой полностью запрос пошел, со всем содержимым - URL скрипта, заголовками, данными, содержанием POST-полей и тд. И потом повторяем это запрос с любой частотой и полностью повторив запрос побайтно. Поставьте себе FF и HttpFox, посмотрите, что происходит, когда мы работаем с флешкой, которая общается с серверными скриптами. Многое вам станет ясно и не нужно будет так много лишних слов. 1. Случай 1 - у вас приложение грузится в браузер прямо на странице. Делаем защиту на стороне сервера. Делайте обыкновенную защиту от флуда средствами PHP. Стартуете сесиию при загрузке страницы с флешкой, в своем скрипте и делаете проверку на повтор и т.д. Вам карты в руки, как все организовать. Забудьте о флеше вообще. После загрузки страницы флешка находится на компе пользователя, загружена в браузер. Вам же говорили, что флеш никакие запросы сам не делает, от ее имени с сервером работает браузер (точнее, браузер общается с сервером от имени флеш-плеера). Клиент - это браузер, а не флеш. Флешка лежит себе в кэше, как и другие элементы страницы и при этом она еще нарисована в окне браузера на загруженной странице. делать что-то во флеше для предотвращения флуда - неправильно. 2. Случай 2 - у вас приложение работает отдельно от браузера. Делаем защиту на стороне сервера. Даже если у вас приложение работает не из браузера, а из проектора или stand-alone плеера, все равно всю проверку нужно осуществлять на стороне сервера - организовать эмуляцию сессии искусственно. Как? Например, при первой отправке, когда используете sendAndLoad передавать в ответ флешке сгенерированный уникальный идентификатор и при этом фиксировать время. То есть делать запись в БД - "idr43876r834" - "2009-18-11 21:00:18" При повторном обращении флешка передает полученный id и сервер (скрипт отправки) обязан проверять id и смотреть, можно ли отвечать или нет, достаточно ли времени прошло. Если прошло достаточно времени, то пусть скрипт отправки отвечает "OK" и отправка происходит, а в БД фиксируется новое время для этого id. Стирать полностью запись в БД можно по какому-то таймауту. 3. Случай 3. Делаем защиту от флуда на стороне флешки. Если все-таки пожелаете во флеше все организовать, метод setTimeout() вам поможет. Но, повторюсь, это не будет 100%-й защитой. Просто при первой отправке ставите свойство enabled = false для кнопки "Отправить" и одновременно с этим выставляете таймер. По истечени времени таймер должен будет дернуть функцию, которая опять сделает для кнопки enabled = true и все: send_btn.onRelease = function () { lv.sendAndLoad(.....); //отправляем данные, дергаем серверный скрипт this.enabled = false ; //деактивируем кнопку id = setTimeout(enableBtn, 10000); //через 10 сек. кнопка опять "включится" для использования } function enableBtn() { send_btn.enabled = true ; //активируем кнопку } Последний раз редактировалось mooncar; 10.10.2009 в 01:02. |
|
|||||
|
Modus ponens
|
Кроме того, ставить защиту "от пользователя" - бессмысленно потому, что пользователи, как правило, безобиные, защищать надо от программ, которые притворяются пользователями. HTTFox - довольно безобидная утилита, кроме нее существует масса анализаторов трафика и даже специального софта заточенного для отправки спама куда угодно. HTTP_REFERRER и USER_AGENT подделываются на ура если нужно, это не защита, а филькина грамота. Иногда усложняет жизнь другим, вполне себе легитимным приложениям, а от спаммеров оно как мертвому припарка.
__________________
Hell is the possibility of sanity |
|
|||||||
|
Регистрация: Mar 2009
Сообщений: 23
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Добавлено через 8 минут Цитата:
|
|
|||||
|
Модрон-ветеринар
|
Цитата:
var id:String ; //уникальный id var lv_load:LoadVars = new LoadVars(); input_tf.onSetFocus = function() { //при получении полем фокуса незаметно идет запрос на ID lv_load.load('http://www.site.ru/id_generator.php', lv_load); //запрос на id }; lv_load.onLoad = function(success:Boolean) { if (success) { id = this.id; //получение ответа с новым id } }; var id:String ; var lv_load:LoadVars = new LoadVars(); input_tf.onSetFocus = function() { if (id == undefined) { //если идентификатор еще не получен после запуска флешки lv_load.load('http://www.site.ru/id_generator.php', lv_load); } }; lv_load.onLoad = function(success:Boolean) { if (success) { id = this.id; } }; Еще желательно, наверное, отключить получение полем фокуса при нечаянном нажимании на TAB, чтобы запрос шел только при явной установке курсора на поле, это тоже можно сделать... Последний раз редактировалось mooncar; 10.10.2009 в 14:07. |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 23
|
Цитата:
|
|
|||||
|
Модрон-ветеринар
|
Цитата:
var wasClikced:Boolean = false ; send_btn.onRelease = function () { if (!wasClicked) { lv.sendAndLoad(.....); //отправляем данные wasClicked = true ; id = setTimeout(resetButtonState, 10000); //через 10 сек. триггер wasClikced опять станет = false } else { message_tf.text = 'Слишком частое нажатие, нужно подождать!'; } } function resetButtonState() { wasClicked = false ; message_tf.text = ''; } Последний раз редактировалось mooncar; 30.11.2009 в 03:15. |
|
|||||
|
.
|
Как вариант, решение по управлению flow переложить на плечи контроллера.
var flag:Boolean = false; function controlUIButton():Void { switch (arguments.caller) { case sendButton.onRelease: trace('sendButton.onRelease occured'); if (flag) { trace('Рано нажимать!') return; } flag = true; this.sendData(); break; case closeButton.onRelease: trace('closeButton.onRelease occured'); break; default: throw new Error('Unhandled dispatcher'); } } function sendData():Void { trace('send some data to somewere') } sendButton.onRelease = function():Void { controlUIButton(); }; closeButton.onRelease = function():Void { controlUIButton(); }; |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:27. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|