Задать вопрос
@ilyavii
Программист начального уровня)

API для сайта и приложения, как сделать?

Привет! У меня есть приложение, которое нужно активировать ключом. И сайт, с директорией, где хранятся эти ключи. Ключи я сам добавляю в эту директорию, а в программе сверяется этот ключ с uuid компьютера. И мне нужно сделать так, что бы при вводе ключа программа делала запрос .php файлу, который будет проверять наличие данного ключа и выводить сообщение, "этот ключ уже зарегестрирован и т.д"(это я уже сделал). но дело в том, что если я делаю get запрос в программе к этому файлу(например http://сайт.ru/api.php?key=ключ, который нужно проверить на существование), то каждый человек может отследить данный запрос и проверять наличие ключа через .php файл, самостоятельно. Можно ли сделать так, чтобы данное действие могла делать только моя программа?
  • Вопрос задан
  • 676 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
orlov0562
@orlov0562 Куратор тега PHP
I'm cool!
Я бы не усложнял и сделал бы дополнительную проверку контрольной суммы в передаваемом хеше ключа.

- Не предавал бы ключ в открытом виде а шифровал бы его во что-то типа
key = md5(ключ + соль)

- Дальше бы генерил доп строку, на основе данных доступных обоим сторонам запроса, например:
check = md5(внешний ip)

- Дальше бы по спец алгоритму о котором знаю только я и оба софта, смешивал бы значение key и check. Например, первые 5 символов в check добавлял бы через букву в key. Для особой паранойи можно способ шифрования сделать от версии ПО или вообще предварительным запросом к серверу

- На серваке опять восстанавливал бы key и часть check, и сравнивал бы с сгенерированным check на сервере.

- Если check совпал, тогда бы сверял key со своей базой

Даже в случае перехвата, алгоритм подобрать будет сложно. А брутфорс на серваке можно отслеживать. Разумеется от дизассемблирования, это не спасет.. но тот кто может позволить себе понять алгоритм шифрования по исходникам ассемблера (т.е. разобраться как генерится check и что используется за соль), вряд ли не сможет просто вырубить запрос к серверу или ограничения...

-
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@murlogen
Во первых, https, а вовсе не http
Во вторых если ты хочешь чтобы тебе помогли - сформулируй яснее что именно тебя смущает.
Как злодеи отследят запрос?
Ответ написан
Комментировать
alsopub
@alsopub
Во-первых, можно использовать https, в дополнение можно ssl pinning
Во-вторых, а что страшного в том что узнают адрес, где можно проверить ключ?
Если ключ вида 1234-5678-9012-3456-7890 то перебрать все варианты не получится, плюс можно ограничить частоту проверки и/или общее число проверок с одного IP.
Или же вы беспокоитесь о другом - о подмене вашего сервера (через hosts) и активации программы любым ключом?
Ответ написан
Комментировать
supervaleha
@supervaleha
Web-development
Поддерживаю Виталий Орлов. В Вашем случае наиболее легкое и быстрое решение - передача в неявном виде.

Отсылаете хэш ключа с солью, а на сервере ищите файл, название которого + все та же соль = полученному ключу.

Сломать можно все и всегда, вопрос, стоит ли городить в конкретном случае невероятный огород избыточно усложненных действий. : )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы