This site is the archived OWASP Foundation Wiki and is no longer accepting Account Requests.
To view the new OWASP Foundation website, please visit https://owasp.org

Difference between revisions of "Content Security Policy Cheat Sheet"

From OWASP
Jump to: navigation, search
m (Point to the official site)
 
(25 intermediate revisions by 5 users not shown)
Line 1: Line 1:
Content Security Policy (CSP) is an important standard that is aimed to prevent attacks such as cross-site scripting (XSS) and more importantly to reduce the harm caused by content injection attacks.
+
__NOTOC__
 +
<div style="width:100%;height:160px;border:0,margin:0;overflow: hidden;">[[File:Cheatsheets-header.jpg|link=]]</div>
  
= Introduction =
+
The Cheat Sheet Series project has been moved to [https://github.com/OWASP/CheatSheetSeries GitHub]!
  
Content Security Policy (CSP) is an important standard that is aimed to prevent attacks such as cross-site scripting (XSS) and '''more importantly to reduce the harm caused by content injection attacks.'''
+
Please visit [https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html Content Security Policy Cheat Sheet] to see the latest version of the cheat sheet.
 
 
= Main Reference =
 
 
 
The most recent version of the CSP standard can be found here:  https://w3c.github.io/webappsec/specs/content-security-policy/
 
 
 
= CSP Cheat Sheet - Guide for main technologies =
 
 
 
This section summarizes the implementation and/or support for CSP in different technologies (either acting as Client or Server).
 
See below the details.
 
 
 
Google Chrome
 
Google Chrome based web applications and theme uses a manifest file named manifest.json.
 
There is a section in the manifest file where the developer can declare the CSP directives.
 
For further details, please refer to Content Security Police for Google Chrome.
 
{
 
  // Required
 
  "manifest_version": 2,
 
  "name": "My Extension",
 
  "version": "versionString",
 
 
 
  // Recommended
 
  "default_locale": "en",
 
  "description": "A plain text description",
 
  "icons": {...},
 
 
 
  // Pick one (or none)
 
  "browser_action": {...},
 
  "page_action": {...},
 
 
 
  // Optional
 
  "author": ...,
 
  "automation": ...,
 
  "background": {
 
    // Recommended
 
    "persistent": false
 
  },
 
  "background_page": ...,
 
  "chrome_settings_overrides": {...},
 
  "chrome_ui_overrides": {
 
    "bookmarks_ui": {
 
      "remove_bookmark_shortcut": true,
 
      "remove_button": true
 
    }
 
  },
 
  "chrome_url_overrides": {...},
 
  "commands": ...,
 
  "content_pack": ...,
 
  "content_scripts": [{...}],
 
  "content_security_policy": "policyString",
 
  "converted_from_user_script": ...,
 
  "current_locale": ...,
 
  "devtools_page": ...,
 
  "externally_connectable": {
 
    "matches": ["*://*.example.com/*"]
 
  },
 
  "file_browser_handlers": [...],
 
  "homepage_url": "http://path/to/homepage",
 
  "import": ...,
 
  "incognito": "spanning or split",
 
  "input_components": ...,
 
  "key": "publicKey",
 
  "minimum_chrome_version": "versionString",
 
  "nacl_modules": [...],
 
  "oauth2": ...,
 
  "offline_enabled": true,
 
  "omnibox": {
 
    "keyword": "aString"
 
  },
 
  "optional_permissions": ...,
 
  "options_page": "aFile.html",
 
  "options_ui": ...,
 
  "page_actions": ...,
 
  "permissions": [...],
 
  "platforms": ...,
 
  "plugins": [...],
 
  "requirements": {...},
 
  "sandbox": [...],
 
  "script_badge": ...,
 
  "short_name": "Short Name",
 
  "signature": ...,
 
  "spellcheck": ...,
 
  "storage": {
 
    "managed_schema": "schema.json"
 
  },
 
  "system_indicator": ...,
 
  "tts_engine": ...,
 
  "update_url": "http://path/to/updateInfo.xml",
 
  "web_accessible_resources": [...]
 
}
 
Apache
 
It is required to add lines to the httpd.conf configuration file, or inside .htaccess files or virtual host sections.
 
Also, it is required to enable mod_headers, and after inserting the lines according to your specific needs, restart Apache.
 
The headers below are good examples to add in the files (change/modify it properly):
 
 
 
Header unset Content-Security-Policy
 
Header add Content-Security-Policy "default-src 'self'"
 
Header unset X-Content-Security-Policy
 
Header add X-Content-Security-Policy "default-src 'self'"
 
Header unset X-WebKit-CSP Header add X-WebKit-CSP "default-src 'self'"
 
WordPress
 
Most of the configuration can be done in Apache, however, Wordpress has a plugin that allows developers/administrator to set up their own custom policies. The plugin however is not update for 2 years. Use it carefully.
 
A workaround can be the creation or modification of the file htaccess under wp-admin directory.
 
An example:
 
<IfModule mod_headers.c>
 
Header set Content-Security-Policy "default-src 'self';
 
img-src 'self' data: http: https: *.gravatar.com;
 
script-src 'self' 'unsafe-inline' 'unsafe-eval';
 
style-src 'self' 'unsafe-inline' http: https: fonts.googleapis.com;
 
font-src 'self' data: http: https: fonts.googleapis.com themes.googleusercontent.com;"
 
</IfModule>
 
nginx
 
For nginx, it is required to edit the nginx.conf file.
 
 
 
# config to don't allow the browser to render the page inside an frame or iframe
 
# and avoid clickjacking http://en.wikipedia.org/wiki/Clickjacking
 
# if you need to allow [i]frames, you can use SAMEORIGIN or even set an uri with ALLOW-FROM uri # https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options
 
add_header X-Frame-Options SAMEORIGIN;
 
 
 
# when serving user-supplied content, include a X-Content-Type-Options: nosniff header along with the Content-Type: header,
 
# to disable content-type sniffing on some browsers.
 
# https://www.owasp.org/index.php/List_of_useful_HTTP_headers
 
# currently suppoorted in IE > 8 http://blogs.msdn.com/b/ie/archive/2008/09/02/ie8-security-part-vi-beta-2-update.aspx
 
# http://msdn.microsoft.com/en-us/library/ie/gg622941(v=vs.85).aspx
 
# 'soon' on Firefox https://bugzilla.mozilla.org/show_bug.cgi?id=471020
 
add_header X-Content-Type-Options nosniff;
 
 
 
# This header enables the Cross-site scripting (XSS) filter built into most recent web browsers.
 
# It's usually enabled by default anyway, so the role of this header is to re-enable the filter for
 
# this particular website if it was disabled by the user.
 
# https://www.owasp.org/index.php/List_of_useful_HTTP_headers
 
add_header X-XSS-Protection "1; mode=block";
 
 
 
# with Content Security Policy (CSP) enabled(and a browser that supports it(http://caniuse.com/#feat=contentsecuritypolicy),
 
# you can tell the browser that it can only download content from the domains you explicitly allow
 
# http://www.html5rocks.com/en/tutorials/security/content-security-policy/
 
# https://www.owasp.org/index.php/Content_Security_Policy
 
# I need to change our application code so we can increase security by disabling 'unsafe-inline' 'unsafe-eval'
 
# directives for css and js(if you have inline css or js, you will need to keep it too).
 
# more: http://www.html5rocks.com/en/tutorials/security/content-security-policy/#inline-code-considered-harmful
 
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://ssl.google-analytics.com https://assets.zendesk.com https://connect.facebook.net; img-src 'self' https://example.com https://example1.com; style-src https://example.com; font-src https://example.com; frame-src https://example.com; object-src 'none'";
 
 
server {
 
listen 443 ssl default deferred;
 
server_name .forgott.com;
 
 
ssl_certificate the_path_of_your_certificate.crt;
 
ssl_certificate_key the_path_of_your_key.key;
 
 
 
Django
 
Django recently introduced a package with a number a collection of models, views and middlewares to aid secure Django based projects.
 
The installation of this model can be done through from Python packages repository:
 
pip install django-security
 
Also, the the latest development version, install from django-security repository on GitHub:
 
git clone https://github.com/sdelements/django-security.git
 
cd django-security
 
sudo python setup.py install
 
For each Djangon’s application, the settings.py file must be modified.
 
 
 
INSTALLED_APPS = (
 
    ...
 
    'security',
 
    ...
 
    )
 
Middleware modules can be added to MIDDLEWARE_CLASSES list in settings file. Particularly, it is our interesting the ContentSecurityPolicyMiddleware. It sends Content Security Policy (CSP) header in HTTP response.:
 
MIDDLEWARE_CLASSES = (
 
...
 
'security.middleware.DoNotTrackMiddleware',
 
'security.ContentSecurityPolicyMiddleware',
 
'security.middleware.ContentNoSniff',
 
'security.middleware.XssProtectMiddleware',
 
'security.middleware.XFrameOptionsMiddleware',
 
)
 
 
 
 
 
 
 
= Authors and Primary Editors =
 
 
 
Neil Mattatall - neil[at]owasp.org<br/>
 
Denis Mello - ddtaxe
 
 
 
= Other Cheatsheets =
 
{{Cheatsheet_Navigation}}
 
 
 
[[Category:Cheatsheets]]
 

Latest revision as of 14:35, 15 July 2019

Cheatsheets-header.jpg

The Cheat Sheet Series project has been moved to GitHub!

Please visit Content Security Policy Cheat Sheet to see the latest version of the cheat sheet.