Как защитить / закодировать Javascript POST-запросы - PullRequest
3 голосов
/ 05 сентября 2011

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

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

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


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

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

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

Ответы [ 5 ]

2 голосов
/ 05 сентября 2011

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

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

1 голос
/ 05 сентября 2011

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

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

Edit:

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

0 голосов
/ 19 ноября 2011

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

0 голосов
/ 05 сентября 2011

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

0 голосов
/ 05 сентября 2011

Использование captcha Wiki CAPTCHA , reCAPTCHA

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

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

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