Dotclear


Ignore:
Timestamp:
07/25/16 11:25:34 (9 years ago)
Author:
franck <carnet.franck.paul@…>
Branch:
default
Message:

Better this way for CSP directive, 3rd party plugins may use adminPageHTTPHeaderCSP behavior to fulfill directives / addresses #1867

File:
1 edited

Legend:

Unmodified
Added
Removed
  • inc/admin/lib.dc.page.php

    r3291 r3292  
    9090 
    9191          # Display 
    92           $headers = new arrayobject(array()); 
     92          $headers = new ArrayObject(array()); 
    9393 
    9494          # Content-Type 
     
    104104          # Content-Security-Policy 
    105105          if ($core->blog->settings->system->csp_admin_on) { 
    106                $headers['csp'] = 
    107                     "Content-Security-Policy: ". 
    108                          "default-src ".($core->blog->settings->system->csp_admin_default ? $core->blog->settings->system->csp_admin_default : 'self')." ; ". 
    109                          "script-src ".($core->blog->settings->system->csp_admin_script ? $core->blog->settings->system->csp_admin_script : "'self' 'unsafe-inline' 'unsafe-eval'")." ; ". 
    110                          "style-src ".($core->blog->settings->system->csp_admin_style ? $core->blog->settings->system->csp_admin_style : "'self' 'unsafe-inline'")." ; ". 
    111                          "img-src ".($core->blog->settings->system->csp_admin_img ? $core->blog->settings->system->csp_admin_img : "'self' data: media.dotaddict.org"). 
    112                          (version_compare(phpversion(),'5.4','>=') ? " ; report-uri ".DC_ADMIN_URL."csp_report.php" : ''); 
     106               // Get directives from settings if exist, else set defaults 
     107               $csp = new ArrayObject(array()); 
     108               $csp['default-src'] = $core->blog->settings->system->csp_admin_default ? $core->blog->settings->system->csp_admin_default : "'self'"; 
     109               $csp['script-src'] = $core->blog->settings->system->csp_admin_script ? $core->blog->settings->system->csp_admin_script : "'self' 'unsafe-inline' 'unsafe-eval'"; 
     110               $csp['style-src'] = $core->blog->settings->system->csp_admin_style ? $core->blog->settings->system->csp_admin_style : "'self' 'unsafe-inline'"; 
     111               $csp['img-src'] = $core->blog->settings->system->csp_admin_img ? $core->blog->settings->system->csp_admin_img : "'self' data: media.dotaddict.org"; 
     112 
     113               # --BEHAVIOR-- adminPageHTTPHeaderCSP 
     114               $core->callBehavior('adminPageHTTPHeaderCSP',$csp); 
     115 
     116               // Construct CSP header 
     117               $directives = array(); 
     118               foreach ($csp as $key => $value) { 
     119                    if ($value) { 
     120                         $directives[] = $key.' '.$value; 
     121                    } 
     122               } 
     123               if (count($directives)) { 
     124                    if (version_compare(phpversion(),'5.4','>=')) { 
     125                         // csp_report.php needs PHP ≥ 5.4 
     126                         $directives[] = "report-uri ".DC_ADMIN_URL."csp_report.php"; 
     127                    } 
     128                    $headers['csp'] = "Content-Security-Policy: ".implode(" ; ",$directives); 
     129               } 
    113130          } 
    114131 
Note: See TracChangeset for help on using the changeset viewer.

Sites map