Я пишу метод представления Django 1.3, который требует использования TLS/SSL. Я хочу полностью удалить соединение, если HttpRequest получен без использования TLS/SSL и НЕ возвращает какой-либо ответ. Это по соображениям безопасности.
В настоящее время я возвращаю ответ так:
def some_view(request):
if not request.is_secure():
return HttpResponse(status=426)
...
Однако возврат 426 - Upgrade Required
создает несколько проблем:
- Это часть предлагаемого стандарта с мая 2000 года (RFC 2817) и не является официальным стандартом HTTP.
- HttpResponse открыт для атаки "человек-в-середине" (MITM). Как указано в комментариях здесь, если сервер возвращает любой тип ответа клиенту без установления соединения TLS/SSL, которое сначала устанавливается, MITM может захватить ответ, изменить его перенаправить в другое место и доставить вредоносный ответ повторно на клиента.
Если перенаправление сервера из URI HTTP в URI HTTPS открыто для той же атаки MITM, как указано выше.
Итак, как вы можете полностью удалить соединение внутри метода представления Django 1.3 без возврата какого-либо типа HttpResponse?