Защита / обфускация запросов JavaScript API - PullRequest
0 голосов
/ 24 мая 2018

У меня есть страница, которая позволяет пользователям смотреть видео на YouTube и автоматически получать вознаграждение, как только видео заканчивается.Это делается с помощью JS API Youtube:

псевдокод:

function videoStoppedPlaying() {
    requestRewardFromServer(); // currently uses an XMLHttpRequest
}

Проблема этого подхода заключается в том, что можно просто открыть консоль браузера и вручную вызвать requestRewardFromServer().

Я уже намазываю код, но это похоже на наложение повязки на дыру в лодке;Это не решает проблему.

Редактировать: Пока единственное решение, которое подходит близко, это использование меток времени.Даже если это не идеальное решение, я приму к сведению совет и постараюсь еще больше запутать код JS.

Есть предложения?

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Ниже мои мысли по этому поводу -

Я чувствую, что вам нужно погрузиться в это на стороне сервера для этого.

  • Установите переменную сеанса на сервере, например video_length = some_length.
  • С момента запуска видео отправьте запрос ajax на сервер и установите некоторую переменную сеанса, как video_started = some_time.
  • Теперь, когда вы звоните requestRewardFromServer(), сравните current time с video_start.Он должен greater than or equal to video_length.

Если он удовлетворяет условию, наградить его или нет.Вы можете сказать, что это не гарантирует, что полное видео будет просмотрено.Да, но, по крайней мере, человек, пытающийся обмануть, должен ждать так долго.

0 голосов
/ 24 мая 2018

Единственное решение, позволяющее контролировать, что пользователь на самом деле смотрит видео, помимо проверки времени окончания - времени начала и продолжительности видео, - фактически проверить, действительно ли пользователь смотрит его.Я полагаю, у вас есть функция, которая может сказать вам, в какой момент видео (или процент) пользователь является.Таким образом, вы можете периодически информировать сервер через javascript об этом: например, каждые 5 секунд или каждые 5% видео клиент должен отправлять запрос xmlhttp на сервер, чтобы сообщить ему об этом.Сервер проверит для клиента, что он получил все запросы в соответствующем порядке (или почти, может быть, он пересмотрел его часть, вам придется выяснить подходящий алгоритм).

Это не легко, это требует некоторой работы, и это не совсем 100% «пуленепробиваемый».Но все, что связано с javascript, все еще может управляться локально.

0 голосов
/ 24 мая 2018

Получая вознаграждение, сохраняйте идентификатор видео Youtube, чтобы получить как минимум одно вознаграждение за видео.Конечно, вы должны следить за идентификаторами видео, иначе вы можете передать любую строку.

Чтобы пользователи не могли получать вознаграждение без просмотра видео, вы можете создать таймер, чтобы получить вознаграждение было бы невозможно.после истечения времени.

...