使用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>
但是没有添加新行,我该怎么做?
我想这是因为httpHeaderSecurityModule
有xmlns
属性,但不知道如何解决这个问题?
注意,我已经从转换文件中的httpHeaderSecurityModule
中删除了xmlns=...
,如果我包含名称空间,我会得到以下语法错误:
http://schemas.microsoft.com/XML-Document-Transform:Transform'属性未声明为
我不确定是否有更好的解决方案,但根据MS文档:,我无法使转换在httpHeaderSecurityModule
(具有xmlns=...
)元素内工作
转换文件的根元素必须指定XML文档转换命名空间在其打开标签中
我可以进行此转换的唯一方法是替换具有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>
一种选择是使用单独的配置文件,而不是完整的转换。你可以这样做:
<nwebsec xdt:Transform="Remove" />
<nwebsec xdt:Transform="InsertIfMissing">
<httpHeaderSecurityModule configSource="NWebsec.config" >
</httpHeaderSecurityModule>
</nwebsec>
不幸的是,您不能直接使用nwebsec元素(请参阅此处的原因)。