如何在Symfony应用程序中禁用基于html的表单的CSRF检查?

How to disable CSRF checks for html-based forms in Symfony app?

提问人:yukitmp 提问时间:8/5/2020 最后编辑:yukitmp 更新时间:8/6/2020 访问量:716

问:

我有这个开源的 Symfony 应用程序,我需要全局禁用 CSRF 检查,或者至少对某些 .除了下面描述的 2 种方法外,我还尝试删除了提及 CSRF 的各种代码行,但没有任何帮助。<forms>

我试过什么:

  1. 我尝试全局禁用 CSRF,如此处所述 如何使用 FOSUserBundle 在 Symfony 3 上全局关闭 CSRF 保护,但问题是在我的 Symfony 应用程序中,目录中没有文件 - 它只包含:、、、、、,但没有 / 文件.ymlroot/configsettings.phpdefault.settings.phpdev.phpprod.phplanguages.php.yml.xml
  2. 我试图禁用特定的 CSFR,如此处所述 如何在symfony中禁用csrf?,但prblem是我的是基于HTML的,而不是基于PHP的。我的 Symfony 应用程序不通过 PHP 创建。<form><form><form>

我的Symfony应用程序:

...
// Authentication
$app->get('/login', '\AgenDAV\Controller\Authentication::loginAction')->bind('login');
$app->post('/login', '\AgenDAV\Controller\Authentication::loginAction');
$app->get('/logout', '\AgenDAV\Controller\Authentication::logoutAction')->bind('logout');

// CSRF protection
$app->before(function(Request $request, Application $app) {
    return \AgenDAV\Csrf::check($request, $app);
});
...
  • 登录表单模板在 中,并在 :root/templates/login.htmlroot/src/controller/Authentication.php
...
return $app['twig']->render('login.html', $template_vars);
...
php symfony silex csrf-token

评论

1赞 Cerad 8/5/2020
令人困惑的帖子。您的意思是发布指向 CalDev Web 客户端的链接吗?它不是一个Symfony应用程序。也许你有一个基于Symfony Silex的应用程序?无论如何,首先要准确指定您正在使用的“Symfony”的版本和类型。
0赞 yukitmp 8/6/2020
我不确定确切的术语,但显然开源项目使用了 Symfony 和 Silex。
0赞 Cerad 8/6/2020
好。Silex 应用程序实际上位于 Web 目录内。这就是为什么在我看来像是 api 之类的东西。这只是一个猜测,但请尝试添加一个 return 语句作为 Csrf:check 方法中的第一行。如果这不起作用,请考虑将 Silex 标签添加到您的问题中。
0赞 Nico Haase 8/6/2020
出于好奇:大量项目使用 CSRF 来增强安全性。您有什么充分的理由要禁用它吗?可能还有其他应该解决的问题,以便您可以保持启用此功能?
0赞 yukitmp 8/6/2020
@NicoHaase我想将日历嵌入为具有自动登录功能的 iframe,但 CSRF 需要该死的令牌,该令牌以某种方式从日历端的 cookie 生成,因此当我将日历登录表单嵌入为 iframe 时,所有浏览器都将该 cookie 视为第三方。我相信通过禁用 CSRF,我将不需要那个该死的令牌(通过 cookie 生成)来登录。不,我的主应用程序和日历应用程序不在同一域中。

答: 暂无答案