我不能围绕评论和编码方式,只为.html设置一个标题,例如html5样板文件中的.htaccess文件。
大型代码块的线索在于,“mod_headers”无法匹配内容类型' (如#评论)。所以我徘徊 1:为什么有' Header unset
&#39;在一个<FilesMatch>
中,刚被宣布是不可能的?
<IfModule mod_headers.c>
Header set Content-Security-Policy "script-src 'self'; object-src 'self'"
# `mod_headers` cannot match based on the content-type, however,
# the `Content-Security-Policy` response header should be send
# only for HTML documents and not for the other resources.
<FilesMatch "\.(appcache|atom|bbaw|bmp|crx|css|cur|eot|f4[abpv]|flv|geojson|gif|htc|ico|jpe?g|js|json(ld)?|m4[av]|manifest|map|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|topojson|tt[cf]|txt|vcard|vcf|vtt|webapp|web[mp]|woff2?|xloc|xml|xpi)$">
Header unset Content-Security-Policy
</FilesMatch>
</IfModule>
我到处寻找,但只是在没有进一步解释的情况下登陆到具有相同,几乎是仪式的代码块的页面上。所以问题 2:为什么这样的简单声明不可能?:
<IfModule mod_headers.c>
# Content-Security-Policy for .html files
<FilesMatch "\.(html)$">
Header set Content-Security-Policy "script-src 'self'; object-src 'self'"
</FilesMatch>
# OR like this
<Files ~ "\.(html)$">
Header set Cache-Control "public, must-revalidate"
</Files>
</IfModule>
答案 0 :(得分:1)
根据您的第二个示例,可以这样做。但.html不是唯一可以作为文档发送的文件。您也可以使用.php或.htm或任何其他数量的文件。其中一些(如.php)可能会执行,然后最终返回HTML,但服务器并不知道,因为它在此阶段所知道的只是文件扩展名。
应在所有文档上设置CSP,但为了节省标题带宽,不需要在这些文档使用的资源上设置(例如图像,样式表,javascript等)。除了浪费带宽之外,将其设置在其他文档上并没有什么坏处。
理想情况下,您可以根据返回的mime类型设置它(在上面的PHP示例中将是HTML)。因此,只要返回HTML文档,然后设置它,否则不要。但是,由于这是不可能的,因此您有两种选择:
默认情况下将其设置为所有内容,然后针对已知媒体类型显式取消设置。这几乎可以保证它将在文档上设置,但也有可能在一些其他文件类型上设置(例如,如果你没有明确地为这种类型设置它) - 正如我所说的那样,它不是非常糟糕。
明确说明您的HTML文档类型(如第二个示例)。这里的风险是您现在或者当其他人在您的网站上开始使用php时错过文件类型(例如.php)。
第一个选项是更安全的选项。特别是对于html5boiler板块,他们不知道将在其上使用的网站上使用什么技术。站点可能使用.php,.cgi,.asp或任意数量的技术来生成HTML文档。他们甚至可以将请求代理到后端服务器,因此它们不会是文件扩展名。
有意义吗?