Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Защита setTimeout (https://javascript.ru/forum/misc/42115-zashhita-settimeout.html)

kladbische 13.10.2013 15:50

Защита setTimeout
 
Предположим есть какой нибудь живой чат и в нём:
setTimeout(function(){тут отправляем постом запрос на сервер},3000);

Т.е каждые 3 секунды идут запросики. Теперь юзер плохой, берёт и меняет у себя 3000 на 1, и как результат запросов туча.

Отсюда вопрос. Как исключить такую возможность?

Deff 13.10.2013 15:57

kladbische,
setTimeout прописывать в подгружаемом скрипте, скрипт обфусцировать
По идее, при малом колве пользователей период опроса выставляют по разности времени предыдущего и последующего сообщения(или текущего по гринвичу времени)
с ограничением верхнего и нижнего пределов(к примеру если последнее сообщение пару суток назад)
Напрмер tmax = 15 мин tmin =12cек

kladbische 13.10.2013 16:18

Грубо говоря, если не задействовать что-то на сервере, а всё выполнять на клиенте, то риск в любом случае останется. Вопрос только как его свести к минимуму.

Deff 13.10.2013 16:25

kladbische,
Вы можете вообще скрипт вставить во фрейм чата
Без возможной правки юзером

monolithed 13.10.2013 16:28

Цитата:

Сообщение от Deff
setTimeout прописывать в подгружаемом скрипте, скрипт обфусцировать

Зачем?
Что мешает открыть консоль посмотреть куда идет запрос и сделать что-то вроде:

while (true) $.ajax({url: 'example.com'});


Цитата:

Сообщение от kladbische
Вопрос только как его свести к минимуму

От ситуации, что я описал выше спасет только буртфорс-защита вашего сервера (iptables, nginx и пр.).

Deff 13.10.2013 16:30

monolithed,
Да вродь про минимальные правки говорили

ruslan_mart 13.10.2013 16:51

kladbische, пишите в стиле "ниндзя", чтобы плохой юзер пытаясь изменить Ваш код, просто не смог его понять. :D

var userName = 'lav' + 'retnI';
var Length = 'maximum';
window[Length] = String();
var userPosts = 'test';
var viewProfile = function() {
      //Тут запросы каждые 3 сек.
      alert('Yo!');
}, userID = '_id6000';
userPosts = userPosts.substr(0,3).split(maximum);
userName = userName.split('').reverse().join(maximum);
this.window.window[userPosts.reverse().join(maximum)+userName](viewProfile, +userID.substr(3)/2);

kladbische 13.10.2013 17:02

Цитата:

пишите в стиле "ниндзя"
:write: Это пять!

keen 14.10.2013 11:58

знаю немало людей, которые постоянно пишут в режиме ниндзя :-?
сами того не подозревая..


Часовой пояс GMT +3, время: 11:54.