Liferay 7 - Wildfly 10和" X-Content-Type-Options:nosniff"

时间:2016-11-22 20:26:53

标签: javascript jsp configuration liferay wildfly

我在Wildfly 10上使用Liferay 7和相应的服务器配置。

调用我的本地安装为我提供以下标题的响应:

...
X-Content-Type-Options: nosniff
...

嗯,我非常欣赏这一点,因为它是一个有用的安全选项,可以防止跨侧脚本,但是与Liferay结合使用会导致浏览器控制台出现以下错误:

  

拒绝从' http://localhost:8080/o/frontend-js-web/liferay/available_languages.jsp?bro执行脚本... e& colorSchemeId = 01& minifierType = js& languageId = de_DE& b = 7002& t = 1471516992592'因为它的MIME类型(' text / html')不可执行,并且启用了严格的MIME类型检查。

此错误的问题在于,当您尝试配置内容或页面时,这会导致cms-backend中的非功能性。相应的菜单不能再打开了。

会发生什么:在上面的jsp文件中还包含了javascript,它不会被执行,因为浏览器会尊重上面的标题,因为服务的mime类型(文本)会被阻止/ html)无效。

我首先在Chrome中调查了这个问题,从昨天开始,在新版本的Firefox中也进行了更新。

我试图在Liferay和Wildfly的配置文件中找到相应的位置并禁用它,但没有任何成功。无论我尝试什么,头文件仍将由Wildfly提供。

此外,只有在Liferay中打开相应网页时才会提供此标题。如果我在浏览器中打开Wildfly的管理控制台,则标题不再存在。

所以我假装它是Liferay安装或Liferay本身的具体问题。有谁知道我必须调整哪个配置文件才能禁用此标头的服务?

更新

我认为非工作JavaScript是一个结果,因为浏览器阻止了所包含的JavaScript的执行。

我打开了后端/控制面板,转移到"内容"。错误消息仍在那里

拒绝从' http://localhost:8080/o/frontend-js-web/liferay/available_languages.jsp?br执行脚本... e& colorSchemeId = 01& minifierType = js& languageId = de_DE& b = 7002& t = 1471516992592'因为它的MIME类型(' text / html')不可执行,并且启用了严格的MIME类型检查。

当我现在点击某个元素时,它会给我以下错误

  

everything.jsp?browserId = other& themeId = admin_WAR_admintheme& colorSchemeId = 01& minifierType = js& minifi ...:80165 Uncaught TypeError:无法读取属性' de_DE'未定义的(...)

因此,第一个错误会导致JavaScript中出现以下问题,因为未设置语言对象,因此不足为奇。但这导致相关菜单不会被打开。

在我之间找到了相应的属性

... http.header.secure.x.content.type.options ... 在" system.properties"如您所述的文件,我将其设置为" false"在我的" portal-ext.properies"文件。之后我重新启动了服务器,但标题仍在那里。

我可以在其他地方切换此属性的任何想法吗?也许我应该提到它只是一个开发环境,后来在生产环境中我必须找到另一个解决方案。

3 个答案:

答案 0 :(得分:2)

  

有没有人知道我必须调整哪个配置文件才能禁用此标头的服务。

system.properties中配置。您可以在system-ext.properties中进行更改。如果它不存在,只需在portal-ext.properties旁边创建一个。

请注意

我认为这与X-Content-Type-Options本身无关。此标头为introduced in Liferay over 3 years ago,现在它已在许多生产环境中使用(包括在WildFly上部署的此类环境)。

如果你注意它实际上说的错误信息

  

因为它的MIME类型('text / html')不可执行,并且启用了严格的MIME类型检查。

因此,由于某种原因,响应MIME类型为text/html而不是application/javascript。根据您提供的信息,无法分辨为什么会发生这种情况。

答案 1 :(得分:1)

我有同样的问题(使用Jboss EAP 7(~Wildfly 10)和LR 7.0 GA4 CE)。 这似乎是LR中的(经常性的?)bug。 我不会关闭那个HTTP标头,我认为这就是它存在的原因。而不是那样,我在适当的捆绑中应用了建议的补丁,它对我有用(我不知道这是推荐与否,但它有效)。 包含所提及的available_languages.jsp的包可以在OSGI包中找到,如果是LR7,请执行以下操作: $ LIFERAY_HOME / OSGi的/国家/ org.eclipse.osgi / 338/0 /包文件 这是一个OSGI jar,只需打开它,在META-INF / resources / liferay文件夹中查找jsp文件,打开它,放行

<%@ page language="java" contentType="text/javascript;charset=UTF-8" pageEncoding="UTF-8"%> 

在其他指令中并将其放回到捆绑包中。 应该停止这个修改后的jboss,应该删除$ LIFERAY_HOME / work文件夹(没有这个可能会工作,我不知道,我做了)。并再次启动你的jboss。 在这一步之后,我的Liferay实例运行良好。

祝你好运!

更新: 上面的解决方案只是一个临时解决方案,因为这些文件夹属于osgi运行时,这些bundleFiles只会在liferay的第一次运行期间创建 - 而且似乎有时会从原始位置(即lpkg文件)更新它。因此,如果您想永久解决此问题,请在$ LIFERAY_HOME / osgi / marketplace / Liferay CE Foundation.lpkg!com.liferay.frontend.js.web-1.0.41.jar中修复该jsp - 上面的bundleFile将是从这个罐子里创造出来。

答案 2 :(得分:0)

在Liferay 7中,如果我们试图在.jsp页面中包含任何.js文件,我们可能会收到此错误。 例如:

Simple Table

解决错误, 转到module-name /中的bnd.bnd文件并添加以下内容。

<script src="/o/module-name/js/jsfile.js" type="application/javascript"></script>

它会起作用。

由于