Как исправить ошибку «Обнаружено потенциально опасное значение Request.Path» при работе с 1С через веб-сервер IIS?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с базами данных 1С, опубликованными на веб-сервере под управлением Microsoft IIS (Internet Information Services), пользователи часто сталкиваются с неприятной ситуацией. База успешно открывается, но при попытке вызвать определенные функции — например, открыть отчет, запустить дополнительные отчеты и обработки, обновить динамический список или обратиться к временным файлам — веб-интерфейс внезапно прекращает работу и выдает ошибку сервера.

Если запустить браузер непосредственно на сервере (локально), мы увидим подробное описание проблемы: «Ошибка сервера в приложении... Обнаружено потенциально опасное значение Request.Path, полученное от клиента (:)» (в англоязычной версии ОС: A potentially dangerous Request.Path value was detected from the client (:)). Давайте подробно разберем, почему возникает эта ошибка и как ее оперативно исправить несколькими проверенными способами.

Рассмотрим подробнее физику процесса. Платформа 1С:Предприятие при выполнении ряда интерактивных действий формирует HTTP-запросы к веб-серверу, содержащие в пути URL двоеточие. Примером могут служить внутренние навигационные ссылки вида e1cib/tempfile/ или обращения к ресурсам метаданных. Веб-сервер IIS совместно с подсистемой ASP.NET по умолчанию считает символ двоеточия : в строке адреса признаком попытки взлома (например, атаки типа Directory Traversal или XSS-инъекции) и превентивно блокирует такой запрос, возвращая клиенту ошибку с кодом 500.

Выясним причину и найдем оптимальные пути решения. Ниже мы детально проанализируем три основных технических метода устранения этой проблемы, а также рассмотрим альтернативный вариант публикации.

Способ 1. Тонкая настройка файла конфигурации web.config (Рекомендуемый)

Этот метод является самым точечным и безопасным, поскольку мы вносим изменения только в рамки нашей конкретной публикации 1С, не ослабляя глобальные параметры безопасности всего веб-сервера IIS.

Разберем этот способ по шагам:

  1. Перейдем в каталог на сервере, куда физически была опубликована наша информационная база. По умолчанию IIS хранит публикации в каталоге C:\inetpub\wwwroot\Имя_Вашей_Публикации\.
  2. Найдем в этой папке файл конфигурации с именем web.config.
  3. Откроем этот файл с помощью любого текстового редактора (например, Блокнота), обязательно запустив его от имени Администратора.
  4. Нам необходимо отредактировать две секции конфигурационного XML-файла. Если эти секции уже существуют, мы дополним их атрибутами, если нет — создадим их.

Сначала обратим внимание на секцию <system.webServer>. Внутри нее нам нужно разрешить двойное экранирование символов в URL-адресах. Добавим следующий блок кода:


<security>
    <requestFiltering allowDoubleEscaping="true" />
</security>

Затем перейдем к секции <system.web>. Здесь нам нужно отключить жесткую валидацию запросов ASP.NET и очистить список запрещенных символов в путях запросов (тем самым разрешив использование двоеточия). Вставим или отредактируем следующие строки:


<pages validateRequest="false" />
<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="" />

Обратите внимание, что параметр requestPathInvalidCharacters="" указывает системе, что список запрещенных символов пуст, благодаря чему двоеточие перестает блокироваться фильтрами безопасности.

После сохранения файла web.config обязательно выполним перезапуск веб-сервера. Для этого откроем командную строку от имени администратора и выполним команду:

iisreset

Важное предупреждение: Помните, что при последующих перепубликациях базы данных непосредственно из конфигуратора 1С (например, при обновлении платформы) файл web.config может быть перезаписан платформой. В этом случае данные настройки придется внести в файл заново.

Способ 2. Изменение режима работы пула приложений IIS

Иногда веб-сервер IIS настроен таким образом, что пул приложений работает в режиме интеграции с .NET Framework, который крайне строго анализирует все входящие пакеты. Мы можем изменить режим работы пула, чтобы избежать избыточных проверок.

Проанализируем ситуацию и выполним следующие действия:

  1. Откроем консоль управления Диспетчер служб IIS (команда inetmgr в окне «Выполнить»).
  2. В левой части окна развернем дерево подключений и перейдем в раздел «Пулы приложений» (Application Pools).
  3. Найдем в списке тот пул приложений, который обслуживает нашу веб-публикацию (как правило, это DefaultAppPool, если вы не создавали отдельный пул).
  4. Выделим его кликом мыши и в правом меню выберем пункт «Дополнительные параметры» (Advanced Settings).
  5. В открывшемся окне найдем параметр «Режим управляемого конвейера» (Managed Pipeline Mode) и переключим его со значения Integrated на значение Classic (Классический).
  6. В качестве альтернативного и даже более предпочтительного варианта для 1С: в параметре «Версия среды .NET CLR» можно выбрать значение Без управляемого кода (No Managed Code). Это связано с тем, что библиотека расширения веб-сервера 1С wsisapi.dll является нативным ISAPI-расширением C++ и вообще не требует ресурсов среды .NET Framework для своей работы.
  7. Нажмем кнопку «ОК» для сохранения изменений и перезапустим пул приложений.

Способ 3. Перенастройка сопоставления обработчиков

Если предыдущие шаги не привели к успеху, возможно, на вашем сервере некорректно сопоставлены обработчики расширений, из-за чего IIS пытается передавать запросы платформы 1С через стандартные фильтры ASP.NET.

Посмотрим на пример правильной настройки сопоставлений:

  1. В консоли Диспетчер служб IIS выберем в дереве слева конкретно нашу опубликованную информационную базу (она находится внутри раздела «Сайты» -> «Default Web Site»).
  2. В центральной части окна дважды кликнем по иконке «Сопоставление обработчиков» (Handler Mappings).
  3. Найдем в списке обработчик с именем ISAPI-dll.
  4. В меню действий справа выберем пункт «Добавить сопоставление сценария...» (Add Script Map).
  5. В появившемся диалоговом окне заполним поля следующим образом:
    • Путь запроса: введем символ одиночной звездочки * (вместо стандартного *.dll). Это укажет IIS передавать абсолютно все входящие запросы к этой публикации напрямую в модуль 1С.
    • Исполняемый файл: укажем физический путь к библиотеке расширения 1С. Например: C:\Program Files\1cv8\8.3.23.1865\bin\wsisapi.dll (путь зависит от версии установленной у вас платформы).
    • Имя: зададим понятное имя, например, 1C_Web_Handler.
  6. Нажмем «ОК» и подтвердим создание сопоставления. После этого перезапустим веб-сервер IIS.

Альтернативное решение: переход на веб-сервер Apache

Если администрирование IIS кажется вам избыточно сложным или корпоративные политики безопасности не позволяют вносить изменения в глобальные файлы конфигурации веб-сервера, мы рекомендуем рассмотреть переход на использование веб-сервера Apache HTTP Server.

Веб-сервер Apache изначально спроектирован по другим стандартам и не содержит встроенных механизмов блокировки двоеточий в путях URL «из коробки». Публикация базы 1С на Apache выполняется в несколько кликов из конфигуратора 1С и, как правило, вообще не требует последующего ручного редактирования конфигурационных файлов для корректной работы дополнительных отчетов, обработок и динамических списков.

← На главную