将CSRF保护头添加到wicket ajax调用

时间:2015-04-26 18:00:23

标签: javascript ajax wicket wicket-1.5

我正在编辑使用Apache Wicket制作的网页。我们希望为网站添加一些CSRF保护。想要它是无国籍的我们想要使用双提交模式。

对于表单,我们可能最终会使用一个包含csrf标记的隐藏字段。

但我们还需要将此添加到使用AjaxFallbackLink进行的某些GET请求中,这也会更改一些数据(我知道它不应该这样做,但我目前无法更改它)。 为此,我们正在考虑将CSRF令牌放在随请求发送的自定义标头中,但我还没有看到任何方法可以挂钩wicket使用的javascript方法(wicketAjaxGet似乎只采用了一个前提条件函数和一个通道功能)。对于我如何做到这一点有什么建议吗?

或者将令牌添加到网址是一个不错的选择?如果我们使用https传输,与在标题中设置相比,在这种情况下会出现什么问题。

或者关于如何为这些Ajax GET请求添加CSRF保护的任何其他想法?

2 个答案:

答案 0 :(得分:3)

您可以使用packaged with Wicket

的6.x(和7.x)CsrfPreventionRequestCycleListener

您可以在应用程序的init-method中安装它:

@Override protected void init() { // ... getRequestCycleListeners().add(new CsrfPreventionRequestCycleListener()); // ... } 然后,这将检查所有请求中的Origin头,包括AJAX。您需要为侦听器配置您希望它的行为方式,您想要允许的起源等等。

答案 1 :(得分:2)

如果您使用Ajax组件,那么Page将是有状态的。

如果您可以使用http会话,那么最简单的方法是使用CryptoMapper(注意:它在Wicket 6.x中有很多改进!)。

如果您希望页面是无状态的,那么您必须使用自己的自定义令牌 - 作为请求标头或参数。检查wicketstuff-stateless是否有无状态的Ajax组件和行为。