URI和URL
URI是Uniform、Resource、Identify缩写:
- Uniform:规定统一的格式可以方便的处理多种不同类型的资源,而不用根据上下文环境来识别资源指定的访问方式,加入新增的协议方案也更容易。
- Resource:“可标识的任何东西“,不仅可以单一,也可以是多数的集合。
- Identify:可标识的对象,也成为标识符。
URI是由某个协议方案表示的资源的定位标识符。URI是用字符串表示某一互联网资源,URL表示资源的地点,URL是URI的子集。
表示指定的URI,要使用涵盖全部必要信息的绝对URI、绝对URL以及相对URL。
绝对URI格式:
以上参考《图解HTTP》
URL编码
URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。
- 网址路径的编码用的是utf-8编码。
- 查询字符串的编码用的是操作系统的默认编码
- GET和POSt方法的编码是网页的编码
URL编码也称为百分号编码,因为它的编码方式非常简单,使用”%“+”16进制形式“。非ASCII字符,RFC文档建议使用utf-8对其进行编码得到相应的字节,对每个字节执行百分号编码。
web编程的时候先使用Javascript对URL编码,然后再向服务器提交,可以保证客户端只是用一种编码方法向服务器发出请求。
urldecode二次解码
昨天PHP代码审计的时候碰到了这个问题,做下笔记。
urldecode是PHP中的一个解码函数,会出现二次解码问题是因为当PHP在处理提交的数据时,本身会先进行一次url解码,再遇到urldecode函数,就会出现二次解码问题。
二次解码有可能会造成SQL注入的问题。假设输入一串:
?id=1%2527
首先PHP把%25解码成了%-->?id=1%27,然后urldecode函数再次解码变成?id=1',实现单引号注入。