1

使用 Visual Studio Web.Config 转换,我想在 Web.Debug.Config 中包含以下行:<add source="*.amazonaws.com" />

这是我的 Web.config

<configuration>
  <!--
    -- More config here
  -->
  <nwebsec>
    <httpHeaderSecurityModule xmlns="http://nwebsec.com/HttpHeaderSecurityModuleConfig.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="NWebsecConfig/HttpHeaderSecurityModuleConfig.xsd">
      <securityHttpHeaders>
        <content-Security-Policy enabled="true">
          <default-src none="true" />
          <script-src self="true" unsafeEval="true">
            <add source="https://cdnjs.cloudflare.com"/>
          </script-src>
          <style-src unsafeInline="true" self="true">
            <add source="https://cdnjs.cloudflare.com"/>
          </style-src>
          <img-src self="true">
            <add source="data:" />
            <add source="*.w3.org"/>
            <!-- ******** I want to insert new source here for Dev ******** -->
          </img-src>
          <object-src none="true" />
          <media-src none="true" />
          <frame-ancestors none="true" />
          <report-uri enableBuiltinHandler="true"/>
        </content-Security-Policy>
      </securityHttpHeaders>
    </httpHeaderSecurityModule>
  </nwebsec>
</configuration>

我已经在 Web.Debug.config中完成了这里的建议:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web></system.web>
  <nwebsec>
    <httpHeaderSecurityModule> <!-- I have remove xmlns=... from this element -->
      <securityHttpHeaders>
        <content-Security-Policy enabled="true">
          <img-src self="true" xdt:Transform="Remove" />
          <img-src self="true" xdt:Transform="InsertIfMissing">
            <add source="data:" />
            <add source="*.w3.org"/>
            <add source="*.amazonaws.com" />
          </connect-src>
        </content-Security-Policy>
      </securityHttpHeaders>
    </httpHeaderSecurityModule>
  </nwebsec>
</configuration>

但是没有添加新行,我该怎么做?

我认为这是因为httpHeaderSecurityModulexmlns属性但不知道如何解决这个问题?

请注意,我已从转换文件中删除了xmlns=...from httpHeaderSecurityModule,如果我包含命名空间,则会收到以下语法错误:

未声明“http://schemas.microsoft.com/XML-Document-Transform:Transform”属性

4

2 回答 2

1

根据MS 文档,我不确定是否有更好的解决方案,但我无法让转换在httpHeaderSecurityModule(具有)元素内部工作:xmlns=...

转换文件的根元素必须在其开始标记中指定 XML-Document-Transform 命名空间

我可以进行此转换的唯一方法是替换元素上方的所有内容xmlns,即

  <nwebsec xdt:Transform="Remove" />
  <nwebsec xdt:Transform="InsertIfMissing">
    <httpHeaderSecurityModule xmlns="http://nwebsec.com/HttpHeaderSecurityModuleConfig.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="NWebsecConfig/HttpHeaderSecurityModuleConfig.xsd">
      <securityHttpHeaders>
        <content-Security-Policy enabled="true">
          <default-src none="true" />
          <script-src self="true" unsafeEval="true">
            <add source="https://cdnjs.cloudflare.com"/>
          </script-src>
          <style-src unsafeInline="true" self="true">
            <add source="https://cdnjs.cloudflare.com"/>
          </style-src>
          <img-src self="true">
            <add source="data:" />
            <add source="*.w3.org"/>
            <!-- ******** I want to insert new source here for Dev ******** -->
          </img-src>
          <object-src none="true" />
          <media-src none="true" />
          <frame-ancestors none="true" />
          <report-uri enableBuiltinHandler="true"/>
        </content-Security-Policy>
      </securityHttpHeaders>
    </httpHeaderSecurityModule>
  </nwebsec>
于 2021-09-17T01:07:42.647 回答
0

一种替代方法是使用单独的配置文件而不是完整的转换。你可以这样做:

<nwebsec xdt:Transform="Remove" />
  <nwebsec xdt:Transform="InsertIfMissing">
  <httpHeaderSecurityModule configSource="NWebsec.config" >
  </httpHeaderSecurityModule>
</nwebsec>

不幸的是,您不能直接使用 nwebsec elemente(请参阅此处为什么)。

于 2022-03-02T08:36:41.527 回答