为什么p_auth验证在Liferay 6中不起作用?

时间:2018-07-11 16:47:57

标签: security jsf-2 liferay csrf liferay-6

我正在使用Liferay 6.2-ce-ga3,primefaces 6和JSF2.1。我已为portlet启用CSRF保护,并在liferay portal-ext.properties和portlet portal-ext.properties中添加以下代码:

auth.token.check.enabled=true
auth.token.impl=com.liferay.portal.security.auth.SessionAuthToken

此外,我已经在portlet.xml中添加了

<init-param>
  <name>check-auth-token</name>
  <value>true</value>
</init-param>

为了进行测试,我从p_auth=<code>网址中删除了form,然后提交了表单,该表单可以正常工作。那不好,我不应该在没有令牌的情况下允许请求。

  1. 我忘记在配置中添加过滤器了吗?
  2. liferay如何检查p_auth?
  3. 我应该像这样tutorial那样在我的bean中手动检查p_auth令牌吗?

1 个答案:

答案 0 :(得分:1)

Liferay的p_auth令牌可在portlet生命周期的ACTION_PHASE期间防止CSRF。我相信Liferay 6.2中默认启用了该功能,因此您无需为此进行任何配置。

必须存在p_auth令牌,这样表单才能在ACTION_PHASE期间正确提交。但是,the p_auth parameter has no effect during the RESOURCE_PHASE是执行JSF Ajax表单提交的阶段。因此,您可能正在处理JSF Ajax请求。幸运的是,JSF also has its own CSRF protection enabled by default in the view state。因此,当您使用Liferay Faces时,无论使用Ajax表单提交还是使用非Ajax表单提交,CSRF都是安全的。

如果您确认p_auth在非Ajax表单提交过程中无效,则可能存在安全漏洞(或您的配置存在问题)。您应该更新到最新版本的Liferay Portal *并重新测试。如果您仍然遇到问题,请报告安全问题:https://issues.liferay.com/secure/CreateIssue.jspa?pid=10952&issuetype=1

* Liferay Portal 6.2 GA6是6.2行中的最新版本,而Liferay Portal 7.0 GA7是整体上最新的CE版本。当然,有些EE版本可能也修复了许多错误。