一、什么是 URL
1. 最直观的理解——网址
URL 的全称是“统一资源定位符”,其设计目的是用来定位网络上的各种资源:图片、视频、音频……
你可以把它理解为:对应的资源在网络上的地址,也即网址。
2. 一个网页里可能访问多个资源
现在我们所能访问到的绝大多数网页都由很多各种资源组成,最常见且可见的是图片,而在我们肉眼看不到的地方, 网页还会自动加载 CSS 文件来美化网页样式、加载 JavaScript 来丰富网站的功能、加载 WASM 来进行高性能的计算……
每一个资源通常都对应着其自己的 URL 。
二、URL 的组成
以易锦网校的网址为例,她长这样:
https://ke.yijincc.com/series/XL100095xxxxxx?uname=7957865
1. 协议
URL 中第一对双斜杠前面的内容叫做协议,浏览器地址栏访问的一般是 http 协议和 https 两种协议。
- http——超级文本传输协议,网站的默认协议
- https——安全超级文本传输协议 ,加密传输的 http 协议
2. 域名或 IP
双斜杠后面的 ke.yijincc.com ,叫做域名,域名通常由个人或公司买下并持有。
一旦公司买下了 yijincc.com 这个域名,公司可以自由部署 ke.yijincc.com 、www.yijincc.com 等不同的域名,这些域名叫做子域名。
但是有些时候我们也可以使用 IP 来访问网站,例如我们搭建在本地的靶场。
不管是域名还是 IP ,都是用来帮助我们连接到服务器的,所以这一部分简而言之,是服务器所在的网络地址。
3. 路径
域名后面的含有斜杠的内容 /series/XL100095xxxxxx 叫做路径。
一个网站上往往有很多页面,一般会给每个网页分配一个路径,有时候这些路径也代表着不同的接口、或者说服务。
这一部分是帮助我们寻找到资源的,所以简而言之是网络资源在服务器上的位置。
4. 参数
URL 中问号后面的内容叫做参数,表示由用户提供给服务器的额外的信息。
参数由参数名和值组成,格式为:
参数名=参数值
例如 uname=7957865 这一对参数,表示的就是给服务器一个名为 uname 的参数,它的值是 7957865 。
服务端处理参数的时候可能会出现漏洞,往往是整个网站沦陷的开始。
三、URL 的其他部分
我们上面展示的是最常见的 URL 形式,其实 URL 中还有其他部分,因为除了协议和域名之外,URL 中所有的其他部分如果没有用到,都是可以省略的。
1. 端口
端口放在域名或 IP 后面,使用英文冒号(:)隔开,是一个数值。
- http 对应 80 端口;
- https 对应 443 端口。
👆由于浏览器会根据协议选择端口,所以通常会隐藏端口,除非服务端把 http 服务运行在其他端口。
2. 哈希
哈希通常放在 URL 最后,使用 # 号隔开,但哈希是不会被传递给服务端的,所以通常没有什么价值。
3. 非常罕见的部分——账号和密码
其实 URL 里也是可以带入账号和密码的,带有账号密码的 URL 长得像这样:
https://lihua:abcd1234@ke.yijincc.com/
👆这表示使用名为 lihua 的用户名+密码 abcd1234 尝试登录。
不过由于绝大部分网站出于加密需求,不采用这种方式登录,所以不要视图从这里对网站进行暴破。
但是,有些漏洞利用会不允许 URL 通过,而开发人员可能不会特意过滤这种格式的 URL ,这种时候可以尝试使用这种格式来绕开过滤。