2

Silex 提供对表单自动使用 CRSF 保护的能力。问题是在使用提供的HttpCacheProvider缓存的时候不可能不缓存生成的token,所以解决方法是使用esi,但是我不能让它工作。我尝试了 2 个操作,其中一个使用包含 esi 代码和 form._token 的树枝来呈现 CRSF 令牌:

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

以及包含表单其余部分的操作“表单”,但现在不显示验证错误。这甚至可能吗?这是正确的方法吗?

4

1 回答 1

1

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

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

if request.method == "GET"
   print '<esi:include src="/form" />'
else if request.method == "POST"
   include 'form.php'
于 2013-07-17T14:41:40.803 回答