目录
[一、 大纲](#一、 大纲)
[二、 Web 简介](#二、 Web 简介)
[1、什么是 WEB](#1、什么是 WEB)
[2、WEB 发展史](#2、WEB 发展史)
[CGI 阶段](#CGI 阶段)
[3、WEB 工作方式](#3、WEB 工作方式)
[什么是 URL](#什么是 URL)
[三、 HTTP 简介](#三、 HTTP 简介)
[HTTP 请求报文:](#HTTP 请求报文:)
[什么是 cookie](#什么是 cookie)
Web安全
一、 大纲
二、 Web 简介
1、什么是 WEB
既然我们要学习 Web 安全,当然要简单的了解什么是 Web,Web 与现在与我们生
活息息相关,上个网站浏览新闻,看个视频,或者说......(咳咳)。这其中涉及到
几个基本的点,从通信,会接触到 URL,到协议,会接触到 HTTP,再到前后端的
概念,前端即 HTML,CSS,JavaScript,三剑客。后端,即处理脚本语言,比如
PHP,JAVA,python,SQL 等等,再细致的分还能分为很多,这是一个庞大的链
路,我们先从简单的学起就好啦。
那什么是 Web 呢?
WEB,就是所谓的 WWW 全球广域网(World Wide Web),也就是我们常说的万维
网。
它是一种基于超文本和 HTTP 的、全球性的、动态交互的、跨平台的分布式图形
信息系统。是建立在 Internet 上的一种网络服务,为浏览者在 Internet 上查找
和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将
Internet 上的信息节点组织成一个互为关联的网状结构。
上面说了这些比较官方,根据实际生活来看,就无非是可以与人交互的网页,现
在科技真是越来越强大。Web 也有他的发展史,下一段会说到,发展到现在与人
交互,处理各种事物,各种管理平台也应用而生,因此也带了了很多的风险,具
体风险都有哪些危害,咱们的课程都会讲到,现在我们一步步来。其次,对于什么是 Web 也没有特别细致要讲解的,大家都能理解这个简单概念。
毕竟现在与我们生活息息相关。都会接触到,并且都有用到。
2、WEB 发展史
静态页面
在互联网最初开始的时候,Web 网站的主要内容是静态的,由文字和图片组成,
制作和表现形式也是以表格为主。当时的用户行为也非常简单,仅仅是浏览网页。
多媒体阶段
随着技术的不断发展,音频、视频、Flash 等多媒体技术诞生了。多媒体的加入
使得网页变得更加生动形象,网页上的交互也给用户带来了更好的体验。
CGI 阶段
渐渐的,多媒体已经不能满足人们的请求,于是 CGI(Common Gateway Interface)
应运而生。CGI 定义了 Web 服务器与外部应用程序之间的通信接口标准,因此 Web
服务器可以通过 CGI 执行外部程序,让外部程序根据 Web 请求内容生成动态的内
容。
在这个时候,各种编程语言如 PHP/ASP/JSP 也逐渐加入市场,基于这些语言可以
实现更加模块化的、功能更强大的应用程序。
AJAX
在开始的时候,用户提交整个表单后才能获取结果,用户体验极差。于是 Ajax
(Asynchronous Javascript And XML)技术逐渐流行起来,它使得应用在不更
新整个页面的前提下也可以获得或更新数据。这使得 Web 应用程序更为迅捷地回
应用户动作,并避免了在网络上发送那些没有改变的信息。
MVC
随着 Web 应用开发越来越标准化,出现了 MVC 等思想。MVC 是 Model/View/Control
的缩写,Model 用于封装数据和数据处理方法,视图 View 是数据的 HTML 展现,
控制器 Controller 负责响应请求,协调 Model 和 View。Model,View 和 Controller 的分开,是一种典型的关注点分离的思想,使得代
码复用性和组织性更好,Web 应用的配置性和灵活性也越来越好。而数据访问也
逐渐通过面向对象的方式来替代直接的 SQL 访问,出现了 ORM(Object Relation
Mapping)的概念。
除了 MVC,类似的设计思想还有 MVP,MVVM 等。
RESTful
在 CGI 时期,前后端通常是没有做严格区分的,随着解耦和的需求不断增加,前
后端的概念开始变得清晰。前端主要指网站前台部分,运行在 PC 端、移动端等
浏览器上展现给用户浏览的网页,由 HTML5、CSS3、JavaScript 组成。后端主要
指网站的逻辑部分,涉及数据的增删改查等。
此时,REST(Representation State Transformation)逐渐成为一种流行的 Web
架构风格。
REST 鼓励基于 URL 来组织系统功能,充分利用 HTTP 本身的语义,而不是仅仅将
HTTP 作为一种远程数据传输协议。
云服务
随着时间的发展,Web 的架构越发复杂,负载均衡、数据库分表、异地容灾、缓
存、CDN、消息队列等技术开始应用,增加了 Web 开发和运维的复杂度。同时云
服务开始逐渐发展,部署环境容器化,各个功能拆成微服务或是 Serverless 的
架构。
3、WEB 工作方式
先举个简单的例子:
有一天你和你的小女朋友来到了一家餐厅,桌子上放着餐单,上面各式各样的菜
品,什么土豆炖牛肉,什么宫保鸡丁啦,都是你们爱吃的菜,这时服务员过来,
问两位需要点什么菜品,你们随机点了这两个爱吃的菜,服务员记录在了一张纸
上,大步走向后厨房。不久,菜品做好了,服务员给你端上了美味佳肴,你们大
快朵颐,饭后,你们决定溜溜,然后......(就该各回各家了)
在上面什么是 Web 中,简单说明了 Web 的构造,大致分为前端和后端,协议使用
的是 HTTP,通信方法是下面会说到的,使用的是 URL。
根据这个例子进一步说明:
桌子上的餐单即为一个网页,一个精心构造的前端页面,上面的菜品即为一个个
超链接,你选择了土豆炖牛肉,这时服务员通过 HTTP 协议打包好你的请求,通
过 URL 去访问你需要的这份资源,然后来到了后端,就是后厨房嘛,一般这就是
网站的服务器所在地,厨师也就是说服务器奋力的给你做好这份菜品,再通过服
务员送到了你的餐桌上,即呈现在了你所看到的网页上。
我举了个通俗的例子,目的是便于大家理解。
进一步讲解
下面我们详细介绍几个概念:
什么是 URL
URL 即为统一资源定位符(Uniform Resource Locator),就是我们平时所用到
的 URL 连接,比如 www.baidu.com,www.bing.com,这些都是 URL 地址,便于我
们记忆,不然一堆 IP 地址,记到什么时候去。但现在 URL 地址不仅仅是方便记
录的原因了,一般厂商都会使用 CDN 节点,很难知道他们服务器的真实 IP 地址,
如果你知道了,对于他们来说是一个很大的风险。所以在之后渗透测试时,信息
收集到真实的 IP 地址也是一个关键的地方。
URL 标准格式:
schema://host[:port#]/path/.../[?query-string][#anchor]
schema:协议类型
host:服务器地址
port:端口号
path:路径
?query-string:查询语句
#anchor:页面锚点
Schema 协议类型一般就是我们常见的 http 或者 https,host 是服务器地址,一
般就是 URL 地址,如果你知道真实的 IP 地址,也可以打开目标网页,port 为端
口号,一般都是 80 端口,是可以省略掉的,使用的是 http 协议,而 https 协议
使用的 443 端口,path 路径是目标服务器存放该页面的相对路径,?
query-string 是你要查询的语句,#anchor 是页面的某个锚点,一般较少见。
举个例子,大家可以自己分析下:(或者多观察下 URL 链接)
https://cn.bing.com/search?q=7089bat\&qs=n\&form=QBLH\&sp=-1\&pq=7089bat\&
sc=0-7&sk=&cvid=5359B320893A4CDCA9A0BDD31D728BC0
什么是 DNS 服务器
DNS(域名系统,Domain Name System),它作为将域名和 IP 地址相互映射的一
个分布式数据库,能够使人更方便地访问互联网。通俗来说,这就是一个大型的
数据库,里面存放着 URL 以及与其对应的 IP 地址,类比一下就好像图书馆的索
引一样,你根据这个索引就可以找到这本书。
这时我们总结一下,
加上我们平时上网的过程,来进一步加深理解:
首先我们会用浏览器访问各种资源,浏览器是客户端角色,当你输入 URL 时,浏
览器会首先请求 DNS 服务器,DNS 根据你请求的 URL 返回对应的 IP 地址,接下
来,浏览器会带着你请求的信息去访问该 IP 的服务器,来处理你的请求,当服
务器接收到了你的请求后,会根据 HTTP 协议所带的数据,来对你的访问进行处
理,这个处理就是后端过程,可能使用的是 PHP,可能是 JAVA 语言,或者其他,处理完成之后再将这些信息返回给客户端,客户端根据返回的数据进行呈现,呈
现的网页即为前端,其中包括了 HTML,CSS,JavaScript,基本元素,一个丰富的
页面就呈现在了你的眼前。
下面这个图,是 Bing 请求的基本流程:
三、 HTTP 简介
HTTP(HyperText Transfer Protocol,超文本传输协议),是因特网上应用最
为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。
HTTP 是一个基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结
果等)。
HTTP 请求报文:
完整的 HTTP 请求包含以下内容,请求方法一般是 GET 和 POST,URL 即你请求的
地址,协议版本一般都是 HTTP/1.1,然后配合着请求头,来访问你请求的资源,
请求头有通用的,也有厂家自定义的。如果是 POST 请求,会携带请求数据。
GET 请求的数据会在 URL 处携带查询,即我们前面说到的 ?query-string部分,
POST 只不过把查询部分放在了请求报文中,即下面请求数据的部分,这样做的
目的是,较为安全的保障所请求的数据。GET 所请求的数据在 URL 中,一般大家
都能看到,但是现在不管哪种请求,都或多或少的加入了编码,这样数据不进行
特定的方式解码,是看不到具体数据的。
请求方法:
**GET:**请求指定页面信息,并返回主体,数据插入进 URL 中进行传输。
**POST:**向指定资源提交数据进行请求,数据被放在请求数据体中传输。
**HEAD:**类似 GET 请求,但只获取头部信息,无响应体。
**PUT:**将传输数据取代指定文档传输。
**DELETE:**请求服务器删除指定页面。
CONNECT: 与代理服务器可以进行管道方式连接。**OPTIONS:**查询针对请求 URL 指定资源支持的方法。
**TRACE:**可以对请求消息的传输路径追踪。
**MOVE:**请求服务器将指定的页面移动到另一个网络地址上。
请求头部:(常见的请求头)
**Hsot:**请求资源的服务器
**User-Agent:**客户端程序的信息
**If-Match:**比较实体标记(Etag)
**If-Modified-Since:**比较资源更新的时间
**Authorization:**web 认证信息
**Accept:**用户代理可处理的媒体类型
**Accept-Charset:**优先的字符集
**Accept-Encoding:**优先的内容编码
**Accept-Language:**优先的语言(自然语言)
实际一个小例子:
GET 请求:
POST 请求 HTTP 响应报文:
响应报文组成:
**第一行:**HTTP 协议版本 + 状态码 + 原因短语
**下面若干行:**可选的响应首部信息
空行
剩下的消息:为响应的信息
一个例子:
响应状态码:
1xx:信息,服务器收到请求,需要请求者继续执行相关操作。
2xx:成功,操作被成功接受并处理。
3xx:重定向,需要进行附加操作以完成请求。
4xx:客户端错误,请求中存在语法错误,服务器无法处理请求。
5xx:服务器错误,服务器在处理请求的过程发生了错误。常见的状态码含义:
200 OK:表示客户端发来的请求在服务器端被正常处理了。
301 Not Modified:表示客户端附带条件的请求,未满足条件。
400 Bad Request:表示请求报文中存在语法错误。
401 Unauthorized:表示发送的请求需要有通过 HTTP 认证的信息。
403 Forbidden:表明对请求资源的访问被服务器拒绝了。
404 Not Found:服务器无法找到请求的资源。
500 Internal Server Error:表明服务器端在执行请求时发生了错误。
503 Service Unavailable:表明服务器暂时处于超负载或进行停机维护。
响应头部:
Server:服务器的信息
Location:状态码出现 3xx 是一般会配合该头部指向重定向的地址。
Set-cookie:服务器想用户发放的表示凭证。
HttpOnly:使 JavaScript 脚本无法获取 cookie,防止 xss 攻击。
X-Frame-Options:控制网站内容在其他 web 网站的 Frame 标签内的显示问
题。防止点击劫持攻击;
DENY:拒绝
SAMEORGIN:仅同源域名下的页面匹配时许可
X-Powered-By:可以知道 web 后端语言(但是可以修改)Cookie
什么是 cookie
首先我们需要知道的是,HTTP 是无状态协议,你单纯从网络上请求数据,服务
器端并不知道是谁请求的数据。这时 Cookie 就出现了,它的作用是给每个客户
端颁发一个通行证,这样服务端就能确认目标身份了。Cookie 不单单是记录身
份,更多是记录访问者的一些信息,不然服务器一天接收那么多请求,再返回请
求,他哪知道哪个是你,你又请求了哪个信息嘛。