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

Символ "&" разбивает пароли, которые хранятся в файле web.config

У меня есть приложение ASP.NET MVC3 С#.NET, работающее на IIS 7.5.

У нас есть учетная запись службы Windows NT, которую мы олицетворяем в нашем коде, чтобы читать/записывать документы в общий ресурс файла. Идентификатор пользователя скомпилирован в коде, а пароль учетной записи службы хранится в файле web.config.

Пароль содержит символ амперсанда (т.е.: p&ssword).

Это сломало сайт. При обращении к сайту мы получили эту ошибку: "Извините, произошла ошибка при обработке вашего запроса".

Вот код, который использует пароль:

    var password = ConfigurationManager.AppSettings.Get(Common.SVC_PWD);

    bool isSuccess = LogonUser(
        @"my_svc_acct",
        "my.domain.net",
        password,
        LOGON32_LOGON_NEW_CREDENTIALS,
        LOGON32_PROVIDER_DEFAULT, ref token
    );

Почему это может привести к разорению сайта?

4b9b3361

Ответ 1

Я подозреваю, что вы неправильно закодировали пароль в файле web.config. Помните, что web.config - это XML файл, поэтому объекты должны быть закодированы.

Вместо

my&password 

попробуйте

my&password

Вы можете использовать сайты, такие как FreeFormatter.com, чтобы избежать/неэксплуатировать XML-строки.

Ответ 2

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

например:

Пароль: your&password (что вы ожидаете)

Закодированная версия: your&password (что должно быть сохранено в вашем web.config)

Ваш метод-обертка, который считывает значение, должен автоматически указывать его на your&password.

Вам нужно будет сделать это для всех специальных символов:

< = &lt;
> = &gt;
" = &quot;
' = &apos;
& = &amp;

Ответ 3

сохранить пароль в файле web.config с помощью CDATA

замените пароль на этот

<![CDATA[MyPassw&rd]]>