我们为客户维护一个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>
配置响应头。遗憾的是,上述配置已在生产服务器上使用了一年多,客户询问我们为什么要更改配置。
我们最初的建议是遵守最小特权原则,可能更长的交付时间和更多的跨站点脚本编写机会只会导致进一步的细节问题。由于缺乏这些问题的经验,我希望在这里得到一些反馈。
亲切的问候和提前谢谢。
答案 0 :(得分:3)
将HTML解释为JSP文件意味着:
<% ... %>
将被解释为Java代码<%@ %>
将被解释为JSP指令<taglib:tag />
将被解释为JSP标记${}
将被解释为EL表达式在HTML中编写这些内容可能会导致异常或无意的代码执行。现在它取决于谁可以编辑HTML文件。如果它们是通过CMS编辑的,那么这是一个非常严重的安全问题。
如果你想强制编码,可以通过servlet过滤器(参见CharacterEncodingFilter
),Tomcat valve(nothing usable in default包)或mod_headers
或AddDefaultCharset
配置来完成在您的Apache HTTP服务器中。
几乎任何解决方案都会比你做的更好,更清洁,更简单,更安全。)。