summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2014-04-16 23:46:20 +0200
committerMorris Jobke <hey@morrisjobke.de>2014-04-16 23:46:20 +0200
commit5a1a056c6d163be9bc8f1e62eb10231bc644c210 (patch)
tree1a059aeda5bb1566d1aaa3ce1750c05b1afcc470
parent2f6eed4f9d4d5b48815138afe2c589cd7f27ae01 (diff)
parentc123dc7de4d9dde46bd31dbf6211704f1b4bb82d (diff)
downloadnextcloud-server-5a1a056c6d163be9bc8f1e62eb10231bc644c210.tar.gz
nextcloud-server-5a1a056c6d163be9bc8f1e62eb10231bc644c210.zip
Merge pull request #8183 from owncloud/move-security-headers
Move security headers
-rw-r--r--lib/base.php29
-rw-r--r--lib/private/json.php2
-rw-r--r--lib/private/template.php23
-rw-r--r--lib/public/appframework/http/jsonresponse.php1
-rw-r--r--tests/lib/appframework/http/JSONResponseTest.php7
5 files changed, 29 insertions, 33 deletions
diff --git a/lib/base.php b/lib/base.php
index 6ea77aa7a58..7098f480e27 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -213,6 +213,34 @@ class OC {
}
}
+ /*
+ * This function adds some security related headers to all requests served via base.php
+ * The implementation of this function has to happen here to ensure that all third-party
+ * components (e.g. SabreDAV) also benefit from this headers.
+ */
+ public static function addSecurityHeaders() {
+ header('X-XSS-Protection: 1; mode=block'); // Enforce browser based XSS filters
+ header('X-Content-Type-Options: nosniff'); // Disable sniffing the content type for IE
+
+ // iFrame Restriction Policy
+ $xFramePolicy = OC_Config::getValue('xframe_restriction', true);
+ if($xFramePolicy) {
+ header('X-Frame-Options: Sameorigin'); // Disallow iFraming from other domains
+ }
+
+ // Content Security Policy
+ // If you change the standard policy, please also change it in config.sample.php
+ $policy = OC_Config::getValue('custom_csp_policy',
+ 'default-src \'self\'; '
+ .'script-src \'self\' \'unsafe-eval\'; '
+ .'style-src \'self\' \'unsafe-inline\'; '
+ .'frame-src *; '
+ .'img-src *; '
+ .'font-src \'self\' data:; '
+ .'media-src *');
+ header('Content-Security-Policy:'.$policy);
+ }
+
public static function checkSSL() {
// redirect to https site if configured
if (OC_Config::getValue("forcessl", false)) {
@@ -512,6 +540,7 @@ class OC {
self::checkConfig();
self::checkInstalled();
self::checkSSL();
+ self::addSecurityHeaders();
$errors = OC_Util::checkServer();
if (count($errors) > 0) {
diff --git a/lib/private/json.php b/lib/private/json.php
index 4ccdb490a6c..34f81c3b8cf 100644
--- a/lib/private/json.php
+++ b/lib/private/json.php
@@ -119,8 +119,6 @@ class OC_JSON{
* Encode and print $data in json format
*/
public static function encodedPrint($data, $setContentType=true) {
- // Disable mimesniffing, don't move this to setContentTypeHeader!
- header( 'X-Content-Type-Options: nosniff' );
if($setContentType) {
self::setContentTypeHeader();
}
diff --git a/lib/private/template.php b/lib/private/template.php
index c6851c6cc8d..610d5fbc8e5 100644
--- a/lib/private/template.php
+++ b/lib/private/template.php
@@ -64,29 +64,6 @@ class OC_Template extends \OC\Template\Base {
$this->path = $path;
parent::__construct($template, $requesttoken, $l10n, $themeDefaults);
-
- // Some headers to enhance security
- header('X-XSS-Protection: 1; mode=block'); // Enforce browser based XSS filters
- header('X-Content-Type-Options: nosniff'); // Disable sniffing the content type for IE
-
- // iFrame Restriction Policy
- $xFramePolicy = OC_Config::getValue('xframe_restriction', true);
- if($xFramePolicy) {
- header('X-Frame-Options: Sameorigin'); // Disallow iFraming from other domains
- }
-
- // Content Security Policy
- // If you change the standard policy, please also change it in config.sample.php
- $policy = OC_Config::getValue('custom_csp_policy',
- 'default-src \'self\'; '
- .'script-src \'self\' \'unsafe-eval\'; '
- .'style-src \'self\' \'unsafe-inline\'; '
- .'frame-src *; '
- .'img-src *; '
- .'font-src \'self\' data:; '
- .'media-src *');
- header('Content-Security-Policy:'.$policy); // Standard
-
}
/**
diff --git a/lib/public/appframework/http/jsonresponse.php b/lib/public/appframework/http/jsonresponse.php
index 6628c4514d9..6d029b7464a 100644
--- a/lib/public/appframework/http/jsonresponse.php
+++ b/lib/public/appframework/http/jsonresponse.php
@@ -49,7 +49,6 @@ class JSONResponse extends Response {
public function __construct($data=array(), $statusCode=Http::STATUS_OK) {
$this->data = $data;
$this->setStatus($statusCode);
- $this->addHeader('X-Content-Type-Options', 'nosniff');
$this->addHeader('Content-type', 'application/json; charset=utf-8');
}
diff --git a/tests/lib/appframework/http/JSONResponseTest.php b/tests/lib/appframework/http/JSONResponseTest.php
index b9b7c7d6382..fbaae1b9227 100644
--- a/tests/lib/appframework/http/JSONResponseTest.php
+++ b/tests/lib/appframework/http/JSONResponseTest.php
@@ -79,13 +79,6 @@ class JSONResponseTest extends \PHPUnit_Framework_TestCase {
$this->assertEquals($expected, $this->json->render());
}
-
- public function testShouldHaveXContentHeaderByDefault() {
- $headers = $this->json->getHeaders();
- $this->assertEquals('nosniff', $headers['X-Content-Type-Options']);
- }
-
-
public function testConstructorAllowsToSetData() {
$data = array('hi');
$code = 300;