位置:首页 > 安全分类 > WEB安全

web安全基础概述

2021-05-24 16:58:56 来源:
简介web发展历程 1945-1994年:史前时期1)1945年美国科学家Vannevar Bush虚构出来一台名为Memex的桌面设备作为web理念的最早期原型,Memex用于在微缩胶卷上创建和标注跨文档链接,类似
web发展历程 1945-1994年:史前时期

1)1945年美国科学家Vannevar Bush虚构出来一台名为Memex的桌面设备作为web理念的最早期原型,Memex用于在微缩胶卷上创建和标注跨文档链接,类似于现在的超链接

2)20世纪60年代,IBM的GML(Generalized Markup Language,通用标记语言)诞生,用可供机器读取识别的指令作为文档的标识符,后期逐渐演变成SGML(Standard Generalized Markup Language,标准通用标记语言)

3)20世纪70年代左右Tim Berners-Lee和Dan Connolly草拟了HTML(HyperText Markup Language,超文本标记语言)规范,其继承自SGML,在HTML方案之后又开发出了HTTP协议;在1991-1993年之间,Tim Berners-Lee 开发的world wide web程序诞生,www项目突然演变成一股热潮,服务器浏览器相继出现

1995-1999年:第一次浏览器大战

到20世纪90年代中期,web基本站稳了脚跟,此时桌面软件巨鳄微软也开始投入资源开发自己的浏览器,并在1996年在Windows系统默认安装IE,微软的该举动引发了俗称的”浏览器大战”。由于缺少统一标准,各浏览器为了实现兼容性任意调整核心HTML的特性,往往便埋下了安全隐患。

2000-2003年:平淡期

1)由于微软操作系统的绑定策略,IE获得了80%的市场占有率,一家独大,于是在开发进度上开始怠慢

2)同时微软推出了XMLHttpRequest,实现客户端JavaScript和服务端之间不受限制的异步http通信,而无需额外的时间开销和页面重载,直接推动了之后web2.0的发展。

2004年之后:web2.0及第二次浏览器大战

1)XMLHttpRequest将web推到了新的高度,但同时也带来了安全隐患,在2002年,蠕虫和浏览器漏洞成了媒体经常能看到的主题,在微软的绝对统治下,并且其对安全问题的忽视态度,逐渐引发了矛盾的爆发

2)直到2004年,Mozilla Firefox出现,针对的便是IE糟糕的安全性和与标准的不兼容性,并迅速占领20%的市场,以及Safari和Opera在智能手机领域的大力发展。基本奠定了当前所常见的浏览器市场份额。

url结构解析

说起web,就有必要了解下url(Uniform Resource Locator,统一资源定位符),一个完整的url结构如下图

url层级结构

协议名称

协议名称由一串不区分大小写的字符串组成,以单个冒号结束,表明获取该资源时需要使用的协议,常见的如http:、https:、ftp:等等几十项,实际上,常用浏览器和第三方应用往往还支持若干额外的协议,其中一些还会带来安全问题,典型的几种伪协议如:data:、JavaScript:等

层级url标记符

也就是紧跟在协议名称后面的双斜杠,RFC规定在授权信息之前,每个层级结构的绝对URL里都应该包括固定的字符串“//”。非层级结构的URL示例:mailto:user@example.com?subject=hello+word

访问资源的身份验证

在URL中该部分属于可选项,在向服务器请求资源时,有可能需要在该位置指定一个用户名或密码,这个抽象的URL语法本身,与具体的用户名密码等身份验证信息的交换无实质关系,身份验证信息的传递是和协议相关的,对不支持身份验证的协议,如果在URL里强行加入这部分信息该如何处理,协议并未作出规定;如果没有提供身份验证信息,浏览器默认以匿名的方式获取数据,在http和其它几种协议里,意味着没有传送任何身份验证信息;对ftp协议,这包含着一个名为ftp的账号和一个假的密码

服务器地址

