gpt4 book ai didi

php - 如何为 Symfony3 上的 AJAX 调用添加 CSRF 保护?

转载 作者:可可西里 更新时间:2023-11-01 13:59:37 26 4
gpt4 key购买 nike

我正在开发一个网站,您可以在其中“添加好友”另一个用户,就像 facebook 所做的那样。现在,我放了一个链接,当你点击它时,一个 AJAX 调用就完成了。

在保持新友谊之前,我检查请求是否是 Ajax,但我想更进一步并增加更多安全性。一个页面可以有超过 10 个链接(可能的请求),所以......我不知道我是否只需要一个 token ,或者每个链接一个 token 。

另一个疑问是......如何使用 Symfony 生成 token 并检查其是否有效?专注于如何在初始 Controller 上生成 token ,然后如何在 addFriend Controller (接收 ajax 调用)上进行验证。

我试图用它来生成一个 token :

http://api.symfony.com/3.1/Symfony/Component/Security/Csrf/TokenGenerator/TokenGeneratorInterface.html

然后检查 token :

https://symfony.com/doc/current/controller/csrf_token_validation.html

但始终返回 token 无效有效。

最佳答案

最后我找到了解决问题的方法。

正如@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 在您的 Controller 上是否有效:

$token = $request->request->get('token');

$isValidToken = $this->isCsrfTokenValid($townId, $token);

谢谢!

关于php - 如何为 Symfony3 上的 AJAX 调用添加 CSRF 保护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45129212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com