Поделиться через


Проблемы безопасности и полезные советы по трассировке

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

Использование пользовательского прослушивателя трассировки с webHost

Если вы пишете собственный прослушиватель трассировки, следует учитывать возможность потери трассировок в случае веб-хостинговой службы. При перезапуске WebHost он завершает текущий процесс, как только дубликат берет на себя управление. Однако два процесса по-прежнему должны иметь доступ к одному ресурсу в течение некоторого времени, который зависит от типа прослушивателя. В этом случае XmlWriterTraceListener создает новый файл трассировки для второго процесса; хотя трассировка событий Windows управляет несколькими процессами в одном сеансе и предоставляет доступ к одному файлу. Если ваш собственный прослушиватель не предоставляет аналогичные функции, трассировки могут быть потеряны, когда файл блокируется двумя процессами.

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

Ведение журнала конфиденциальной информации

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

Следующие советы могут помочь предотвратить случайное раскрытие содержимого файла трассировки.

  • Убедитесь, что файлы журнала защищены списками управления доступом (ACL) как в сценариях webHost, так и в сценариях самостоятельного размещения.

  • Выберите расширение файла, которое невозможно легко обслуживать с помощью веб-запроса. Например, расширение файла .xml не является безопасным выбором. Вы можете проверить руководство по администрированию IIS, чтобы просмотреть список расширений, которые можно обслуживать.

  • Укажите абсолютный путь к расположению файла журнала, который должен находиться вне общедоступного каталога WebHost vroot, чтобы предотвратить доступ к нему внешней стороной с помощью веб-браузера.

По умолчанию ключи и персональные данные (PII), такие как имя пользователя и пароль, не регистрируются в трассировочных логах и сообщениях журнала. Однако администратор компьютера может использовать атрибут enableLoggingKnownPII в элементе machineSettings файла Machine.config, чтобы разрешить приложениям, работающим на компьютере, регистрировать известные личные сведения (PII) следующим образом:

<configuration>
   <system.ServiceModel>
      <machineSettings enableLoggingKnownPii="Boolean"/>
   </system.ServiceModel>
</configuration>

Затем средство развертывания приложений может использовать атрибут logKnownPii в файле App.config или Web.config, чтобы включить ведение журнала piI следующим образом:

<system.diagnostics>
  <sources>
      <source name="System.ServiceModel.MessageLogging"
        logKnownPii="true">
        <listeners>
                 <add name="messages"
                 type="System.Diagnostics.XmlWriterTraceListener"
                 initializeData="c:\logs\messages.svclog" />
          </listeners>
      </source>
  </sources>
</system.diagnostics>

Только если оба параметра true включены, ведение журнала PII включено. Сочетание двух коммутаторов позволяет гибко регистрировать известные личные данные для каждого приложения.

Следует учитывать, что если в файле конфигурации указаны два или более пользовательских источников, считываются только атрибуты первого источника. Остальные игнорируются. Это означает, что для следующего файла App.config, PII не регистрируется для обоих источников, даже если ведение журнала PII явно активировано для второго источника.

<system.diagnostics>
  <sources>
      <source name="System.ServiceModel.MessageLogging"
        logKnownPii="false">
        <listeners>
           <add name="messages"
                type="System.Diagnostics.XmlWriterTraceListener"
                initializeData="c:\logs\messages.svclog" />
          </listeners>
      </source>
      <source name="System.ServiceModel"
         logKnownPii="true">
         <listeners>
            <add name="xml" />
         </listeners>
      </source>
  </sources>
</system.diagnostics>

Если элемент <machineSettings enableLoggingKnownPii="Boolean"/> существует вне файла Machine.config, система создает ConfigurationErrorsException.

Изменения эффективны только при запуске или перезапуске приложения. Событие регистрируется при запуске, если для обоих атрибутов задано значение true. Событие также регистрируется, если для logKnownPii задано значение true, но enableLoggingKnownPii является false.

Дополнительные сведения о ведении журнала PII см. в примере блокировки безопасности PII.

Администратор компьютера и средство развертывания приложений должны проявлять крайнюю осторожность при использовании этих двух коммутаторов. Если ведение журнала PII включено, регистрируются ключи безопасности и личные данные. Если они отключены, конфиденциальные данные и данные, относящиеся к приложению, по-прежнему регистрируются в заголовках и телах сообщений. Дополнительные сведения о конфиденциальности и защите персональных данных от раскрытия см. в конфиденциальности пользователей.

Кроме того, для транспорта, ориентированного на соединение, IP-адрес отправителя сообщения регистрируется один раз за соединение, а в противном случае — один раз за каждое отправленное сообщение. Это делается без согласия отправителя. Однако это ведение журнала происходит только на уровнях сведений или подробных трассировок, которые не являются уровнями трассировки по умолчанию или рекомендуемыми уровнями трассировки в рабочей среде, за исключением динамической отладки.

См. также