Mercurial > public > src > rhodecode
changeset 2780:04d2bcfbe7a6 beta
security fix, inspired by django security
announcement: https://www.djangoproject.com/weblog/2012/jul/30/security-releases-issued/
- filter out bad schemes and netloc differences
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Tue, 31 Jul 2012 00:27:22 +0200 |
parents | 4fbbc65e8cd5 |
children | dffb92224edf f4b20558ae16 |
files | rhodecode/controllers/login.py |
diffstat | 1 files changed, 14 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/controllers/login.py Mon Jul 30 23:29:03 2012 +0200 +++ b/rhodecode/controllers/login.py Tue Jul 31 00:27:22 2012 +0200 @@ -26,6 +26,7 @@ import logging import formencode import datetime +import urlparse from formencode import htmlfill from webob.exc import HTTPFound @@ -96,6 +97,19 @@ # send set-cookie headers back to response to update cookie headers = [('Set-Cookie', session.request['cookie_out'])] + allowed_schemes = ['http', 'https', 'ftp'] + parsed = urlparse.urlparse(c.came_from) + server_parsed = urlparse.urlparse(url.current()) + + if parsed.scheme and parsed.scheme not in allowed_schemes: + log.error('Suspicious URL scheme detected %s for url %s' % + (parsed.scheme, parsed)) + c.came_from = url('home') + elif server_parsed.netloc != parsed.netloc: + log.error('Suspicious NETLOC detected %s for url %s' + 'server url is: %s' % + (parsed.netloc, parsed, server_parsed)) + c.came_from = url('home') if c.came_from: raise HTTPFound(location=c.came_from, headers=headers) else: