Phoenixでcontent-security-policy(CSP)に対応する

Phoenix.Controller.put_secure_browser_headers に対して、Mapを渡すことでデフォルト値とマージして評価してくれます

なのでCSPに対応したい場合は、キーを "content-security-policy" にして値を渡すことで解決できます。

    plug :put_secure_browser_headers, %{
      "content-security-policy" =>
         # 以下は例
        """
          default-src 'self';
          script-src 'self' 'unsafe-eval' 'unsafe-inline';
          style-src 'self' 'unsafe-inline';
          connect-src 'self' ws: wss:;
          img-src 'self' data:;
        """
        |> String.replace("\n", " ")
        |> String.trim()
    }

Phoenixのセキュリティに関するチェックをしてくれる https://github.com/nccgroup/sobelow ではこの部分をチェックしてくれるので

参考

erlef.github.io

EEF Security WG のページは勉強になります。