2011-12-29 4 views
1

У меня есть следующий сценарий: клиенты Android обмениваются данными с сервером PHP через HTTP Post. PHP-сервер обменивается данными с базой данных mySQL и отправляет результат в виде JSON для клиента Android. Я уже говорил об этом: securing connection to php serverЗащита подключения к серверу php без SSL

Заключение заключается в использовании TLS/SSL для обеспечения соединения. К сожалению, мой сервер не поддерживает tls.

Есть ли какой-то другой способ как-то затруднить получение API моего php-сервера, поэтому люди не могут отправлять сообщения через ПК на мой сервер.

Я думал о Gzip, но это будет низкий барьер ...

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

+1

Я думаю, что у вас все еще есть те же проблемы, что и раньше. Сохранение тайны от пользователя. Вы считали, что вынуждаете пользователей создавать учетную запись на вашем сайте и пытаться держать вашу систему под контролем? –

+0

нет, я не хочу, чтобы у пользователя была учетная запись. – tobias

+0

Почему вас волнует, если кто-то видит, как работает ваш веб-API? Если он является открытым, он не должен быть скрытным. Если вы храните личную информацию или другую информацию, которую пользователь считает конфиденциальной, пожалуйста, не запускайте веб-службу, которая позволяет анонимному пользователю получить к ней доступ, не ограничивая доступ к аутентифицированным и авторизованным подключениям (даже если они должны сначала извлеките свой общедоступный ключ шифрования/магическое число/хэширование alg из приложения); Никто не поблагодарит вас за это. Если пользователь заботится о данных, они, вероятно, не будут возражать против использования какой-либо формы авторизации. – Cheekysoft

ответ

3

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

+0

можете ли вы дать понять, как это реализовать? – tobias

+0

не потребует, чтобы сервер уже имел данные, которые отправляет пользователь? хеширование отлично подходит для преобразования строки в короткую уникальную строку, но будет иметь множество перестановок (а также возраст), чтобы преобразовать обратно в исходный текст. или, по крайней мере, это мой опыт с хешированием. – topherg

+0

@cgoddard это будет похоже на это, если я отправлю post-переменные x = 12, y = abc, z = xyz, тогда я мог бы отправить вместе с этими hash = md5 (12abcxyz) все, что равно. сервер получал бы переменные x, y, z и hash, мог бы вычислять один и тот же хэш таким же образом (конкатенировать значения x, y и z в алфавитном порядке), а затем сравнить результаты с хэш-переменной, которая была также отправлен. если это совпадение, ответьте, если нет, не делайте этого. реальное решение могло бы усложниться, конечно, с солью, а что нет. – dqhendricks

1

Вы можете использовать ob_start, ob_get_contents и ob_end_clean, чтобы охватить все данные, которые вы выводящие, а затем использовать некоторый алгоритм шифрования для защиты данных (возможно, с использованием секретного ключа, полученный с помощью вашей собственной функции на основе времени, то есть программа работает на клиенте для дешифрования данных на стороне клиента.

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

Если вы хотите сделать его более изощренным, найдите Mentalis. Они сделали реализацию C# с открытым исходным кодом для сервера SSL, поэтому вы можете использовать некоторые из них, если вам нужно вдохновение.

+1

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

+0

правда, всегда есть. но есть много встроенных функций шифрования, встроенных в php, которые могут сделать все это для вас, просто используйте аналогичный метод для ssl – topherg

+0

, если бы вы использовали хороший и сложный набор однонаправленных функций, то это сделало бы почти невозможным crack, – topherg

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