Веб-сайты Azure выдают ошибку 500, если в URL есть двоеточие

Внешние клиенты загружают мой веб-сайт Azure URL-адресами, содержащими символ двоеточия (:). Запрос недействителен, но на моем старом IIS-сервере он выдаст ошибку 404. В Azure этот же URL-адрес выдаст ошибку 500. Это тратит впустую мое время, поскольку я должен проверить журналы. Это пример запроса:

http://www.example.com/http:/www.example.com

Есть ли способ избежать этого поведения на стороне сервера и вместо этого выдавать ошибку 4xx? Имейте в виду, что эта проблема только в Azure, и я не контролирую запросы.

2 ответа

Если вы запускаете приложение.NET, то это вызвано ASP.NET HTTP runtime, более конкретно его функцией фильтрации запросов.

Если путь URL содержит любой из запрещенных символов (<,>,*,%,&,:,\\,?), среда выполнения выдает исключение, и из-за исключения IIS возвращает код ошибки 500.

System.Web.HttpException: потенциально опасное значение Request.Path было обнаружено от клиента (:).

Вы можете настроить запрещенные символы в вашем web.config файл.

<system.web>
    <httpRuntime targetFramework="4.5" requestPathInvalidCharacters="*,%" />
</system.web>

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

С помощью консоли KUDU в Azure добавьте файл applicationhost.xdt в папку D:\home\site.

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-   Transform">
 <system.applicationHost>
<sites>
  <site name="%XDT_SITENAME%" xdt:Locator="Match(name)">
           <virtualDirectoryDefaults xdt:Transform="Insert" allowSubDirConfig="false" />
           </site>
</sites>

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

Это будет хорошо работать для любого сайта, имеющего один web.config на корневом уровне.

Другие вопросы по тегам