2012-04-27 4 views
7

В моем случае я использую API Dropbox. В настоящее время я храню ключ и секрет в файле JSON, так что я могу gitignore его и сохранить его из репо Github, но, очевидно, это не лучше, чем иметь его в коде с точки зрения безопасности. Было много вопросов о защите/обфускации Python раньше (обычно по коммерческим причинам), и ответ всегда «Do not, Python не предназначен для этого».Как хранить ключи API в приложении Python?

Таким образом, я не ищу способ защитить код, а просто решение, которое позволит мне распространять мое приложение, не раскрывая мои данные API.

+0

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

+0

Если кто-то запускает программу на своем компьютере, а программа использует ключ, она практически раскрывается. Не нужно гениально запускать WireShark, позволить программе подключаться и фильтровать захват для соединений с Dropbox (или какой-то другой критерий - худший случай, который вы копаете через несколько сотен пакетов). И просто запутывание программы не купило бы вам ничего, потому что вы не можете изменить строковый литерал, который является ключом API, или это было бы бесполезно для вашей программы. – delnan

+0

@delnan Но будет ли отображаться ключ API в HTTP-трафике? Dropbox делает все по SSL. Я не знаю, используют ли они переменные GET или POST или просто помещают их в заголовки HTTP-запроса. Являются ли эти вещи зашифрованными в запросе HTTPS или просто телом запроса? – espekia

ответ

2

Обычный текст. Любая попытка обфускации бесполезна, если код распределяется.

2

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

Запросы от Python APP идут в прокси-сервер, а прокси-сервер выполняет запросы API Dropbox и возвращает ответ на приложение Python. Таким образом, ваш ключ api будет находиться в прокси-сервере, на котором вы размещаете. Доступ к прокси-серверу можно контролировать любыми способами, которые вы предпочитаете. (Например, имя пользователя и пароль)

+0

В общем, это хорошее решение, но в моем случае я решил использовать Dropbox специально, потому что у меня нет ни ресурсов, ни желания разместить мой собственный сервер, я просто хотел сосредоточиться на создании клиента. – espekia

1

Есть два способа в зависимости от сценария:

При разработке веб-приложений для конечных пользователей, просто разместить его таким образом, что ваш ключ API не приходит к раскрытию , Таким образом, сохраняя его gitignored в отдельном файле, и только загружать его на ваш сервер должно быть хорошо (пока на вашем сервере нет нарушения). Любая обфускация не добавит никакой практической пользы, она просто даст ложное ощущение безопасности.

Если вы разрабатываете инфраструктуру/библиотеку для разработчиков или клиентское приложение для конечных пользователей, попросите их самостоятельно создать ключ API.

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