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

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

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

<appSettings>
    <add key="ApiURL" value="https://...../servlets/AssetServlet" />
    <add key="ApiUserName" value="tmsservice" />
    <add key="ApiPassword" value="test2test2" /> 

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

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?

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 5

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

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

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

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

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

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

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 и соответствующие данные с каждой версией для повышения безопасности.