HTML-форма пост / получить безопасность данных - PullRequest
0 голосов
/ 31 июля 2011

Хорошо, этот вопрос не совсем ясен, потому что я не могу написать его как один вопрос.

У меня есть игра, которую я разрабатываю с использованием javascript, и это в основном многопользовательская игра.Допустим, есть два игрока: игрок темный лорд и ангел

ангел стреляет темный лорд так что темный лорд теряет 1 жизнь.

Теперь происходит то, что я использую ajax, чтобы указать количество жизней, которое darklord теряет.И запрос GET /shootout.php?shooter=darklord&life=-1, поэтому я могу сохранить новую жизнь darklord .

Теперь проблема заключается в том, скажем angel знает о компьютере, и он начинает запрашивать /shootout.php?shooter=darklord&life=-3

Таким образом darklord теряет больше жизни, чем ему следовало бы.Так что angel обманули в игре.

Нет, я не хочу предотвращать такого рода запросы, и я пытаюсь найти способ, чтобы мои запросы могли быть скрыты.Я имею в виду, я знаю, что могу зашифровать URL.Скажем, я зашифровал его так, что запрос должен быть GET /enc.php?e=934ufj30jf для darklord , чтобы потерять жизнь, и различные значения e для ангела, чтобы потерять жизньили получить очко.Однако, чтобы это работало, мне нужно будет отправить данные клиенту, как, например, указать javascript для запроса этого URL.

Теперь пользователь может легко обойти чтение файла, чтобы выяснить,Каковы новые запросы на выполнение действий,

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

Итак, теперь мой вопрос: как мне убедиться, что пользователи не отправляют данные, которые не являются реальными.Как я могу остановить их от обмана?Я подумал, что лучше всего использовать сценарии на стороне сервера, чтобы на самом деле вычислить возможность кого-то застрелить кого-то, а затем сопоставить его с входными данными клиента, но это повлияет на время выполнения МНОГО, поэтому я пытаюсь найти другойспособы, некоторые открытые ключи шифрования ??(проблема в том, что пользователь может поместить данные по своему усмотрению и затем зашифровать их) токены?(проблема в том, что пользователь может поместить данные, как они хотят, а затем поставить текущий токен)

так что любые другие идеи кто-нибудь ??

Ответы [ 5 ]

2 голосов
/ 01 августа 2011

Речь идет не о сокрытии запросов, а о реализации правильного контроля доступа.Ваш пример упоминается как небезопасная прямая ссылка на объект, поскольку манипулирование значениями в строке запроса, относящейся к прямым объектам БД, приводит к непредвиденному результату (см. Топ-10 OWASP для разработчиков .NET, часть 4: Небезопасная прямая ссылка на объект ).

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

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

Наконец, подумайте и о оборотной стороне - если Темный Лорд может передать количество урона какпараметр, что мешает ему повторно выполнить запрос вручную с помощью «life = -100»?Это будет зависеть от специфики того, как выполняется действие атаки, но вы также захотите избежать того, чтобы люди играли в это действие.

1 голос
/ 31 июля 2011

Вы не должны отправлять результат действия. Вы должны отправить действие. то есть ангел стрелять даркангел из точки (7,15) с углом 36 градус

чем проверяет сервер, правильно ли стрелять и уменьшать жизни Темный лорд

1 голос
/ 31 июля 2011

Пару лет назад на этот вопрос был дан отличный ответ. Это фактически относится к Flash, а не к JavaScript, но проблемы безопасности и методы будут применимы и к этой ситуации.

Каков наилучший способ остановить людей, взламывающих таблицу рекордов на основе PHP во флэш-игре

1 голос
/ 31 июля 2011

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

0 голосов
/ 01 августа 2011

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

Хотя это не исключает возможность мошенничества путем написания бота, который играетв игре автоматически (и лучше в игре, чем у любого другого игрока) вы, по крайней мере, убираете откровенную измену разнообразия «Я нанес 10 000 урона, поверьте мне».

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

...