Ввод ключа и секрета API в мой аддон Firefox

Я разрабатываю надстройку Firefox и хочу интегрироваться с какой-либо сторонней службой, которая использует oauth для аутентификации. Поэтому у меня есть ключ и секрет API, которые мне нужно использовать для связи с их API. Если бы я включил свой ключ API и секрет в исходный код аддона, смогли бы люди (пользователи аддона и т. д.) вычислить ключ и секрет? Есть ли в SDK какой-то механизм для хранения секретов в аддонах?

Альтернатива, которую я использовал в своем доказательстве концепции, заключается в том, что я прошу пользователя сгенерировать ключ и секрет и ввести их в настройки. Это работает, но не очень удобно для пользователя.

Редактировать:

Чтобы уточнить, в ответ на комментарий, я не стремлюсь хранить секреты вне исходного кода, я ищу способ использовать свои собственные секреты в моем аддоне и держать их в секрете для общественности. Таким образом, они будут отправлены всем, кто использует мой аддон.


person Mosselman    schedule 01.12.2015    source источник
comment
Вы можете найти эту тему ниже полезной control">Стратегия сохранения секретной информации, такой как ключи API, вне системы контроля версий?   -  person O-mkar    schedule 01.12.2015
comment
@O-mkar спасибо за ответ. Моя проблема, однако, не в системе управления версиями, а в производственном коде. Дополнения для Firefox написаны на Javascript+HTML+CSS, поэтому мои ключи API будут в рабочем производственном коде (который в некоторой степени доступен для проверки пользователями).   -  person Mosselman    schedule 01.12.2015
comment
если вы нашли это полезным, пожалуйста, оцените мой комментарий :)   -  person O-mkar    schedule 01.12.2015
comment
@O-mkar O-mkar Как я уже сказал, моя проблема не в системе управления версиями :)   -  person Mosselman    schedule 01.12.2015
comment
Это тоже проблема, с которой я столкнулся. Одним из решений, которое я использовал, было создание веб-сайта. Я бы отправил ему какой-нибудь сгенерированный ключ, тогда на сайте он проверит, правильно ли сделан ключ. Этот ключ работает только один раз. Если сайт считает, что ключ сделан правильно, он возвращает ключ. Я подумал, что это хлопотно, поэтому просто бросил свой ключ в свои аддоны. Я знаю, что, вероятно, мне не следует продолжать это.   -  person Noitidart    schedule 01.12.2015
comment
@Noitidart Я также рассматривал возможность запуска собственного веб-сайта между ними, но не так, как вы предлагаете. Это звучит интересно, но, как вы сказали, очень громоздко с моей стороны. В этом случае поиск способа автоматизировать ввод сложно выглядящих API-ключей (для «обычных» пользователей), вероятно, будет более плодотворным. Также я хотел бы поблагодарить вас за ваши надстройки с открытым исходным кодом (или, по крайней мере, доступные) на github. Так совпало, что в последние несколько дней я смотрел на них. (При условии, что у вас такое же имя пользователя на github;)).   -  person Mosselman    schedule 02.12.2015


Ответы (1)


Если бы я включил свой ключ API и секрет в исходный код аддона, смогли бы люди (пользователи аддона и т. д.) вычислить ключ и секрет? Есть ли в SDK какой-то механизм для хранения секретов в аддонах?

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

No.

Альтернатива, которую я использовал в своем доказательстве концепции, заключается в том, что я прошу пользователя сгенерировать ключ и секрет и ввести их в настройки. Это работает, но не очень удобно для пользователя.

Затем автоматизировать процесс, чтобы сделать его более удобным для пользователя?

person the8472    schedule 02.12.2015
comment
Спасибо за ваш ответ. Я согласен с вашим первым пунктом в определенной степени, но это не так черно-белое. Скомпилированные приложения могут содержать секреты, к которым пользователь, даже с «полным доступом», не может получить доступ. Однако, как вы говорите, природа Firefox (источник надстроек открыт для пользователей) действительно делает невозможным сохранение секретов от пользователя. Что касается вашего второго предложения, я попытаюсь сделать это. Пользователи должны были бы войти в службу, к которой я подключаюсь, но я мог бы автоматизировать захват ключей со страницы, которая их показывает, с помощью некоторого типа сценария содержимого. - person Mosselman; 02.12.2015
comment
Я подожду некоторое время, прежде чем дать вам ответ - person Mosselman; 02.12.2015
comment
С теоретико-информационной точки зрения и с точки зрения компьютерной безопасности это черно-белое, как я и сказал. Вы говорите, что люди - цитирую - не могут получить к нему доступ, это неправда. Это может быть трудно сделать, так как требует немного больше, чем тривиальные усилия, но это не делает это невозможным. Примером могут служить ключи расшифровки Blu-Ray. Они были извлечены из скомпилированных и запутанных программных проигрывателей с помощью дампов памяти и отладчиков. - person the8472; 02.12.2015
comment
Да, ты прав. В том же смысле можно сказать, что бросить камень в луну просто «трудно». Если у вас не получилось, значит, вы просто недостаточно сильно бросили. Что в некотором смысле верно, это просто зависит от вашего определения «бросания» и «метателя». В случае моего аддона, возможно, я нашел бы скомпилированный «секрет» достаточно секретным, но, учитывая все это, вероятно, лучше всего, чтобы люди генерировали свои собственные ключи и секреты API и каким-то образом автоматизировали их ввод в хранилище моего аддона. Таким образом, нет секретов, которые нужно защищать. - person Mosselman; 02.12.2015
comment
Вы не ослабили свои требования. Вы только спросили, могут ли люди это сделать. Если вы хотите получить более точный ответ в области компьютерной безопасности, вам необходимо указать более точную модель угрозы, которая включает в себя возможности потенциального злоумышленника и то, от чего вы хотите защититься и в какой момент вы сдаетесь. И в отличие от доставки камня на Луну, извлечение констант из скомпилированного кода является гораздо более простой задачей, где-то между минутами и днями, если вы являетесь экспертом в области реверс-инжиниринга. Так что ваша аналогия с камнем и луной — сильное преувеличение в отношении сложности. - person the8472; 02.12.2015