知己知彼,将心比心。
0x00
① # 的含义
#
代表网页中的一个位置,其右边的字符就是该位置的标识符。如下 URL,就是代表网页 index.html
的 print
位置,浏览器读取这个URL后,会自动将print位置滚动至可视区域。网页位置指定标识符,有两个方法。一是使用锚点,<a name="print"></a>
,二是使用 id 属性,比如 <div id="print">
http://www.example.com/index.html#print
例子:
② HTTP 请求不包括
#
是用来指导浏览器动作的,对服务器端完全无用。所以,HTTP 请求中不包括 #。
比如,访问下面的网址,
http://www.example.com/index.html#print
浏览器实际发出的请求是这样的:
GET /index.html HTTP/1.1
Host: www.example.com
可以看到,只是请求index.html,根本没有#print
的部分。
③ # 后的字符
在第一个#
后面出现的任何字符,都会被浏览器解读为位置标识符。这意味着,这些字符都不会被发送到服务器端。
比如,下面URL的原意是指定一个颜色值:
http://www.example.com/?color=#fff
但是,浏览器实际发出的请求是:
GET /?color= HTTP/1.1
Host: www.example.com
可以看到,#fff
被省略了。只有将#
转码为%23
,浏览器才会将其作为实义字符处理。也就是说,上面的网址应该被写成:
http://example.com/?color=%23fff
例子:
xsschallenge 的 level-9 中提交的 payload 如下,如果使用 Hackbar
进行提交,默认提交的参数是不会经过 URL 编码的,而 payload 中 &
会被认为是连接符,#
会被认为是位置标识符,所以连同后面的内容都一起不被服务器读取,导致正真上传的参数只有 payload 前面的 java
可以使用编码之后再上传参数
④ 改变 # 不触发网页重载
单单改变#
后的部分,浏览器只会滚动到相应位置,不会重新加载网页。
比如,从
http://www.example.com/index.html#location1
改成
http://www.example.com/index.html#location2
浏览器不会重新向服务器请求 index.html
。
⑤ 改变 # 会改变浏览器的访问历史
每一次改变#后的部分,都会在浏览器的访问历史中增加一个记录,使用后退
按钮,就可以回到上一个位置。
这对于ajax
应用程序特别有用,可以用不同的#
值,表示不同的访问状态,然后向用户给出可以访问某个状态的链接。
值得注意的是,上述规则对IE 6
和IE 7
不成立,它们不会因为#
的改变而增加历史记录。
⑥ window.location.hash 读取 # 值
window.location.hash
这个属性可读可写(document.location.hash 只可读)。读取时,可以用来判断网页状态是否改变;写入时,则会在不重载网页的前提下,创造一条访问历史记录。
⑦ onhashchange 事件
这是一个HTML 5
新增的事件,当#
值发生变化时,就会触发这个事件。IE8+
、Firefox 3.6+
、Chrome 5+
、Safari 4.0+
支持该事件。
它的使用方法有三种:
window.onhashchange = func;
<body onhashchange="func();">
window.addEventListener("hashchange", func, false);
对于不支持onhashchange
的浏览器,可以用setInterval
监控location.hash
的变化。
0x01 ?
① 连接作用
通过?
连接域名和参数
http://www.xxx.com/Show.asp?id=77&nameid=2905210001&page=1
② 清除缓存
http://www.xxxxx.com/index.html
http://www.xxxxx.com/index.html?test123123
两个 URL 打开的页面一样,但是第二个 URL 有问号,说明不调用缓存的内容,而认为是一个新地址,重新读取。
因为在做 http 请求的时候,如果浏览器检测到你的地址完全没变,会从缓存里读取先前请求过的数据,不再发送请求。有些时候是页面资源的加载,有些时候是 API 的 get 请求,都有可能。加上这个,会让浏览器认为这是一个新的地址,从而保证重新获取资源。
0x02 &
不同参数之间的间隔符
http://www.xxx.com/Show.asp?id=77&nameid=2905210001&page=1