除了浏览器主动的预取和缓存之外,网页编写者也可以手动使用LINK的”rel=’dns-prefetch’、rel=’ prefetch’”属性通知浏览器预期DNS或者页面。
5.1 DNS劫持和DNS污染
通常,DNS查询基于UDP且没有任何认证机制,因此DNS查询非常容易被篡改,攻击者可以扮演‘中间人’对DNS请求发起攻击,这将使得最终浏览器获取到一个被篡改的DNS结果。
DNS攻击有劫持和污染两类常用的手段。攻击者可以劫持DNS服务器,取得域名的解析记录控制权之后,修改域名的解析结果。这样,受害者请求解析时,得到的结果将是修改后的内容。这在一些地方ISP(网络服务提供商)中较为常见,ISP会劫持某个域名的DNS。这样,用户访问该网站时就会收到一个假的解析结果。浏览器会先跳转到广告网站上,广告网站弹出广告后,再调到目标网站。
而另一类DNS污染则是一种DNS缓存投毒攻击。攻击者对运行在UDP53的DNS查询进行检测,一旦发现与关键词匹配的请求则立即伪装成目标域名的解析服务器,返回虚假结果。
要减轻DNS劫持攻击的可能性,(1)可以优先选用公共的、可信的DNS解析服务器,例如谷歌的8.8.8.8、8.8.4.4。(2)而为了避免DNS污染,则可以借用其他工具加密查询数据,例如DNSCrypt。
5.2 导航尚未开始时的状态同步问题
浏览器的用户界面是不可少的,在开发人员制作浏览器界面时,一个较大的挑战是开发者是否能够精确地做到消息同步。接下来,我们以遨游浏览器的一个早期版本为例说明消息同步没有处理好可能带来的安全问题。
通过window.open(strURL)打开某个URL后,整个导航流程还处于刚要开始的状态,该浏览器将地址栏修改为strURL,但页面的URL实际上是”about:blank”,在上面的内容了解到,谁创建了about:blank的窗口,谁就有权限修改它的内容。
如果攻击者在别处再次命令这个about:blank的窗口执行一段脚本,或是直接访问该窗口的document对象。改变DOM内容,window.open即将发起的导航过程就会被打断。该浏览器在这种情况下又不会将地址栏再次同步成about:blank,就形成了页面伪造漏洞。
开发者应当确保在窗口确确实实发出全部加载完成(不论正常加载还是访问超时、资源不存在都应一视同仁)的通知之后再去访问窗口属性,并更新用户界面,包括地址栏上显示的内容,这样才能保证页面信息显示的正确性。
6 建立安全连接
根据用户指定的URL,浏览器将选择合适的方式连接,例如HTTP、HTTPS、FTP等。HTTP使用明文传递,它本身无法验证通信双方的身份,也不能证明传输内容的完整性。因此,在网络上流通的HTTP消息基本可以视作是有可能被窃听、篡改的。
中间人攻击是指攻击者与通信的两端分别建立联系,并作为一个‘代理’交换收到的数据,使通信的两端认为他们正私密地、直接地与对方对话,但事实上他们的会话都被攻击者完全控制。
有许多场景需要更安全的通信机制,因此,HTTPS应运而生,采用SSL的HTTPS协议是基于HTTP的‘增强版’,它提供了创建安全信道、提供加密处理、使用证书来认证服务器的能力。在传输HTTPS报文时,所有内容都是加密的,在通信两端均安全实现时,即使通道被窃听,基本上攻击者也只能知道两端有一个连接,而对通信内容则一无所知。
HTTP协议和HTTPS协议同属于应用层(OSI模型的最高层),HTTPS并不是应用层的新协议,它只是对工作在加密连接(TLS或SSL)上的常规HTTP协议的称呼。通常HTTP直接和TCP通信,而使用SSL使,则变成先和SSL通信,再由SSL和TCP通信。所以HTTPS本质仍是HTTP,只不过多带了一层SSL。
HTTPS的信任基于预先安装在浏览器中的第三方机构的证书(这是一些获得认可的企业或组织机构,如VerSign、Microsoft等),HTTPS默认信任这些机构所信任的网站。浏览器在和网站交互时,通过校验证书,即可确定对方是否是自己预期要访问的服务器。
7/13 首页 上一页 5 6 7 8 9 10 下一页 尾页