如何在我的Django Web应用程序中阻止Internet Explorer浏览器访问?

4
我正在开发一个 Web 应用程序,该应用程序与 Internet Explorer 不兼容(Web Socket、JSON、安全问题)。在我的应用程序与 IE 兼容之前,我想知道如何拒绝来自 IE 客户端的连接。谢谢!

1
请不要这样做。给他们一个友好的提示信息,说明您的应用程序不兼容,并鼓励他们使用新的浏览器或安装Chrome框架。 - Nick Tomlin
可能是如何在Django中检测浏览器类型?的重复问题。 - Maxime Lorant
1
我通常会同意Nick的观点,但既然涉及IE浏览器,就关闭他们的浏览器吧。 - Kevin
<!--[if IE]> <div class="error">此服务目前与Internet Explorer不兼容。在我们解决问题之前,请使用其他浏览器。对此给您带来的不便,我们深表歉意。 <![endif]--> - 发出警告是很好的,这样他们至少可以看到它的样子。如果您想直截了当,可以像这样做:&lt;!--[if IE]&gt; &lt;!-- &lt;![endif]--&gt;(您的页面内容)&lt;!--[if IE]&gt; --&gt; &lt;![endif]--&gt;,如果浏览器是IE,则应该有效地注释掉整个代码。但我不建议如此直接。 - Ariane
@NickTomlin,你不觉得如果用户仍然尝试使用我的应用程序会更加沮丧吗?我想显示一条消息并拒绝连接。这真的很糟糕吗? - Guillaume Vincent
2个回答

4

还有另一种方法!只需使用设置变量DISALLOWED_USER_AGENTS,并确保在您的网站上安装了CommonMiddleware中间件。

例如:

import re
DISALLOWED_USER_AGENTS = (re.compile(r'msie\s*[2-7]', re.IGNORECASE), )

干杯!


1
请提供使用 DISALLOWED_USER_AGENTS 的示例。 - Sheik797
在那个级别上更改默认的403消息是否可能? - midori
我猜是的,因为Django 1.9引发了PermissionDenied异常。因此,您可以更改默认的handler403。请参考https://docs.djangoproject.com/en/1.9/topics/http/views/#customizing-error-views。 - mnach

4
创建一个中间件,解析request.META['HTTP_USER_AGENT']。如果发现用户正在使用IE浏览器,则给他一个友好的提示信息(例如通知或小警报框),告诉他你的网站没有为他的浏览器进行优化 :)。

一些代码示例:Django方式

middleware.py (有关更多信息,请参见文档)

class RequestMiddleware():
    def process_request(self, request):
        if request.META.has_key('HTTP_USER_AGENT'):
            user_agent = request.META['HTTP_USER_AGENT'].lower()
            if 'trident' in user_agent or 'msie' in user_agent:
                 request.is_IE = True
            else:
                 request.is_IE = False

           # or shortest way:
           request.is_IE = ('trident' in user_agent) or ('msie' in user_agent)

您的基本模板:

{% if request.is_IE %}<div class="alert">Watch out! You're using IE, but unfortunately, this website need HTML5 features...</div>{% endif %}

然后将其添加到您的中间件列表中。

优化:纯HTML方式

如果您只想像我所做的那样显示一条消息,您可以使用HTML条件注释:

<!--[if IE]> <div class="alert">...</div><![endif]-->

这应该是MISE而不是Trident吗? - psychok7
@psychok7确实,在用户代理字符串中,“MSIE”比“Trident”更常见:http://www.useragentstring.com/pages/Internet%20Explorer/ 我会修复它。 - Maxime Lorant
1
根据微软公司的说法(https://msdn.microsoft.com/en-us/library/ms537512(VS.85).aspx):自Internet Explorer 10起,条件注释不再被标准模式支持。使用特性检测来提供有效的回退策略,以处理浏览器不支持的网站功能。 - J0ANMM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接