从QQ密码修改的小问题回顾下URL Fragment

上个星期天晚上约11点半,左耳朵耗子在新浪微博上吐槽QQ安全中心密码修改的问题,引来不少围观。QQ安全中心的兄弟收到用户反馈后,第一时间fix bug并发布,其高效着实令人佩服。

当时也围观了下,问题并不复杂,是由于业务代码对于url的不恰当处理导致的(详见本文第3点),涉及url fragment(#)的内容,于是顺便重温了下这块的内容。

文章主要参考了httpwatch博客的一篇文章:《6 Things You Should Know About Fragment URLs》

其中1-5点的内容比较基础,6-7点的内容对于ajax应用的开发有不错的指导意义,可以了解下。

1、#右边的字符,代表了一个页面的特定位置

比如下面的url

 http://www.example.com/index.html#casper

浏览器会寻找页面里面,name属性跟casper匹配的a标签,并自动滚动定位到该位置,如下

<a name="casper">页面会自动滚动到这个标签所在的位置</a>

 

2、HTTP请求里,不会带上#后面的部分

在地址栏里输入http://www.cnblogs.com/#casper,打开调试工具查看网络请求,会发现#casper并没有出现再网络请求中,如图所示

 

3、#后面的所有字符,都会被浏览当作位置标识符

关于这点,不少新手,包括老手,一不小心就掉坑里了。举个最新的例子,前不就做耳朵耗子在微博上吐槽腾讯安全中心密码修改的问题,如图

果断测试并抓了下包,一下就发现问题了:#后面的字符被截断了,于是便得到了错误的校验提示

https://aq.qq.com/cn2/ajax/get_psw_sgn?psw=Ae#ba234aaafff

 

4、改变#不会导致页面重新加载,但是会改变浏览器历史记录

关于这点很容易测试,假设当前访问的页面是http://www.qq.com,打开控制台,分别输入如下命令看下区别(是否刷新),然后,再查看window.history有什么区别(历史记录是否变化)

location.href += '#caper';  //页面不会刷新
location.href += '?visitor=caper';  //页面刷新

在普通的网页浏览中,我们每点击一个网页链接,就会在浏览器历史记录中新增一条浏览记录,并通过浏览器的导航功能轻松进行'上一步'、'下一步'的操作。

但对于ajax应用,url通常是不会变化的,尤其是单页面应用。这也就意味着,用户习以为常的浏览器导航功能(上一步、下一步)失去了作用,这在体验上是比较糟糕的。通过#,开发者可以利用不同的id,标识当前页面所处状态,提升用户体验。

 

5、JS中可以通过window.location.hash来读取或改变#的值

没什么好讲的,可结上一点简单测试下 :)

 

6、谷歌的网络蜘蛛默认会忽略#后面的内容

谷歌网络蜘蛛负责爬取网页的内容,以及网页里面的链接,它们会成为google搜索索引的一部分。网络蜘蛛会抓取并分析HTML,但由于它并不是浏览器程序,也没有javascript引擎,页面上用来加载显示内容的javascript并不会被执行。因此,#后面的字符会被网络蜘蛛忽视,只抓取#前面的内容,举例:

链接一:http://www.cnblogs.com/#casper
链接二:http://www.cnblogs.com/#chyingp

对于网络蜘蛛来说,链接一、链接二其实是一样的,它只会抓取http://www.cnblogs.com的内容,尽管两个链接可能展示的是不同的内容

这点无论对于开发者,还是搜索引擎都是不利的,前者辛苦创作的内容(应用)少了很多被访问的机会,而后者则失去了进一步丰富其内容索引的机会,特别是在ajax应用越来越多的今天。

为了解决这个问题,google提供了一个解决方案:hash bang,只要将#改成#!即可,实现大致为:当网络蜘蛛遇到#!时候,会自动将#!identifier转成_escaped_fragment_=identifier形式的参数,修改下之前的链接

链接一(新):http://www.cnblogs.com/#!casper
链接二(新):http://www.cnblogs.com/#!chyingp

