Как защитить / закодировать Javascript POST-запросы

У меня есть игра, в которой мой JavaScript вызывает PHP-скрипты через POST для изменения значений в базе данных. Как я могу помешать кому-то неоднократно дублировать запрос и давать себе миллиард очков?

Сейчас я передаю пароль через sha1() и проверяю, есть ли он на стороне PHP, но это не помешает кому-то повторить запрос.

Я не могу использовать временные метки, потому что время будет пропущено между вызовом (запрос JS POST) и запуском скрипта PHP.


Редактировать:

  • Мой PHP-скрипт не увеличивает значения базы данных (точки = точки + 10), он принимает переданные ему значения и обновляет поле (точки = 300)
  • Я обновляю несколько таблиц по каждому взаимодействию (хорошо каждое взаимодействие, которое приводит к появлению очков) в игре. Один из них отслеживает каждый голос. Эта таблица позволяет пользователю проголосовать только за изображение. Если бы я сначала сделал это обновление, если пользователь попытался повторить этот запрос, результат вернет ошибку, и я могу убить скрипт PHP.

Это достаточная безопасность? Мне все еще нужно беспокоиться о предотвращении дублирования запросов?

Related of "Как защитить / закодировать Javascript POST-запросы"

Похоже, что большая часть этой логики теперь остается на стороне клиента, поэтому вы не можете помешать кому-то отправить «score.php? Score = 1000» несколько раз.

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

Если у вас есть какой-либо идентификатор сеанса, вы можете увеличить количество запросов, которые были запрошены. Однако это не доказательство пули, однако очистка сеансовых файлов cookie позволит повторить этот запрос.

Вам понадобится некоторая форма входа, чтобы кто-то не очистил файлы cookie или даже цикл cURL-скрипта.

Редактировать:

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

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

что GET или POST могут быть легко выполнены клиентом. если вы просто отправляете необработанный счет на сервер, это никогда не будет хорошим. Я никогда не писал игру, где на клиенте возникает такая логика. клиентская сторона должна просто отправлять команды на сервер, и сервер решает, действительно ли это действительная транзакция / состояние. более или менее сервер знает состояние клиента, и клиент просто отражает это. это, пожалуй, единственный верный способ гарантировать, что то, что делает клиент, является законным.

Использовать captcha Wiki CAPTCHA , reCAPTCHA

Кроме того, используйте Session для записи number of repeated requests сделанных моим пользователем на сервер, и increment их на каждом успешном запросе,

Затем заблокируйте пользователя от доступа к вашему скрипту PHP с помощью данных session storage data . PHP СЕССИИ