るいすのブログ

オタクエンジニアの雑記

ownCloudとCloudFlare環境で構築をするとログインができなくなる現象 - Content Security Policy


さっき自車校の卒検が終わりました。 結果が発表される前に不合格という結果を教えていただきました。 納得がいかない長谷川です。こんにちは。

前回に続き、またCSP(Content Security Policy)のことで申し訳ないです。 ただ僕と同じような環境で困っている人は絶対いると思うので記事にしたいと思います。

 

 

症状

console

ownCloudのログインページが正常に表示されるもログインボタンを押しても全く反応がありません。 上記画像のようなエラーです。

Refused to execute inline script because it violates the following
Content Security Policy directive: "script-src 'self' 'unsafe-eval'".
Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.

セキュリティの概念から Content Security Policy に反したのでインラインスクリプトの実行を拒否しました。っていう感じです(多分)

じゃあヘッダーに書き加えればいいじゃんっていうことになるのですがどうもこのポリシーを書き換えてもダメなようです。(理由は分からない)

 

 

CloudFlare - Rocket Loader とは

Rocket Loader は非同期のJavaScriptをまとめて仮想のブラウザでロードした後、うんたらかんたら...。 ロード時間が大幅に短縮されます。どういった原理かはよく分かりませんが。 どういった動きをするのか全く分かりませんがJavaScriptを呼び出す部分で書き換えを行っていたりします。

What does Rocket Loader do?

 

 

 

対処

rocket-loader

CloudFlare の Rocket Loader を off にするだけです。 HTMLタグが書き換えられることによって Content Security Policy が機能しないのかなと思います。(間違ってる恐れ大アリ)

これで正常にログインができるようになりました。

 

 

code

ownCloudはファイル側に Content Security Policy が設定されているので別途 nginx などで設定する必要性はないようですね。