在网络蜘蛛眼里,上面的链接是这样的

链接一(转化后):http://www.cnblogs.com/?_escaped_fragment_=casper
链接二(转化后):http://www.cnblogs.com/?_escaped_fragment_=chyingp

这里有两个注意点:

  1. 将#改成!#告诉网络蜘蛛:我们支持这个解决方案:hash bang
  2. 相应的,我们的应用也需要具备相应的支持能力,对于网络蜘蛛带escaped_fragment=casper的GET请求,需要能够提供相应的网页内容

更多内容,请参考:http://support.google.com/webmasters/bin/answer.py?hl=en&answer=174992

 

7、补充内容:hash bang的应用(注意这里的例子有些误导)

看了网上不少这方面的内容,都是以twitter为例子,但由于中国的特殊国情,访问twitter略麻烦,于是举个离我们比较近的例子:QQ空间。

应该很多人都有在用QQ空间,打开QQ空间,并点击“日志”,观察下当前的url

http://user.qzone.qq.com/替换成自己的QQ号码/infocenter#!app=2&via=QZ.HashRefresh&pos=catalog_list

可以发现,infocenter后面用的是#!,按照之前的讲解,我们稍稍做下修改,回车访问,证实我们的猜想。

http://user.qzone.qq.com/替换成自己的QQ号码/infocenter?_escaped_fragment_=app=2&via=QZ.HashRefresh&pos=catalog_list

 

2013/04/02添加

重新测试了下,空间目前不支持_escaped_fragment_,因此即使加了这个参数,也是会定位到个人中心

1、空间加#!的原因
    1)缓存考虑
    2)为可能的索引优化做准备

2、没支持_escaped_fragment_的原因:

    非技术实现上的困难,因为目前的产品性质对于这块优化的需求不大

这块的例子,据说twitter是做了的,但得FQ才能测试,先TODO一下。

时间: 2024-09-09 15:27:08

从QQ密码修改的小问题回顾下URL Fragment的相关文章

QQ密码怎么修改 PC/手机版QQ修改密码方法

第一步:首先登陆QQ账号,点击自己QQ头像! 第二步:在弹出界面中选择限权设置! 第三步:点击"安全设置",选择"修改密码". 第四步:然后根据要求修改密码就可以了!   手机QQ密码修改 1.首先登陆手机qq,向右滑动找到设置并点击! 2.进入设置界面,选择"设备锁.账号安全" 3.找到"修改密码"并点击! 4.在出现的界面中输入新密码,设置好后点击确定!

qq企业邮箱密码在哪改 qq企业邮箱密码修改教程

企业邮箱密码修改只要在设置中找到帐户就可以修改了,方法非常的简单. 1.我们先使用旧密码登录到腾讯企业邮箱管理后面,然后在顶部菜单点击"设置"然后找到"账户"选项卡 2.在账户安全中,点击"修改密码"如下图红框处所示. 3.然后我们只要根据提示填写原密码与要修改的新密码之后再点击"保存更改"按钮 4.点击"保存更改" 从上图密码修改过程来看这个密码修改与QQ邮箱密码修改步骤是完全一样的呀,大家去试一下吧.

通过案例分析Android WindowManager解析与骗取QQ密码的过程_Android

 Windows Manager是一款窗口管理终端,可以远程连接到Linux的X桌面进行管理,与服务器端产生一个session相互通信. 最近在网上看见一个人在乌云上提了一个漏洞,应用可以开启一个后台Service,检测当前顶部应用,如果为QQ或相关应用,就弹出一个自定义window用来诱骗用户输入账号密码,挺感兴趣的,总结相关知识写了一个demo,界面如下(界面粗糙,应该没人会上当吧,意思到了就行哈=, =): Window&&WindowManager介绍 分析demo之前,先要整理总

QQ密码找回方法全攻略(QQ被盗怎么要回QQ密码呢)_安全教程

目前QQ木马品种繁多,功能强大,且易学易用,连初学者也会用!正因为这样,QQ木马才那么容易泛滥成灾,现在的网吧,学校机房--30%都可能被人装上了木马,况且大家的防盗意识不高,QQ被盗已是常见事.当QQ被盗了,怎么才可以要回呢?!这是我在网上回答网友N遍的问题了,现在总结一下供大家参考: 要想要回QQ有必要了解下QQ是怎么被盗的,"小黑客们" 常用以下几种盗取QQ: (1)装木马程序.QQ被盗95%都是中了别人装的木马程序.什么叫木马程序你也不必要理解,就当作是你上QQ时有个东西记录了

微信任意用户密码修改漏洞分析

[转]网友曝光微信密码漏洞 柳岩马化腾账号被入侵(图) 在微信官方的首页上发现新增了如下功能模块 微信功能模块 访问后看到这个功能.来了兴趣 微信重设密码 在这个页面输入一个已经注册了微信的手机号. 重设密码过程界面 得到如下提示 重设界面 选择我已收到验证码就跳转到一个修改密码的页面,如下 输入密码 在这一步抓包.得到如下包文 代码 将包文中的verifycode进行重复提交后发现会提示 这样的话.就要想办法去突破. 经过一系列尝试后发现如果在phone=18666666666的号码后面添加不

通过案例分析Android WindowManager解析与骗取QQ密码的过程

Windows Manager是一款窗口管理终端,可以远程连接到Linux的X桌面进行管理,与服务器端产生一个session相互通信. 最近在网上看见一个人在乌云上提了一个漏洞,应用可以开启一个后台Service,检测当前顶部应用,如果为QQ或相关应用,就弹出一个自定义window用来诱骗用户输入账号密码,挺感兴趣的,总结相关知识写了一个demo,界面如下(界面粗糙,应该没人会上当吧,意思到了就行哈=, =): Window&&WindowManager介绍 分析demo之前,先要整理总结

用瑞星密码保护功能保护QQ密码

毫无疑问,网络即时通讯工具已经成了我们工作.生活中不可缺少的一部分,上网第一步的习惯性操作就是打开QQ.MSN等.一些人甚至把它们的重要性提到了与手机可以匹敌的地位,一旦发生QQ密码被盗无法登录的情况 损失可谓损失大矣!多年来联系的同学.朋友一去不复返了!正因为如此,大部分人都有防止密码被盗的安全意识,但现在的木马层出不穷,除了平时养成定期修改密码并保证密码的复杂性等良好的习惯外,我们还应该用软件的专业功能来保护密码,以确保这类软件密码的安全. 瑞星防火墙2007版有一个非常强大的的功能--"密

如何防止QQ密码被破解

一般盗号者想得到我们的QQ密码,都要使用各种密码破解软件.当我们的QQ被别人盯上时,如何保护好自己的密码呢?在此我们向大家介绍几种常见而且有效的方法. 一."Q"过不留痕-防止本地破解 本地破解基本都是通过破解QQ登录后保存在本地硬盘上的信息文件从而得到密码.显然,要想堵住这个漏洞必须从"登录"和"离开"入手,尽量保护好你的信息文件(包括聊天记录文件等,因为这也有可能导致密码泄漏),要不就干脆删除它.另外,对于使用暴力软件得盗号者,"Q

如何截取QQ密码和聊天内容、去掉QQ广告栏、添加QQ尾巴

前言 思路分析 进入QQ进程 远程注入DLL 截取QQ登录密码 截取本机QQ账号和昵称 截取聊天内容 增加QQ尾巴 去掉QQ广告栏 郑重申明 结束语 前言 中国网民没有不熟悉QQ的,QQ玩家没有不知道珊瑚虫和彩虹的去广告显IP版QQ的,有段时间QQ尾巴也很盛行,就是每次聊天的时候它自动在你的聊天文字后面加一段话,欺骗你的QQ网友上当.如今的网络就好比武侠小说里的江湖,行走江湖的剑客须有绝世武功方可不倒于对手的剑下. 本文将向你讲述如何截取QQ密码和聊天内容,如何将QQ的广告栏去掉,并添加自定的Q