Как можно препятствовать тому, чтобы поддельные рекорды появились в глобальном высоком списке счета?

Шорткоды WordPress никогда не предназначались для вызова в контексте PHP. Они предназначены для использования в содержании . Возможность вызывать шорткод в PHP - это скорее деталь реализации, чем то, что вы обычно делаете.

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

Или вы можете использовать реальную классовую автозагрузку и $foo = new Foo(); будет работать без какого-либо дополнительного кода.

Так что никто этого не делает (или что-то в этом роде), потому что автозагрузка - это вещь, которая отлично работает.

12
задан Mike Daniels 8 May 2009 в 02:01
поделиться

5 ответов

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

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

Некоторые мысли:

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

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

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

В этот момент вам действительно нужно спросить себя, действительно ли инженерные усилия того стоят. Что делать, если кто-то публикует неверный счет? Что вы на самом деле теряете? Я бы сделал минимум для защиты от ребенка с помощью простого сценария. То есть, не делайте, чтобы ваша оценка была просто:

http://myservice.com/submitscore.aspx?PlayerName=Michael&Score=999999999

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

6
ответ дан 2 December 2019 в 20:19
поделиться

Насколько мне известно, это неразрешимо.

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

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

5
ответ дан 2 December 2019 в 20:19
поделиться

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

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

1
ответ дан 2 December 2019 в 20:19
поделиться

«Другой вариант - отправить повтор игры игрока ... Это не решает проблему»

Правда? Почему бы и нет?

«Вы также должны создать очень сложный повтор, который« доказывает »[счет]».

Вы предлагаете, чтобы кто-то мог подделать повтор? Придумать решение с супер-высокими показателями, не играя в игру? Подделать отметки времени и все такое? Вытащить Дональда Кроухерста ?

Почему бы просто не сыграть в игру, а не пытаться подделать журнал игры?

Или ... если так просто подделать историю игры что приводит к очень высокой оценке, возможно, игра неверно оформлена. Если игра «сложная», человек должен сделать все правильные выборы. Если игра проста, то счет не отражает выбора игрока и является фальшивым.

Подумайте об этом так. Выберите любую игру или вид спорта. Кто-то говорит, что, скажем, Швейцария победила Новую Зеландию в яхтенной гонке. Вы бы бросили им вызов, ища подтверждающие подробности о месте проведения, лодках, командах и отдельных гонках, чтобы убедиться, что это правда. Конечно, они могли подделать это, но если у них есть богатый набор деталей, касающихся гонки, тогда ... как это не «доказательство»?

Выберите любую игру или вид спорта. Кто-то говорит, что, скажем, Швейцария победила Новую Зеландию в яхтенной гонке. Вы бы бросили им вызов, ища подтверждающие подробности о месте проведения, лодках, командах и отдельных гонках, чтобы убедиться, что это правда. Конечно, они могли подделать это, но если у них есть богатый набор деталей, касающихся гонки, тогда ... как это не «доказательство»?

Выберите любую игру или вид спорта. Кто-то говорит, что, скажем, Швейцария победила Новую Зеландию в яхтенной гонке. Вы бы бросили им вызов, ища подтверждающие подробности о месте проведения, лодках, командах и отдельных гонках, чтобы убедиться, что это правда. Конечно, они могли подделать это, но если у них есть богатый набор деталей, касающихся гонки, тогда ... как это не «доказательство»?

6
ответ дан 2 December 2019 в 20:19
поделиться

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

Проверьте исходный код Quake III Arena. Их версия была совершенно дурацкой. К сожалению, сейчас ссылку не помню.

-2
ответ дан 2 December 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: