2017-05-13 9 views
1

私たちは厳密なコンテンツセキュリティポリシー(https://csp.withgoogle.com/docs/strict-csp.html)の作成に取り組んでいます。これは、リソースが要求されるたびにApacheがnonceを作成する必要があります。 nonceをhttpヘッダーに追加します。Apache 2.4(コンテンツセキュリティポリシーヘッダ用)でナンスを生成

Apache 2.4でノンスを作成するにはどうすればよいですか?

私が読んだCSP関連のドキュメントはすべて、「ノンスはサーバー上で生成されたランダムな文字列であり、CSPヘッダーに含まれています...」というメッセージが表示されますが、情報は見つかりませんでしたApacheでこれを行う方法について説明します。もちろん、アプリケーションコードでこれを行うこともできますが、Apache経由で行うことは、より洗練されたソリューション/すべての単一ページがCSPヘッダーを取得するように見えます。

答えて

0

インラインCSSおよび/またはJavascriptハンドラを持つ要素にナンスを挿入する必要があるため、アプリケーション層に挿入する必要があります。

アウトプットHTMLを解析してナンスを挿入すると、CSPノンスの全目的が無効になります。インラインCSS/JSが存在するはずか、攻撃者によって挿入されたかどうかはWebサーバーには分かりません。

+0

Apacheでは、SetEnv VARIABLE_NAME variable_valueを使用して、アプリケーション層で使用できるサーバー変数を定義できます。同様に、Nginxのnoncesは:https://scotthelme.co.uk/csp-nonce-support-in-nginx/ – KayakinKoder

+0

私はHTMLを解析することに関してあなたの意見を理解すれば100%確信していませんが、mod_unique_idはそうするかもしれないようですトリック? 1.)apacheはmod_unique_idでランダムな文字列を生成し、UNIQUE_IDという名前の環境変数を作成します。2.これをCSPヘッダーに挿入します(実際にこれを行う方法はわかりません)。3.アプリケーションコードで、 $ _SERVER ['UNIQUE_ID']を経由するPHPの場合 これは安全ですか?私は完全にhtmlの解析/ noncesの挿入についてあなたのポイントを理解しているかどうかはわかりません。ありがとう – KayakinKoder

+0

@ KayakinKoderあまりにも複雑なようです。アプリケーションでナンスを生成し、それをヘッダに挿入するほうがはるかに簡単です。 Webサーバーを関与させる必要はありません。 – duskwuff

2

mod_unique_idを見つけた後、これは非常に簡単でした(http://httpd.apache.org/docs/current/mod/mod_unique_id.html)。

1.)mod_unique_idを有効にします。 ます。LoadModule unique_id_moduleモジュール/ mod_unique_id.so

2)mod_unique_idは、一意の文字列(user3526609の回答を参照してください、これはや)あなたのために十分にランダムであってもなくてもよいし、サーバ変数UNIQUE_IDを生成します。これは、httpd.confに1つのライン一般的ですそのランダム文字列と同じに設定され、各ページリクエストでCSPとホワイトリストに必要なインラインコードに挿入することができます。 PHPを使用した場合、$ _SERVER ['UNIQUE_ID'];

3

これをコメントとして追加することをお勧めしますが、私の評判である< 50はそれを許可していないため、代わりにこれを投稿しています。対応して

1)Apacheはmod_unique_id

を経由してランダムな文字列を生成し、これが「ユニーク」の値ではない「ランダム」値であるので、あなたがなりたいかもしれませんそのCSP nonceとしての使用に注意してください。

2)私たちは、私はこのことができます願っています(実際にこれを行う方法がわからない)私たちのCSPヘッダに

<IfModule mod_headers.c> 
    <FilesMatch "\.(htm|html|php)$"> 
     Content-Security-Policy: script-src 'strict-dynamic' 'nonce-%{UNIQUE_ID}e' 'unsafe-inline' ' https:; 
    </FilesMatch> 
</IfModule> 

これを挿入します。

+1

ありがとうございました "ランダム"は非常に強い言葉ですそれはめったに使われるべきではない、私は私の答えを編集した。例のおかげで、それはまさに正しいことです。 – KayakinKoder

関連する問題