mirror of https://github.com/zulip/zulip.git
55426894cd
This works around a bug in Django in handling the error case of a client sending an inappropriate HTTP `Host:` header. Various internal Django machinery expects to be able to casually call `request.get_host()`, which will attempt to parse that header, so an exception will be raised. The exception-handling machinery attempts to catch that exception and just turn it into a 400 response... but in a certain case, that machinery itself ends up trying to call `request.get_host()`, and we end up with an uncaught exception that causes a 500 response, a chain of tracebacks in the logs, and an email to the server admins. See example below. That `request.get_host` call comes in the midst of some CSRF-related middleware, which doesn't even serve any function unless you have a form in your 400 response page that you want CSRF protection for. We use the default 400 response page, which is a 26-byte static HTML error message. So, just send that with no further ado. Example exception from server logs (lightly edited): 2017-10-08 09:51:50.835 ERR [django.security.DisallowedHost] Invalid HTTP_HOST header: 'example.com'. You may need to add 'example.com' to ALLOWED_HOSTS. 2017-10-08 09:51:50.835 ERR [django.request] Internal Server Error: /loginWithSetCookie Traceback (most recent call last): File ".../django/core/handlers/exception.py", line 41, in inner response = get_response(request) File ".../django/utils/deprecation.py", line 138, in __call__ response = self.process_request(request) File ".../django/middleware/common.py", line 57, in process_request host = request.get_host() File ".../django/http/request.py", line 113, in get_host raise DisallowedHost(msg) django.core.exceptions.DisallowedHost: Invalid HTTP_HOST header: 'example.com'. You may need to add 'example.com' to ALLOWED_HOSTS. During handling of the above exception, another exception occurred: Traceback (most recent call last): File ".../django/core/handlers/exception.py", line 109, in get_exception_response response = callback(request, **dict(param_dict, exception=exception)) File ".../django/utils/decorators.py", line 145, in _wrapped_view result = middleware.process_view(request, view_func, args, kwargs) File ".../django/middleware/csrf.py", line 276, in process_view good_referer = request.get_host() File ".../django/http/request.py", line 113, in get_host raise DisallowedHost(msg) django.core.exceptions.DisallowedHost: Invalid HTTP_HOST header: 'example.com'. You may need to add 'example.com' to ALLOWED_HOSTS. |
||
---|---|---|
.. | ||
jinja2 | ||
__init__.py | ||
backends.py | ||
dev_settings.py | ||
dev_urls.py | ||
legacy_urls.py | ||
prod_settings_template.py | ||
settings.py | ||
terms.md.template | ||
test_settings.py | ||
urls.py | ||
wsgi.py |