我正在开发一个网站,您可以在其中添加好友'另一个用户,比如facebook。现在,我放了一个链接,当你点击它时,就完成了一个AJAX调用。
在坚持新的友谊之前,我检查请求是否是Ajax,但我想进一步增加安全性。一个页面可以有超过10个链接(可能的请求),所以...我不知道我是否只需要一个令牌或每个链接一个令牌。
另一个疑问是......如何使用Symfony生成令牌并检查是否有效?专注于如何在初始控制器上生成令牌,然后,如何在addFriend控制器上验证(接收ajax调用)。
我尝试使用它来生成令牌:
然后检查令牌:
https://symfony.com/doc/current/controller/csrf_token_validation.html
但总是返回令牌不有效。
答案 0 :(得分:6)
最后,我找到了解决问题的方法。
正如@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>
然后,我这样做一个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) {
});
});
最后,使用以下代码检查令牌在控制器上是否有效:
$token = $request->request->get('token');
$isValidToken = $this->isCsrfTokenValid($townId, $token);
谢谢!