2016-12-21 2 views
1

Я работаю над очень простой игрой для Android, где витрины пишут приложение для Android почти ничего.Безопасное и короткое подключение Server-Client

Игра будет создана с Unity, поэтому она будет написана на C#. Я надеялся написать серверное программное обеспечение в Python, потому что мне нужно работать над моим знакомством с языком, и я бы хотел, чтобы он работал на малине pi (В основном для доказательства концепции).

Серверу приходится беспокоиться только о одной таблице в одной базе данных. Это будет содержать таблицу «Высокий балл» в MYSQL.

Это фон, теперь на мой вопрос. Что такое безопасный и простой способ получения данных на сервере из приложения и наоборот? Я смотрел на XML based RPC, но хотел посмотреть, есть ли более простой способ сделать это. Приложение просто должно передать оценку, инициалы и хеш для проверки. Сервер просто должен иметь возможность отправить таблицу обратно.

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

ответ

1

Это очень общий общий вопрос, но вот как я об этом думаю. Сделав некоторую работу Unity3d в прошлом, я сделаю попытку.

Во-первых, я бы не использовал MySQL, скорее я бы использовал PostgreSQL или, возможно, базу данных без sql, такую ​​как Couchbase. Couchbase и другие базы данных no-sql популярны среди разработчиков игр, потому что они более масштабируемы и имеют гибкие схемы - по сравнению с традиционными Rdbms. Эта часть, конечно, только мое мнение.

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

На стороне сервера, работа с Python всегда хорошая идея-имхо. Я бы использовал Flask или другие минимальные веб-фреймворки и начал создавать RESTful api, чтобы вы могли просто нажимать HTTP-запросы от клиента Unity3d.

Данные, отправленные туда и обратно между клиентом, будут просто JSON (это компактнее, чем XML), и для Unity3d есть несколько библиотек JSON, просто обязательно получите их специально для Unity, потому что некоторые общие библиотеки C# могут выйти из строя в Unity, если они зависят от Reflection, и в зависимости от целевой платформы.

+0

Спасибо, я думал о SHA1 или MD5. Является ли PostgreSQL довольно легким, если вы знаете MYSQL и MSSQL? Я никогда не использовал ничего, кроме этих двух, но я не знаю, есть ли у него прецедент. Извините за широкий вопрос, я хотел посмотреть, как другие люди справятся с этой ситуацией, не создавая для этого многих ограничений. –

+0

Для такого приложения, как вы описали, MySQL или PostgreSQL было бы более чем достаточно. Postgres - это всего лишь моя любимая. Они являются реляционными базами данных с открытым исходным кодом. Из того, что я прочитал, используя SHA-2 или новее, было бы более безопасно, чем SHA1, но я не специалист по криптографии! –

+0

SHA2 определенно будет более безопасным, поскольку он даст более длинный хеш. Я, вероятно, поеду с этим. (Я только что использовал SHA1 в единстве раньше, чтобы сохранить проверки файлов, поэтому я сказал это). Поскольку хэш будет постоянно меняться, это было бы бесполезно к тому времени, когда оно было расшифровано. Я могу проверить, хотя с hashcat. Спасибо за предложение! –

1

REST api, построенный с использованием рамки Flask, прост и прост в применении.

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

+0

Покупка/Генерация SSL не будет плохой идеей, но она не собирается отправлять какие-либо данные, требующие защиты. Это предотвратит встроенную модификацию, но может не стоить усилий, поскольку они будут работать на Android. –

+0

Хэш с общим секретом, подобный @ alex-g-rice, предлагает гораздо проще реализовать. Я бы тоже держался подальше от md5 - теперь он считается сломанным. SHA-2 намного безопаснее. – edrw

+0

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

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