2016-09-19 4 views
5

Возможно, я переусердствовал.Защита веб-авиза от вызова за пределами браузера

У меня есть простая javascript-игра, работающая в браузере (головоломки и т. Д.), И когда пользователь выигрывает, очки отправляются в брандмауэр laravel в зависимости от того, как быстро они это завершают.

Когда пользователь входит в систему, создается типичный сеанс, и когда точки отправляются через запрос POST, это также csrf и JWT.

Возможно ли открыть консоль chrome dev и получить URL-адрес, затем скопировать crsf, cookie или JWT и отправить точки на бэкэнд без фактического воспроизведения игры?

Apis, вызываемый за пределами браузера, не соблюдает политики доступа-Controll-Allow-Origin.

Может ли кто-нибудь объяснить, что мешает пользователям делать это или как предотвратить это действие и убедиться, что пользователи действительно играют в игру, чтобы заработать очки?

+0

Возможно, вы можете проверить, установлен ли заголовок User-Agent как дополнение. Но это также можно добавить без использования веб-браузера. – Bora

ответ

2

Одним из подходов может быть организация игры поэтапно. То есть, используйте несколько элементов <form>.

Начальная страница будет содержать ровно один элемент <form> с ровно одной частью игры.

Только после отправки этой формы сервер отправляет следующий <form> элемент на document.

Элемент <form>, имеющий элемент <input type="submit"> с уникальным идентификатором; например, временную метку, установленную в атрибуте name и сгенерированную на сервере; который истекает в течение наибольшего времени, необходимого для завершения <form> на этом этапе в процессе игры.

Если пользователь отправляет <form> без уникального идентификатора, или этап <form> представлен за пределами диапазона максимального времени, необходимого для завершения <form>, представляющих собой шаг в рамках процесса, пользователь лишен правами «выигрыш» текущая игру, или смотреть игра в будущем для заданного количества времени.

+0

Интересно, но разве это все еще довольно легко манипулировать для кого-то с небольшим опытом программирования? – Orane

+0

@Orane. В каких способах можно было бы манипулировать? – guest271314

+0

@Orane _ "но разве это будет довольно легко манипулировать для кого-то, у кого есть опыт программирования?" _ Как серверная сторона может быть уверен в том, что клиент делает в браузере или отправляется на сервер? Возможно, подумайте о том, чтобы поставить Bounty на вопрос; собрать ряд возможных интерпретаций и подходов к будущей проблеме, описанной в Вопросе? – guest271314