对完整的层级URL而言,服务器地址部分必须 指定一个不区分大小写的域名(例如example.com)、一个IPv4地址(例如127.0.0.1)或在一对方括号里的IPv6地址(例如[0:0:0:0:0:0:0:1]),用来标识请求资源所处的服务器位置,Firefox还接受在一对方括号里的IPv4地址和 主机名,其它浏览器则拒绝该写法。在RFC里只允许符合规范的IP地址写法,但大多数应用所依赖的标准C类库却比较灵活,可以接受八进制、十进制和十六进制的写法,例如:

1)http://127.0.0.1/ 这是IPv4地址的标准写法

2)http://0x7f.1 表示的是同一个地址,先以十六进制表示第一个8位元,剩下的3个8位元数据先分别按十六进制拼接在一起,再整体转化成一个十进制的整数

3)http://017700000001/ 同样表示同一个地址,以0为前缀,后面把全部4个8位元数据的十六进制数值拼在一起,再统一转化成单个八进制整数

合法服务器地址写法

服务器端口

服务器端口部分是可选的,通常在服务器连接网络端口非标准端口时才会用到,基本上浏览器支持的所有协议以及第三方应用都会以tcp或udp作为传输方式,而tcp和udp都会依赖一个16位端口号来区分运行在一台机器上的不同服务

层级的文件路径

即需要获取服务器上的文件路径,例如 /document/data.txt,由于这个格式是直接从Unix目录语义借用过来的,所以其支持在路径里出现的“/../”及“/./”,而对非绝对路径形式的URL,也会根据这种目录格式,加上基准路径再对应到其相对位置上去。

查询字符串

该内容也是可选项,用于把一串非层级格式的任意参数传递给由前面路径所对应的资源,直观上说就是“动态页面”,例如:

http://example.com/search.php?query=hello

片段ID

片段ID的角色和查询字符串有些类似,但它用于客户端而非服务端的一种可选信息。其在浏览器里只有一个用途:指向HTML页面里某个锚点名称,用于页面浏览定位。通俗来讲,就是URL中的片段ID名称与返回HTML页面的设定的锚点标签匹配,文档就会滚动到该定位的标签位置上,方便阅读浏览

TCP/IP模型

上面提到的url结构,其实对应应用层协议http,https等,现在我们看下一个完整的tcp/ip协议模型

tcp/ip协议模型

上图左边对应的是OSI(Open System Interconnect)七层模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型,相对过于庞大;右边对应的是TCP/IP四层模型,TCP/IP协议栈是美国国防部高级研究计划局计算机网(ARPANET)和其后继因特网使用的参考模型。二者之间的关系为:

1)OSI引进了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型。

2)OSI先有模型,后有协议,先有标准,后进行实践;而TCP/IP则相反,先有协议和应用,再提出了模型,且是参照OSI模型。

3)OSI是一种理论下的模型,而TCP/IP已经被广泛应用,称为网络互联实施上的标准。

A和B要进行通信,协议的传递过程即从A的应用层到A的接入层,然后到B的接入层,再到B的应用层,以完成A和B的通信过程

HTTP协议基础

由于文章讲的是web安全基础,最直接接触的是HTTP协议,先来看下HTTP协议的发展历程

1)1991年 Tim Berners-Lee发表了最初版本的协议草案(HTTP/0.9),仅不足一页半的内容,最开始请求类似:GET /helloword.txt,即纯粹的访问静态页面

2)1996年左右,经历多次变更,第一个正式版 HTTP/1.0 诞生,此时拥有长达50页的文档;

3)1999年,HTTP/1.1出现,指望将该协议能涵盖到方方面面,导致文档内容达到150页。

在当前应用的HTTP/1.1协议里,主要包含了常用的8中http方法。当然还有一些方式例如WebDAV (Web-based Distributed Authoring and Versioning),它是一种基于 HTTP 1.1协议的通信协议,扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制等等,这里不多赘述。下图为HTTP协议的请求方法及具体解释

HTTP请求方法

当客户端向服务端发送一个HTTP请求后,服务端会响应一个状态码做回应,下图为常见的HTTP协议响应状态码及其含义

HTTP响应状态码

利用代理工具(例如burpsuite)可以清楚的获取请求与响应数据包内容,在后期进行web安全测试时会普遍用到。