美文网首页
IE不支持子域名含有下划线的原因探索

IE不支持子域名含有下划线的原因探索

作者: 邢_3941 | 来源:发表于2018-12-27 14:33 被阅读0次

    2015年底,在一个项目上,遇到了一个问题,系统在chrome下单点登录一切正常,只有在ie下,单点登录后就自动跳出,尝试了很多中方法来解决该问题,终于发现该问题所在。 

    原因:ie下,不支持含有下划线的(子)域名,按下划线的域名会导致cookie丢失

    IE(Internet Explorer) 对于含有下划线的(子)域名,是如何处理其 cookie 的。

    显然这是事后诸葛亮。事实上,曾经有一个Internet Explorer FAQ,描述了IE在呈现含有下划线的域名或子域名的网页时,它会做出怎样的反应。要不是这一次遇到,我甚至不知道它曾被提过。

    我的问题

    系统里的会话cookie在 Chrome 和 Firefox 里运行正常,但是在 IE 不正常。甚至在最新的 IE 版本、IE11 亦是如此。这貌似属于设计上的 bug,在 IE 寿终正寝之前将一直存在。

    或许Project Spartan,又叫 Microsoft Edge将会改变这种陈旧的行为?

    你说的是哪个bug?

    如果你的web应用程序使用的域名或子域名含有下划线,IE 将拒绝存储 cookie,任何种类的 cookie,从会话 cookie 到持久化 cookie。你的 web 服务器将依赖 Set-Cookie header 头,而客户端将乐于无视之。

    [if !supportLists]· [endif]正常的域名:rctest.crc.com.cn。

    [if !supportLists]· [endif]不正常的域名:rc_test.crc.com.cn

    如果你用到了session和会话 cookie,问题就来了。每次页面刷新,客户端的响应将含有一个空的 cookie:header 头,因此服务器将在每次请求都生成一个新的 Set-Cookie header 头。

    如果你的(子)域名含有下划线,cookie就无法在 IE 正常运行。

    什么原因?

    这个行为在微软的kb316112有介绍,它是一个 Windows 补丁,用于解决 CVE MS01-005,可追溯到2001年。

    这是从2001年就出现的 cookie 漏洞,直到今天我们仍然经受其影响。

    最初的CVE修复了这个问题:

    该补丁消除了影响IE的三个漏洞。第一个涉及到 IE 处理没有「.」的 IP 地址的方式。

    如果一个网站指定使用不含「.」的 IP 格式(比如,http://031713501415,而非 http://207.46.131.13),该请求在特定方式下就是不正确的,那么 IE 将认为这个网站不是互联网网站。它将把该网站视作内部网(Intranet)网站【注1】、只能打开内部网网域内的网页,而不能打开正确域下的网页。

    这要求网站只需要较少的安全限制就可运行。

    MS01-051

    那么,为什么到了今天,针对CVE的修复仍然在影响着我们呢?

    做为kb316112的修复部分,微软提出了针对 DNS 下域名的更加严格的校验。这本质上意味着,所有的域名必须遵循 DNS RFC。它最初可追溯到 RFC606 (1973)和 RFC608 (1974)

    猜猜最初的DNS语法没有包含什么?猜对了:下划线

    微软指出,将阻止任何含有不合法的DNS字符的 cookie。

    安全补丁MS01-055将阻止服务器使用不正确的命名语法设置 cookie。含有 cookie 的域名只能在域名和服务器名字中使用字母数字字符(「-」或「.」)。

    如果服务器名字含有其它字符,比如下划线(「_」),那么 IE 将阻止其 cookie。

    安全补丁MS01-055

    下面是我认为它们的错误之处。

    主机名字的确不支持下划线,但是它们在域名里是合法的。不同之处在于「主机名字」和「域名」的解释。

    发布于1997年的 RFC2181,明确地指出:

    DNS本身对于用来表示资源记录的具体标签只做了一个限制,这个限制与标签和全名的长度有关……

    DNS协议的实现不必把任何限制附加到可被使用的标签上。尤其是,DNS 服务器一定不能因为某个域含有可不被某些 DNS 客户端程序所接受的标签而拒绝它。

    RFC2181

    对我而言,微软貌似引入了一种错误的校验,且混淆了主机名字和域名。

    ���6

    相关文章

      网友评论

          本文标题:IE不支持子域名含有下划线的原因探索

          本文链接:https://www.haomeiwen.com/subject/agvrlqtx.html