【问题标题】:Why p_auth validation is not working in Liferay 6?为什么 p_auth 验证在 Liferay 6 中不起作用?
【发布时间】:2018-12-19 19:10:00
【问题描述】:

我正在使用 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>

为了测试,我从我的form 网址中删除了p_auth=&lt;code&gt;,然后我提交了表单并且它有效。这不好,我不应该允许没有令牌的请求。

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

【问题讨论】:

  • 请检查auth.token.ignore.actions是否存在
  • @AndreAlbert 我没有手动创建该属性,是自动创建的吗?
  • @cheloncio,是你的请求和Ajax请求吗?
  • @stiemannkj1 java 请求
  • @cheloncio,这没有回答我的问题。您可以添加视图 xhtml 代码和步骤来重现您的问题吗?

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


【解决方案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 版本可能会修复更多错误。

【讨论】:

  • 非常感谢
猜你喜欢
  • 1970-01-01
  • 2017-07-03
  • 2013-05-27
  • 2018-11-26
  • 2014-07-03
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多