[Kimchi-devel] [PATCH] security: Prevent XSS attacks
Daniel H Barboza
danielhb at linux.vnet.ibm.com
Mon Apr 28 17:47:38 UTC 2014
Reviewed-by: Daniel Barboza <danielhb at linux.vnet.ibm.com>
On 04/28/2014 10:13 AM, Aline Manera wrote:
> From: Aline Manera <alinefm at br.ibm.com>
>
> Add the following headers to Kimchi responses:
>
> X-Frame-Options DENY;
> X-Content-Type-Options nosniff;
> X-XSS-Protection "1; mode=block";
>
> And Content-Security-Policy for error pages.
>
> Signed-off-by: Aline Manera <alinefm at br.ibm.com>
> ---
> src/kimchi/root.py | 11 +++++++++++
> src/nginx.conf.in | 4 ++++
> 2 files changed, 15 insertions(+)
>
> diff --git a/src/kimchi/root.py b/src/kimchi/root.py
> index 514d75d..8b1d09b 100644
> --- a/src/kimchi/root.py
> +++ b/src/kimchi/root.py
> @@ -47,18 +47,29 @@ class Root(Resource):
> self._cp_config = dict([(key, self.error_development_handler)
> for key in self._handled_error])
>
> + def _set_CSP(self):
> + # set Content-Security-Policy to prevent XSS attacks
> + headers = cherrypy.response.headers
> + headers['Content-Security-Policy'] = "default-src 'self'"
> +
> def error_production_handler(self, status, message, traceback, version):
> + self._set_CSP()
> +
> data = {'code': status, 'reason': message}
> res = template.render('error.html', data)
> +
> if (type(res) is unicode and
> LooseVersion(cherrypy.__version__) < LooseVersion('3.2.5')):
> res = res.encode("utf-8")
> return res
>
> def error_development_handler(self, status, message, traceback, version):
> + self._set_CSP()
> +
> data = {'code': status, 'reason': message,
> 'call_stack': cherrypy._cperror.format_exc()}
> res = template.render('error.html', data)
> +
> if (type(res) is unicode and
> LooseVersion(cherrypy.__version__) < LooseVersion('3.2.5')):
> res = res.encode("utf-8")
> diff --git a/src/nginx.conf.in b/src/nginx.conf.in
> index 967b46b..da6358e 100644
> --- a/src/nginx.conf.in
> +++ b/src/nginx.conf.in
> @@ -47,6 +47,10 @@ http {
> ssl_certificate $cert_pem;
> ssl_certificate_key $cert_key;
>
> + add_header X-Frame-Options DENY;
> + add_header X-Content-Type-Options nosniff;
> + add_header X-XSS-Protection "1; mode=block";
> +
> location / {
> proxy_pass http://localhost:$kimchid_port;
> proxy_set_header Host $host;
More information about the Kimchi-devel
mailing list