使用CRSF的表单缓存



Silex为表单提供了自动使用CRSF保护的功能。问题是,当使用提供的HttpCacheProvider缓存时,不可能不缓存生成的令牌,因此解决方案是使用esi,但我无法使其工作。我尝试了2个动作,一个是包含esi代码和表单的小枝。_token渲染CRSF令牌:

<esi:include src="/form" />
{{ form_row(form._token) }}

和包含表单其余部分的动作"form",但是现在没有显示验证错误。这可能吗?这条路对吗?

对/form发出的请求不显示验证错误,因为它会导致向后端发出单独的http请求,而后端不知道提交的表单数据或来自父请求的验证错误。

在不了解太多关于silex或php的情况下,我建议仅对加载表单的可缓存get请求使用ESI结构(以便您始终获得一个新的CSRF令牌),并在响应表单提交时不可缓存的php帖子时使用php include包含片段。伪代码看起来像:

if request.method == "GET"
   print '<esi:include src="/form" />'
else if request.method == "POST"
   include 'form.php'

最新更新