2016-12-17 4 views
0

У меня вопрос, на который я нахожусь. Хорошо, это для моей игры в Unity3D.Unity3D to PHP Проблемы безопасности

Чтобы это имело смысл с точки зрения того, что люди обычно играют. Допустим, у игрока 500 золотых на их счете (сохранено в базе данных). И игрок зарабатывает 243 золота, выполняя какую-то задачу, как игра (Unity3D) сообщает файлу PHP, который они заработали специально 243 Gold?

Потому что здесь проблема, В Unity3D есть класс под названием WWW. Позволяет отправлять некоторую строку в файл PHP.

int currentGold; 
string goldToSend = currentGold.ToString(); // Only using that for example. 

WWWForm form = new WWWForm(); 
form.AddField("NameOfPostRequestInPHPFile",goldToSend); 
WWW www = new WWW("website.com/PHPFile.php", form); 

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

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

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

Позволяет сказать

if(sentGold == 243){ 
string hash = hash01; 
// Change it to hash1000 (to get 1000 gold). 
} 
if(sentGold == 1000){ 
string hash = hash1000; 
} 

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

Я знаю, что невозможно полностью остановить взлом. Но в то же время, если я что-то сделаю, я хочу сделать это правильно, а не наполовину, если вы понимаете, что я имею в виду?

Если вы дошли до этого момента, прочитав мое справочное сообщение. Я очень ценю то время, которое вы прочитали, Это много значит для меня.

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

+0

Вы не сможете использовать метод, о котором говорите. Сервер не проверяет достоверность передаваемой информации. Вам нужно будет проверить информацию, передаваемую клиентом. Например, если золото является точкой появления, проверяя, что точка появления в базе данных и какие предметы и количество находятся в этой точке появления. – spencdev

ответ

1

Вы не можете доверять клиенту? Верный.
Но ...
Вы - капитан этого корабля. Таким образом, ваш сервер должен быть достаточно умным, чтобы обнаруживать обман.
Если задание в игре дает 200 золотых, вы можете отправить ссылку на эту задачу вместе со значением (200, «SomeTask»). Теперь, если клиент пытается отправить (10000, «SomeTask»), сервер будет считать его обманом. Вы можете сказать, что клиент может зарабатывать переменное золото на основе того, насколько хороши они выполняют задачу, в этом случае вы можете иметь максимальное значение для каждой задачи и проверять перед добавлением золота в базу данных.

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

Для примера:

Database: 2000 gold -> Game: 2000 gold 

Game: POST (130,"pickupjewel"); 

Databse: if (130 <= MaxValue("pickupjewel")) [TRUE] -> SUCCESS 
Database: 2130 gold -> Game: 2130 gold 


Game: POST (999999,"pickupjewel"); 

Databse: if (999999<= MaxValue("pickupjewel")) [FALSE] -> FAILURE 
Database: 2130 gold -> Game: 2130 gold 

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

+0

Спасибо за комментарий, взяв все это и надеюсь получить что-то из этого. Еще раз спасибо! – n1warhead

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