2010-09-14 2 views
0

У меня есть игра на основе Flash для браузера, которая отправляет оценки пользователей на скрипт php, который хранит оценку и идентификатор пользователя в базе данных.Избегайте CSRF при обслуживании запросов AJAX или Flash

Теперь у меня есть URL, как www.example.com/update.php?score=200 & UID = 234

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

Как я могу запретить кому-либо звонить по указанному выше адресу и обновлять его счет самостоятельно.

ответ

2

Возможно, вы захотите прочитать про «маркерный кряк», содержащий online polling system.

Замените концепцию «отправки голоса» на «отправку оценки», и вы увидите, что любой клиентский элемент управления обязательно сработает.

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

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

По крайней мере, вы должны иметь возможность связывать счетные обновления с конкретным пользователем, чтобы мошенники могли влиять только на собственный счет, а не другие. Я могу только думать о способах связать эффект обмана, например, ограничение скорости, так что если средняя игра составляет N минут, сервер принимает только 60/N баллов за час. Или используйте некоторые другие показатели/период времени. Но для того, что вы описываете как крошечную игру, которая, вероятно, не стоит усилий - тем более, что она ограничивает только проблему, она не решает ее.

0

Вы не можете.

Это уже не вопрос CSRF. Поскольку у вас нет никакой аутентификации, кто-нибудь на земле может обновить оценку всех остальных. Просто невозможно предотвратить это.

Если вас беспокоит безопасность, выполните аутентификацию пользователя. Это, по крайней мере, не позволит злоумышленнику мгновенно обновлять оценки.

Затем исправьте проблему CSRF. С каждым из этих URL-адресов вам нужно добавить уникальный токен.

+0

Спасибо за ответ. Я как бы понял, что это не проблема CSRF. Мне нужно изменить свой вопрос на этот вопрос: Если мне нужно отправить данные из моего флеш-приложения на свой сервер, то как лучше всего безопасно его защитить, чтобы не только кто-то мог отправлять достоверные данные самостоятельно? Я полагаю, что могу зашифровать свои данные, которые отправляет флеш-приложение, а затем расшифровать их на бэкэнд и обновить мою БД только в том случае, если он действителен. Это связано с тем, что интеллектуальный пользователь не может понять, как я шифрую данные. – Paganwinter

+0

Единственный способ сделать это - аутентифицировать пользователей с помощью loginID/пароля. Шифрование данных не является решением, потому что если вам нужно сохранить ключ в файле swf flash, и интеллектуальный пользователь может легко извлечь этот ключ из файла. –

Смежные вопросы