前端安全_URL


URL结构:

协议名称:层级符号(//)凭证信息@服务器地址:端口/文件路径?参数=值#片段

协议名称:

  1. 不区分大小写 (以下写法是等价的):
http://www.baidu.com
hTTp://www.baidu.com
  1. 协议号由IANA分配
  2. 支持伪协议(javascriptdata)
  3. 以冒号结束,只能出现字母数字+-.这些符号。但是浏览器会忽略前导换行符和空格,IE浏览器会忽略0x01-0x1F之间的字符。换行符和制表符可以出现在协议名中间
<a href="    javascript:alert(1)">前制表符</a><br>
<a href=" javascript:alert(1)">前空格</a><br>
<a href="
javascript:alert(1)">前换行符</a><br>
<a href="javascript
:alert(1)">后换行符</a><br>
<a href="javas    cript:alert(1)">中制表符</a><br>
<a href="javas
cript:alert(1)">中换行符</a><br>

层级符号:

RFC1738:每个层级结构都应该包含//,但是没有说明非层级URL应该如何解析。

<a href="javascript://%0aalert(1)">非层级使用分层符号</a>
<a href="javascript://%0dalert(1)">非层级使用分层符号2</a>

凭证:

如果协议不需要凭证,但是进行强加的话,协议并不会处理,而非浏览器

http://user:pass@www.baidu.com/

IP地址

由什么决定了可以使用什么格式的ip地址?(使用哪个C类库)
一般所支持的ip地址:

  1. IPV4(http://127.0.0.1/)
  2. 16进制( http://0x27.0x6D.0X7A.0X7A/)
  3. 16进制+10进制(http://0x27.7174778/)
  4. 8进制(http://0‭4733275172‬/)

片段ID

片段id不会传输回服务端,仅仅用于客户端的数据储存与交换

URL解析器流程

  1. 扫描:左边部分为协议名称,如果没有扫描到或者出现不该有的字符则为相对URL
  2. 去除分层符号//
  3. 依次扫描/ ? # 进行截取获得目标请求域信息

    1. 判断是否有@符号,如果有就截取登录信息
    2. 获取目标URL地址
  4. 判断路径是否存在(? #)
  5. 判断查询字符串是否存在(#)
  6. 取片段ID(#)

其他

IRI

IRI是一种算法,它用于对Unicode编码进行特殊处理。可以将不同国家的语言编码成一致。主要是为了解决各个国家不同语言进行创建域名。

域名欺骗攻击:

аpple.com 西里尔字母
αpple.com 希腊字母

声明:小透明 | 渗透测试,代码审计,Web安全|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 前端安全_URL


emmmmmmmmmmm............