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

Позвольте мне представить игру, которую я выбираю, это eudemons online.

В eudemons online есть таблица с именем cq_action, где все действия npc указаны в этой таблице. Например, это VIP NPC, где вы каждый день даете вознаграждение своему игроку.

В eudemons cq_action есть 6 столбцов: Id, next_id, id_fail, тип, данные и параметр.

Id — идентификатор первого действия.

next_id — идентификатор следующего действия, если проверка выполнена.

id_fail — Проверка действия идентификатора ошибки для прыжка имеет значение False.

Тип — действие должно быть выполнено NPC, т.е. проверьте, является ли это типом игрока, типом монстра или типом предмета.

data — значение, используемое NPC.

params — дополнительное значение, используемое NPC.

Как вы можете видеть на изображении 1, это идеальная проверка безопасности для каждой задачи/вознаграждения. Судя по изображению, первая часть проверяет, является ли игрок VIP-уровнем выше 6 или нет. Вторая часть проверяет, существует ли задача или нет, и сравните, если он превышает 1 день. Если да, игрок может получить предмет. Просто правильно!.

Вы можете видеть, что в этом коде нет ошибок. Но на самом деле в этом коде есть проблема. Тип 501 — это игрок, который получил предмет, а часть данных — это идентификатор предмета.

Например: в сумке вашего персонажа есть слот на 30 предметов, затем попробуйте очистить 15 слотов. Общее количество предметов, которые нужно получить, составляет 16 предметов. Это означает, что код все еще выполняется, пока вы не получили элемент номер 15, но вы не получили элемент номер 16. После действия элемента номер 16 время начала сбрасывается. Если вы не получили пункт номер 16, это означает, что время никогда не сбрасывалось!! Таким образом, игрок может использовать это, получая предмет много раз!

Вы можете снова сравнить с изображением 1, сброс времени начала назначается перед получением предмета. Если игрок оставил 8 слотов в сумке, он / она не может получить другие предметы, потому что время было сброшено. Лучший способ — реализовать проверку слотов предметов, используя тип 508, параметр 16 означает, что слоты должны быть пустыми (см. изображение 3).

Теперь у нас есть проблема с патчем 2, которая может возникнуть в нашей игре. Наконец, игра eudemons может создавать много персонажей (манекенов), для вашей информации, VIP-статус привязан к идентификатору пользователя, а не к персонажу. Это означает, что каждый манекен может претендовать на 16 предметов каждый день! Итак, как я могу справиться с этим? Лучший способ - дать PP (предмет, который нельзя обменять и выбросить), кроме того, вам нужно установить ограничение по времени для предмета, потому что VIP-обслуживание рассчитывается в месяц. на моем сервере (см. изображение 4).

Тип 503 — это проверка наличия предмета в сумке или нет. Если да, то вы можете успешно получить награду (см. изображение 5). введите 1001, чтобы проверить, является ли это манекеном или нет. (тип == 1 означает, что манекен персонажа).

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

http://myjinonline.com/