При разработке приложения для Android с помощью facebook вам необходимо загрузить хеш-ключ вашего приложения на свой сайт. При этом они утверждают, что они могут проверить, что вызовы на их серверы фактически сделаны из вашего приложения.
Я прочитал этот вопрос Как Facebook проверяет мобильные приложения, но на самом деле это не обеспечивает фактическое внедрение этого. Я попытался изучить исходный код библиотеки facebook, но не смог понять.
Какие данные отправляются из приложения android и под каким шифрованием можно проверить этот хэш на сервере? Является ли метод, реализованный в facebook, безопасным?
Если это так, и он может быть реализован на любом сервере, я мог бы использовать его для проверки на моем сервере, что мои приложения не были перекомпилированы с другим кодом (что обычно случается довольно часто:()
В настоящее время я реализую эту идею следующим образом:
Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures;
for (Signature sig : sigs) {
verifyInServer(sig.hashCode());
}
Где verifyInServer является псевдокодом для проверки, сделанной против сервера, с сохраненным значением подписей. На данный момент это работает, но я не уверен, что это безопасно, и я бы предпочел проверить хэш-ключ (что его публикация), чем эти данные подписи (что я не уверен, что он частный и не spoofable пользователем).