##// END OF EJS Templates
login: simplify came_from validation...
Søren Løvborg -
r5510:a0a9ae75 stable
parent child Browse files
Show More
@@ -58,21 +58,8 b' class LoginController(BaseController):'
58 58
59 59 def _validate_came_from(self, came_from):
60 60 """Return True if came_from is valid and can and should be used"""
61 if not came_from:
62 return False
63
64 parsed = urlparse.urlparse(came_from)
65 server_parsed = urlparse.urlparse(url.current())
66 allowed_schemes = ['http', 'https']
67 if parsed.scheme and parsed.scheme not in allowed_schemes:
68 log.error('Suspicious URL scheme detected %s for url %s',
69 parsed.scheme, parsed)
70 return False
71 if server_parsed.netloc != parsed.netloc:
72 log.error('Suspicious NETLOC detected %s for url %s server url '
73 'is: %s' % (parsed.netloc, parsed, server_parsed))
74 return False
75 return True
61 url = urlparse.urlsplit(came_from)
62 return not url.scheme and not url.netloc
76 63
77 64 def index(self):
78 65 c.came_from = safe_str(request.GET.pop('came_from', ''))
@@ -105,18 +105,14 b' class TestLoginController(TestController'
105 105 ('file:///etc/passwd',),
106 106 ('ftp://ftp.example.com',),
107 107 ('http://other.example.com/bl%C3%A5b%C3%A6rgr%C3%B8d',),
108 ('//evil.example.com/',),
108 109 ])
109 110 def test_login_bad_came_froms(self, url_came_from):
110 111 response = self.app.post(url(controller='login', action='index',
111 112 came_from=url_came_from),
112 113 {'username': TEST_USER_ADMIN_LOGIN,
113 'password': TEST_USER_ADMIN_PASS})
114 self.assertEqual(response.status, '302 Found')
115 self.assertEqual(response._environ['paste.testing_variables']
116 ['tmpl_context'].came_from, '/')
117 response = response.follow()
118
119 self.assertEqual(response.status, '200 OK')
114 'password': TEST_USER_ADMIN_PASS},
115 status=400)
120 116
121 117 def test_login_short_password(self):
122 118 response = self.app.post(url(controller='login', action='index'),
General Comments 0
You need to be logged in to leave comments. Login now