【问题标题】:Symfony 3 - Content Security PolicySymfony 3 - 内容安全策略
【发布时间】:2018-02-14 12:53:25
【问题描述】:

我对内容安全策略有疑问。每当我尝试将 JavaScript 包含到我的项目中时,都会收到内容安全策略错误。

<!DOCTYPE html>
<html>
    <head>
        <title>Symfony</title>
        <script src="{{ asset('myscript.js') }}"></script>
    </head>
    <body>
      // ...
    </body>
</html>

我做错了什么?

我已经尝试过:

【问题讨论】:

  • 你使用哪个版本的 symfony?您可以复制/粘贴您的配置吗?您的资产网址是否在 https 下?文档 (symfony.com/blog/…)
  • 我使用的是 Symfony 3.4 版本,所有 url 都在 http 下。配置与安装后相同。

标签: javascript php symfony content-security-policy easyadmin


【解决方案1】:

好的,我找到了解决方案。我在代码中添加了一个事件订阅者,它设置了“Content-Security-Policy”标头。

<?php

namespace AppBundle\Subscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;

/**
 * Class ResponseSubscriber
 * @package AppBundle\Subscriber
 */
class ResponseSubscriber implements EventSubscriberInterface
{
    /** @inheritdoc */
    public static function getSubscribedEvents()
    {
        return [
            KernelEvents::RESPONSE => 'onResponse'
        ];
    }

    /**
     * Callback function for event subscriber
     * @param FilterResponseEvent $event
     */
    public function onResponse(FilterResponseEvent $event)
    {
        $response = $event->getResponse();

        $policy = "default-src 'self' 'unsafe-inline';"
            . "script-src 'self' 'unsafe-inline'";

        $response->headers->set("Content-Security-Policy", $policy);
        $response->headers->set("X-Content-Security-Policy", $policy);
        $response->headers->set("X-WebKit-CSP", $policy);
    }
}

# app/config/services.yml
services:
    # ...
    app.responseSubscriber:
        class: AppBundle\Subscriber\ResponseSubscriber
        autowire: true

【讨论】:

  • 注意:从 SF4.3 开始,FilterResponseEvent 已重命名为 ResponseEvent。此外,应避免使用已弃用的 X-* 标头
猜你喜欢
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 2021-01-11
  • 2016-06-22
  • 2014-07-26
  • 2018-12-29
  • 2020-11-08
相关资源
最近更新 更多