[PATCH] login: strip possible prefix from came_from if it's present
Thomas De Schampheleire
patrickdepinguin at gmail.com
Wed Sep 16 14:27:14 UTC 2015
On September 16, 2015 3:55:42 PM GMT+02:00, Andrew Shadura <andrew at shadura.me> wrote:
># HG changeset patch
># User Andrew Shadura <andrew at shadura.me>
># Date 1442411574 -7200
># Wed Sep 16 15:52:54 2015 +0200
># Node ID 69ea9fc01a602f290b9e78b7cd057a899fa5ff37
># Parent 889ff0f436c8b57f5962e204e699cbabc6d33aac
>login: strip possible prefix from came_from if it's present
>
>Also, reject came_from URL not belonging to our application.
>
>diff --git a/kallithea/controllers/login.py
>b/kallithea/controllers/login.py
>--- a/kallithea/controllers/login.py
>+++ b/kallithea/controllers/login.py
>@@ -63,6 +63,7 @@ class LoginController(BaseController):
>
> parsed = urlparse.urlparse(came_from)
> server_parsed = urlparse.urlparse(url.current())
>+ base_prefix = request.environ.get('SCRIPT_NAME', '')
> allowed_schemes = ['http', 'https']
> if parsed.scheme and parsed.scheme not in allowed_schemes:
> log.error('Suspicious URL scheme detected %s for url %s',
>@@ -72,6 +73,11 @@ class LoginController(BaseController):
> log.error('Suspicious NETLOC detected %s for url %s server url '
> 'is: %s' % (parsed.netloc, parsed, server_parsed))
> return False
>+ if not parsed.path.startswith(base_prefix):
>+ log.error('Path outside of the application prefix %s for
>url %s'
>+ 'is: %s' % (base_prefix, parsed))
>+ return False
>+
> return True
>
> def _redirect_to_origin(self, origin):
>@@ -81,7 +87,11 @@ class LoginController(BaseController):
>
> def index(self):
> c.came_from = safe_str(request.GET.get('came_from', ''))
>- if not self._validate_came_from(c.came_from):
>+ base_prefix = request.environ.get('SCRIPT_NAME', '')
>+
>+ if self._validate_came_from(c.came_from):
>+ c.came_from = c.came_from.split(base_prefix).pop()
>+ else:
> c.came_from = url('home')
>
> not_default = self.authuser.username != User.DEFAULT_USER
I think you should add test cases here.
And regarding issue #104, did you verify that without that patch, the current
problem was not present?
/Thomas
More information about the kallithea-general
mailing list