我们为客户维护一个Apache Tomcat,该客户使用AJP桥连接到常规Apache Web服务器。在过去的某个时候,客户要求内容类型响应标头始终包含“ charset = utf-8”,这是通过Tomcat中的以下配置实现的:

<jsp-config>
   <jsp-property-group>
        <url-pattern>*.html</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>


就在最近,我们意识到这导致HTML文件像是我们要避免的JSP文件一样被执行,而是使用<mime-mapping>配置响应标头。不幸的是,以上配置已经在生产服务器上使用了一年多,客户问我们为什么要更改配置。

我们最初的建议是遵守最小特权原则,可能会增加交付时间,并且增加跨站点脚本编写的机会只会导致进一步的细节问题。由于在这些问题上缺乏经验,我希望在这里获得一些反馈。

亲切的问候和预先的感谢。

最佳答案

将HTML解释为JSP文件意味着:


<% ... %>将被解释为Java代码
<%@ %>将被解释为JSP指令
<taglib:tag />将被解释为JSP标记
${}将被解释为EL表达式


用HTML编写这些代码可能会导致异常或意外执行代码。现在,取决于谁可以编辑HTML文件。如果通过CMS编辑它们,这将是一个严重的安全问题。

如果要强制编码,可以通过servlet过滤器(请参见CharacterEncodingFilter),Tomcat阀门(nothing usable in default软件包)或通过Apache HTTP服务器中的mod_headersAddDefaultCharset配置来完成。

几乎所有解决方案都比您做的更好,更清洁,更简单,更安全:)。

10-06 13:21
查看更多