Символ "&" разбивает пароли, которые хранятся в файле 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
);
Почему это может привести к разорению сайта?
Ответы
Ответ 1
Я подозреваю, что вы неправильно закодировали пароль в файле web.config
. Помните, что web.config
- это XML файл, поэтому объекты должны быть закодированы.
Вместо
my&password
попробуйте
my&password
Вы можете использовать сайты, такие как FreeFormatter.com, чтобы избежать/неэксплуатировать XML-строки.
Ответ 2
Вам нужно будет поместить закодированное значение в файл web.config. Он правильно прочитает его, как только вы его потянете, но в самом файле конфигурации он должен быть закодирован.
например:
Пароль: your&password
(что вы ожидаете)
Закодированная версия: your&password
(что должно быть сохранено в вашем web.config)
Ваш метод-обертка, который считывает значение, должен автоматически указывать его на your&password
.
Вам нужно будет сделать это для всех специальных символов:
< = <
> = >
" = "
' = '
& = &
Ответ 3
сохранить пароль в файле web.config с помощью CDATA
замените пароль на этот
<![CDATA[MyPassw&rd]]>