2017-05-13 1 views
1

우리는 엄격한 콘텐츠 보안 정책 (https://csp.withgoogle.com/docs/strict-csp.html)을 만들기 위해 노력하고 있습니다.이 정책은 리소스가 요청 될 때마다 Apache가 nonce를 작성해야하므로이를 삽입 할 수 있습니다 Nonce를 http 헤더에 추가합니다.Apache 2.4 (콘텐츠 보안 정책 헤더 용)로 nonce 생성

Apache 2.4에서 nonce를 만들려면 어떻게해야합니까?

내가 읽은 CSP 관련 문서는 모두 ""nonce는 서버에서 생성 된 임의의 문자열이며 CSP 헤더에 포함되어 있습니다. "하지만 아무 정보도 찾지 못했습니다. 아파치와 함께하는 방법에 관해서. 당연히 앱 코드를 사용하여이 작업을 수행 할 수 있지만 Apache를 통해 작업하는 것이 더 깨끗한 솔루션처럼 보일 것입니다./모든 단일 페이지가 CSP 헤더를 확보 할 수 있습니다.

답변

0

nonce는 인라인 CSS 및/또는 Javascript 처리기가있는 요소에 삽입해야하므로 응용 프로그램 계층에 삽입해야합니다.

출력 HTML을 구문 분석하고 nonces를 삽입하면 CSP nonces의 전체 목적을 무효화 할 수 있습니다. 웹 서버는 인라인 CSS/JS가 있어야하는지 또는 공격자가 삽입했는지 여부를 알 수 없습니다.

+0

Apache에서는 'SetEnv VARIABLE_NAME variable_value'를 사용하여 응용 프로그램 계층에서 사용할 수있는 서버 변수를 정의 할 수 있습니다. 마찬가지로, Nginx의 논스 : 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. 응용 프로그램 코드에서 필요에 따라 nonce를 추가하고, PHP를 통해 $ _SERVER [ 'UNIQUE_ID']이 (가) 이게 안전한 것으로 보입니까? 나는 html을 파싱하고 nonces를 삽입하는 것에 대한 귀하의 요지를 충분히 이해하고 있는지 잘 모르겠습니다.감사합니다 – KayakinKoder

+0

@KayakinKoder 지나치게 복잡해 보입니다. 애플리케이션에서 nonce를 생성하고 헤더에 직접 삽입하는 것이 훨씬 쉬울 것입니다. 웹 서버를 사용할 필요가 없습니다. – 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 파일에 한 줄 일반적으로 각 페이지 요청마다 임의의 문자열과 동일한 값으로 설정하면 CSP 및 허용 된 인라인 코드에 삽입 할 수 있습니다. PHP를 사용하면 $ _SERVER [ 'UNIQUE_ID'];

3

나는 이것을 단순히 덧글로 추가하는 편이 좋겠지 만 내 평판 < 50은 허용하지 않으므로 대신 대답으로 게시하고 있습니다. 에 대한 응답으로

:

1) 아파치는 mod_unique_id가를 통해 임의의 문자열을 생성

당신이 원하는 수 있도록이하는 "독특한"값이 아니라 "임의"값입니다 CSP nonce로 사용할 때는주의하십시오.

2) 우리는

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

난이 도움이되기를 바랍니다) (우리의 CSP 헤더에 실제로이 작업을 수행하는 방법을 잘이 없습니다 삽입합니다.

+1

감사합니다. 예 : "random"은 매우 강력한 단어입니다. 그것은 거의 사용되지 않아야하며, 나는 나의 대답을 편집했다. 예를 들어 주셔서 감사합니다. – KayakinKoder

관련 문제