Как защитить пароли, хранящиеся в web.config?

Я добавил следующие параметры внутри моего файла web.config, чтобы инициировать вызов API для внешней системы. Поэтому я сохраняю URL-адрес API + имя пользователя + пароль следующим образом:

    

Затем в моем методе действия я буду ссылаться на эти значения при создании веб-клиента следующим образом:

 public ActionResult Create(RackJoin rj, FormCollection formValues) { XmlDocument doc = new XmlDocument(); using (var client = new WebClient()) { var query = HttpUtility.ParseQueryString(string.Empty); foreach (string key in formValues) { query[key] = this.Request.Form[key]; } query["username"] = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiUserName"]; query["password"] = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiPassword"]; string apiurl = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiURL"]; 

Но в этом я буду раскрывать имя пользователя и пароль, и они могут быть захвачены пользователями, поэтому мой вопрос заключается в том, как я могу защитить имя пользователя и пароль API?

Как правило, web.config является безопасным файлом, и IIS не обслуживает его, поэтому он не будет подвергаться действиям пользователей, которые делают запросы на веб-сервер. Веб-сервер обслуживает только файлы определенного типа, а web.config – не один из них.

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

Поэтому, особенно если ваш проект не слишком велик, вы не должны беспокоиться об этом.

Тем не менее, у вас может быть лучший подход, но создание проекта под названием «Ресурсы» и сохранение всей важной информации, такой как настройки, константы, enums и т. Д. Это был бы гладкий и организованный подход.

Если вы пропускаете имя пользователя / пароль через провод (например, в случае безопасного вызова API), вы можете использовать https, чтобы убедиться, что информация, которая находится в путешествии, зашифрована, но которая не имеет никакого отношения к безопасности Файл web.config.

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

Кстати, я бы поставил ваши настройки конфигурации внутри classа, которые затем могут быть введены в ваши controllerы – это упростит модульное тестирование.

Файл web.config – это всего лишь файл в файловой системе, поэтому вы должны (в основном) считать его безопасность так же, как и любой другой файл. Он не будет обслуживаться IIS (если вы не сделаете откровенно безумное изменение конфигурации для IIS – легко проверить, просто попробуйте и запросите его в браузере)

Хорошей практикой является защита вашего сайта (c: / sites / my-site-here или что-то еще) с помощью разрешений папки только пользователю домена веб-сайта, чтобы читать файлы (и, если необходимо, пользователь развертывания), используя обычный файл Windows разрешений

Поэтому нет необходимости шифровать, если у вас есть уверенность в безопасности веб-сервера. Однако, если вы говорите об общем хостинге или продаете код сайта, или исходный код является общедоступным, тогда было бы разумно его зашифровать. это немного немного хлопот.

ниже, в разделе «Шифрование и дешифрование». https://msdn.microsoft.com/en-us/library/zhhddkxy.aspx

Зачем использовать Web.config?

Одно из преимуществ наличия данных в Web.config в отличие от их хранения в Constants, Enums и т. Д. Заключается в том, что вы можете легко изменять данные для разных сред.

Защита данных

Лучший способ защитить данные в Web.config – зашифровать их. Вместо шифрования целых разделов в файле конфигурации, как предложено Joe и user1089766, вы можете просто зашифровать строку пароля и сохранить ее в конфиге.

Извлечение данных

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

 private const readonly string decryptKey = ""; public string GetFromConfig(string key) { var encryptedText = System.Web.Configuration.WebConfigurationManager.AppSettings[key]; var plainText = Decrypt(encryptedText, decryptKey); return plainText; } 

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

PS : Вы можете изменить decryptionKey и соответствующие данные с каждой версией для повышения безопасности.

  • web.config перенаправляет не-www на www
  • Как вы изменяете настройки приложения web.config во время выполнения?
  • В чем разница между customErrors и httpErrors?
  • Использовать преобразование web.config Visual Studio для отладки
  • Поставщик «Microsoft.ACE.OLEDB.12.0» не зарегистрирован на локальном компьютере.
  • Как заставить HTTPS использовать файл web.config
  • Избегайте наследования web.config в дочернем веб-приложении с использованием inheritInChildApplications
  • Как увеличить тайм-аут запроса в IIS?
  • IIS7, web.config, чтобы разрешить только статический обработчик файлов в каталоге / загрузках веб-сайта
  • Раздел конфигурации «system.web.extensions» не может быть прочитан, потому что отсутствует объявление раздела
  • Тайм-аут аутентификации форм против тайм-аута sessionState
  • Interesting Posts
    Давайте будем гением компьютера.