2013-07-25 5 views
0

Firefox의 컨텐츠 보안 정책에 문제가 있습니다. 이것은 내 기본 코드입니다 :Firefox 20.0의 CSP : default-src 없음

<?php include_once 'corepolicies/csp.php'; ?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
     <script src="scripts/script.js"></script> 
     <link href="style/style.css" rel="stylesheet" type="text/css"/> 
    </head> 
    <body> 
     <form id="formTest" method="post" action="index.php"> 
      <input type="text" name="getText"/> 
      <input type="submit" value="insert"/> 
     </form> 
     <div id="inDataForm"> 
      <?php 
       if(isset($_POST['getText'])){ 
        echo $_POST['getText']; 
       } 
      ?> 
     </div> 
     <script src="listeners/listener.js"></script> 
    </body> 
</html> 

이것은 약간의 데이터를 제출하는 PHP의 간단한 코드입니다. 이것은 내 CSP 헤더를 설정 내 PHP 파일입니다

<?php 

$rule = "default-src 'none'; "; 

$rule .= "script-src ". 
     "http://localhost/CSP/scripts/script.js ". 
     "http://localhost/CSP/listeners/listener.js ". 
     "http://code.jquery.com/jquery-1.9.1.js; "; 

$rule .= "style-src http://localhost/CSP/style/style.css;"; 

foreach (array("X-WebKit-CSP", "X-Content-Security-Policy", "Content-Security-Policy") as $csp){ 
    header($csp . ": " . $rule); 
} 

?> 

내가 모든 IE에서 같이 잘 작동하지만 나는 파이어 폭스를 실행하면 적용되지 않는 크롬에서 내 웹 페이지를로드하려고 제대로 CSP. 그것은 내 스크립트와 내 스타일이 CSP 스크립트 src = 'none'과 style-src = 'none'을 위반한다고 말합니다. 따라서 script-src 및 style-src에 대한 규칙은 보이지 않으며 이유를 알지 못합니다.

아무도 도와 줄 수 있습니까? Firefox 20.0을 사용 중입니다.

+0

:-) 도움이 될 생각 나는 PHP 사람이 아니지만 귀하의 헤더가 다음과 같을 것으로 추측하고 있습니다. default-src 'none'; script-src http : ...; style-src http : ...; 대신 "allow 'none'"을 사용하고 X-Content-Security-Policy 헤더 만 설정하면 어떻게됩니까? Firefox는 그 기간에 전환이 진행 중이며 X-Content-Security-Policy 헤더 만 지원했습니다. 디버그 메시지가 오도 된 경우가있었습니다. – oreoshake

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 나는 'none'허용을 시도했지만 여전히 문제가 있습니다. – user2581348

+0

또한 CSP는 개별 파일, 최신 브라우저의 호스트 및 경로로는 해결되지 않습니다. 그래서 내 추측은 script/style-src의 값이 유효하지 않음을 나타내는 메시지가 있었고, 다시 none으로 되돌려 둡니다. – oreoshake

답변

0

해결책을 찾은 것 같습니다. 코드에 약간의 변경을 시도했지만 Firefox에서 CSP를 사용하는 방식에 흥미로운 것을 발견했습니다. 기본적으로 브라우저는 파일의 소스 (예 : JS 또는 CSS 파일, jQuery JS 파일)를 확인할 수 없습니다. 그래서 그는 스크립트와 스타일에 'self', jQuery에 대해서 http://code.jquery.com과 같은 소스 도메인에서만 작동합니다. 내가 무슨 짓을했는지 는 클라이언트의 사용자 에이전트에 대한 제어를 설정하고, 파이어 폭스 22.0 이하이면 내가 할 것은이 헤더 사용할 수 있습니다 :

X-Content-Security-Policy: default-src 'none'; script-src 'self' http://code.jquery.com; style-src 'self'; 

을 그리고 내가 있었다 잘 : 를 작동 인라인 스크립트가 걱정 되긴하지만 파이어 폭스는 기본적으로 CSP 헤더를 사용할 때 인라인 스크립트를 비활성화합니다.

그래서 내 코드는 하나입니다 : 물론

<?php 
function isFirefox(){ 
    $browser = $_SERVER['HTTP_USER_AGENT']; 
    $pos = strpos($browser, "Firefox"); 
    if($pos){ 
     $pos = strpos($browser, "/", $pos); 
     $version = substr($browser, $pos, 4); 
     $version = intval($version); 
     if($version <= 22) return TRUE; 
     else return FALSE; 
    } 
} 

$rule = "default-src 'none'; "; 

$rule .= "script-src ". 
     "http://localhost/scripts/script.js ". 
     "http://localhost/listeners/listener.js ". 
     "http://code.jquery.com/jquery-1.9.1.js; "; 

$rule .= "style-src http://localhost/style/style.css;"; 

if(isFirefox()){ 
    $rule = "default-src 'none'; script-src 'self' http://code.jquery.com; style-src 'self';"; 
} 

foreach (array("X-WebKit-CSP", "X-Content-Security-Policy", "Content-Security-Policy") as $csp){ 
    header($csp . ": " . $rule); 
} 
?> 

그냥 증거, 그것은 휴대용 또는 아무것도 아니다, 그러나 누군가가 내 같은 문제가있는 경우 나는

관련 문제