Подтвердить что ты не робот

Защита пароля в исходном коде?

У меня есть пароль в моем коде, который необходим для подключения к серверу sftp. Каков наилучший способ "обфускации" или скрыть его в коде?

Спасибо

4b9b3361

Ответ 1

Не храните пароль в исходном коде, сохраняйте его в защищенном разделе внутри приложения App.Config(или Web.Config).

См. раздел Шифрование разделов конфигурационных файлов с использованием раздела "Защищенная конфигурация" в этом Microsoft Doc

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

Это будет работать, если вы используете несколько серверов:

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

Используя это, если кто-то захочет получить ваш пароль, им придется сначала нарушить безопасность Windows на вашем сервере (не невозможно, но сложнее, чем смотреть на ваш ИЛ для пароля).

Ответ 2

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

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

В общем, единственный удаленный способ сделать это - хранить ключ в отдельном безопасном месте.
Например, вы можете зашифровать его с помощью хэша (не MD5) пароля, а затем попросить пользователя ввести пароль, чтобы вы могли получить хэш. (Хэш и пароль сами не будут храниться нигде, вы должны сделать отдельный хеш для проверки пароля)

Ответ 3

Я действительно считаю использование функции "защищенных разделов" в App.Config или Web.Config более БЕСПЛАТНОЙ, чем сохранение пароля в вашем коде.

Любой, у кого есть доступ к серверу, может дешифровать этот раздел конфигурации так же быстро, как вы его зашифровали, запустив команду decrypt, описанную в статье, каждый из которых цитирует:

aspnet_regiis -pd "connectionStrings" -app "/SampleApplication"

https://msdn.microsoft.com/en-us/library/zhhddkxy.aspx#Anchor_1

Таким образом, эта функция ASP.Net добавляет безопасность только в том случае, если хакер каким-то образом имел доступ к вашему web.config, но не к вашему всему серверу (произошел в 2010 как @djteller, о котором упоминается в комментариях к атаке оракула). Но если у них есть доступ к серверу, вы обнаруживаете в одном вызове cmd. Им также не нужно устанавливать файл ildasm.exe.

Однако хранение фактических паролей в вашем коде - это кошмар обслуживания. Итак, одна вещь, которую я видел, это хранить зашифрованный пароль в вашем web.config и хранить ключ шифрования в вашем коде. Это обеспечивает цель скрывать пароли от случайного просмотра, сохраняя при этом сохраняемость.

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

Между тем я также ищу лучшие ответы на этот шестилетний вопрос...

Ответ 5

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

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

Ответ 6

Вы можете поместить его в зашифрованное значение в файле web.config. Это выглядит не слишком сложно: K scott Allen tutorial http://odetocode.com/blogs/scott/archive/2006/01/08/encrypting-custom-configuration-sections.aspx

Я думаю, что есть сообщение в блоге Scott gu со ссылками на другую информацию. http://weblogs.asp.net/scottgu/archive/2006/01/09/434893.aspx

Ответ 7

Зашифруйте его чем-то сильным, например AES, но, как это подразумевает SLaks, ваш злоумышленник может перепроектировать ваш код и разработать метод и ключ шифрования. Все, что вы делаете, это добавление слоя, в котором содержатся дети из числа script и определенного уровня злоумышленника. Тот, кто действительно хочет это решить, может сделать. Они также могут запустить вашу программу и посмотреть, какой пароль отправлен.

Ответ 8

Не сохраняйте свой пароль в исходном коде.

Прочтите это: http://en.wikipedia.org/wiki/Security_through_obscurity

Нет хорошего пути.

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

Опытный инженер-реверс сумеет взломать его.

Ответ 9

Не так много можно сделать против кого-то, кто действительно хочет ваш пароль. Однако, если это не общедоступное приложение (внутреннее приложение или другое приложение), вы можете просто зашифровать его с помощью симметричного алгоритма шифрования или сделать что-то вроде базы 64, кодирующей его. Вы также можете запустить obfuscator над своим кодом, чтобы сделать его менее очевидным, что там где-то есть пароль.

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

Ответ 10

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