我试图在我的symfony2项目中实现一些ajax功能。使用jquery的$。张贴我想发送一些数据回我的控制器。然而,当我刚刚发布数据时,没有CSRF保护,因为symfony的CSRF保护似乎只适用于表单。
有什么非常简单的方法来实现这一点?
使用表单时,我可以只做$form-
你应该试试这个片段。Symfony表单应生成特殊的_csrf_令牌,该令牌应随post请求一起发送。如果没有此值,将引发安全警报。
当然#塔吉特窗体应该替换为窗体id, /endpoint目标ajax url
$('#targetForm').bind('submit', function(e) {
e.preventDefault();
var data = $(this).serialize();
$.post('/endpoint', data, function(data) {
// some logic here
});
});
我间歇性地有这个问题。原来这不是因为我的ajax,而是因为Silex提供了一个弃用的DefaultCsrfProvider
,它使用会话ID本身作为令牌的一部分,为了安全起见,我随机更改ID。相反,显式地告诉它使用新的CsrfTokenManager
会修复它,因为该管理器会生成一个令牌并将其存储在会话中,这样会话ID就可以更改,而不会影响令牌的有效性。
/** Use a CSRF provider that does not depend on the session ID being constant. We change the session ID randomly */
$app['form.csrf_provider'] = $app->share(function ($app) {
$storage = new Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage($app['session']);
return new Symfony\Component\Security\Csrf\CsrfTokenManager(null, $storage);
});
在Symfony2中,默认情况下,CSRF令牌基于会话。如果您想生成它,您只需获得此服务和调用生成方法:
//Symfony\Component\Form\Extension\Csrf\CsrfProvider\SessionCsrfProvider by default
$csrf = $this->get('form.csrf_provider');
//Intention should be empty string, if you did not define it in parameters
$token = $csrf->generateCsrfToken($intention);
return new Response($token);
这个问题可能对你有用
问题内容: 基本上就是这个问题(括号很重要) 问题答案: 并且针对 所有 请求 一起使用 ,在第 一个 同时请求开始时触发,然后在该同时批处理的 最后一个 完成时触发。 因此,假设您一次发出3个请求,在第一个请求开始时触发,在最后一个请求返回时(它们不一定按顺序完成)触发。 这些事件 没有 任何参数,因为它们是针对一批请求的: 并在 每个请求 发送/完成后触发一次。这就是为什么这些处理程序传递参数
问题内容: 当我使用ajax从数据库中检索数据时,如果我从数据库中检索到的数据等于saveHere,则会出现此问题,它将再次循环直到与变量saveHere不匹配,它将冻结浏览器直到数据我检索到的结果不等于saveHere。 这是一个例子: 我真的需要建议。先感谢您。对不起,语法。 问题答案: 我不知道确切的情况或要实现的目标,但是我说您进行AJAX调用的方式非常危险,因为它有可能每秒不断地发出请求
问题内容: Facebook Ajax如何工作?2-3个月前,他们使用#,但现在整个地址栏都在变化。 问题答案: 所使用的第一种方法称为“ Ajax爬行 ”。 但是我认为您正在谈论的新方法仅仅是HTML5 History API 。Github正在使用这种方法来浏览树,您可以在此处了解更多信息。(我建议所有读者阅读和观看视频,因为它非常有帮助) 编辑: 只是要指出,Facebook肯定在使用HTM
问题内容: 和和有什么区别? 在哪个条件下使用哪个更好? 问题答案: 是最可配置的,您可以在其中对HTTP标头等进行精细控制。您还可以使用此方法直接访问XHR对象。还提供了更细粒度的错误处理。因此可能会更复杂并且通常没有必要,但有时非常有用。您必须自己通过回调处理返回的数据。 只是它的简写,但抽象了一些配置,为隐藏的内容设置了合理的默认值。将数据返回给回调。它仅允许GET请求,因此附有类似抽象的功
问题内容: 在我们的网站中,某些页面使用SSL,但是大多数页面却不使用SSL(因为它们需要由网络漫游器抓取)。 它几乎可以归结为用户登录的任何页面,除了SSL协议之外,有一些例外, 但是用户首先必须从非https页面登录(登录表单是从任何页面的屏幕顶部拖放的表单)。 所以, 如何通过ajax强制请求使用SSL? 这样安全吗? 问题答案: 它违反了JavaScript的同源策略,因为它没有看到HTT
问题内容: 我正在尝试在我的Symfony 2项目中实现一些Ajax功能。我想使用jquery的$ .post将一些数据发送回我的控制器。但是,当我仅POST数据时,就没有CSRF保护,因为symfony的csrf保护似乎仅适用于表单。 什么是实现此目的的简单方法? 使用表单时,我可以执行$ form-> isValid()来确定CSRF令牌是否通过。我目前正在将要发布的所有内容放入表单中,然后发