Isa*_*sca 7 php ajax jquery csrf symfony
我正在开发一个网站,你可以"添加朋友"另一个用户,比如facebook.现在,我放了一个链接,当你点击它时,就完成了一个AJAX调用.
在坚持新的友谊之前,我检查请求是否是Ajax,但我想进一步增加安全性.一个页面可以有超过10个链接(posible请求),所以...我不知道我是否只需要一个令牌,或每个链接一个令牌.
另一个疑问是....如何使用Symfony生成令牌并检查是否有效?重点关注如何在初始控制器上生成令牌,然后,如何在addFriend控制器(接收ajax调用)上进行验证.
我试图用它来生成一个令牌:
然后这要检查令牌:
https://symfony.com/doc/current/controller/csrf_token_validation.html
但总是返回该令牌是不是有效.
最后,我找到了解决问题的方法.
正如@yceruto评论的那样,可以生成一个csrf token
没有任何形式的内容,请看:http://symfony.com/doc/current/reference/twig_reference.html#csrf-token
有了这个,我可以通过以下方式在TWIG上创建我的链接:
<a data-id="{{ user.id }}" class="card-link clickable sendFriendRequest" data-token="{{ csrf_token(user.id) }}">ADD_FRIEND</a>
Run Code Online (Sandbox Code Playgroud)
然后,我这样做一个AJAX调用:
$('.elementsList').on('click','.sendFriendRequest', function () {
var userId = $(this).data('id');
var token = $(this).data('token');
$.post('/users/sendFriendRequest/'+userId, {token: token}
).done(function (response) {
//Some code here
}).fail(function (response) {
});
});
Run Code Online (Sandbox Code Playgroud)
最后,使用以下代码检查令牌在控制器上是否有效:
$token = $request->request->get('token');
$isValidToken = $this->isCsrfTokenValid($townId, $token);
Run Code Online (Sandbox Code Playgroud)
谢谢!