《图解HTTP》读书笔记

第一章

HTTP (hypertext transfer protocol)超文本传输协议
URL(Uniform Resource Locator,统一资源定位符)
主流就是http 1.1 现在2.0在定制中。

通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作的。http属于它内部的一个子集。
TCP/IP 是IP协议通信过程中,使用到的协议族的总称。大家互相通信总要有个规定。

TCP/IP协议族按层次分为以下4层:应用层,传输层,网络层和数据链路层。
分层的好处,只要自己这层干嘛就行,变动也只变动自己这层。

应用层
FTP 文件传输歇息
DNS 域名系统
HTTP

传输层,提供两台计算机之间的数据传输。
TCP(transmission control protocal)
UDP(User Data Protocol)

网络层(网络互连层)
网络层处理网络上流动的数据包,数据包是网络传输的最小数据单位。
与很多计算机互联的时候,网络层起到的作用就是在众多选项中选择一条传输路线。

链路层
用来处理连接网络的硬件部分

TCP/IP 通信传输流
客户端从上往下 HTTP,TCP,IP链路层
服务器从下往上 IP, TCP,HTTP链路层
每经过一层打上这一层的所属的头部信息,
这样把数据信息包装起来叫封装。
Alt
IP:
ip位于网络层, 协议作用就是把各种数据包传送给对方,ip地址指明了节点被分配到的地址,mac地址是指网卡所属的固定地址。

ARP协议:
IP之间的通信依赖mac地址
因为一般在中转时,礼用下一站的中转设备的mac地址来搜索下一个中转目标。
用以解析地址的协议,根据通信方的ip地址就能反查出对应的mac地址。

字节流服务(Byte Stream Service)
为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理,TCP协议为了更容易传送大数据才把数据分割,而且tcp协议能够确人数据最终送到对方手上。

三次握手
过程中使用了TCP的标志 flag, SYN和ACK.
发送端首先发送一个带有SYN标志的数据包给对方,接收端收到后,回传一个带有SYN/ACK,标志的数据包以示表达确认信息,最后发送端再回传一个带有ACK标志的数据包,代表“握手”结束。

DNS(Domain Name System)
DNS也是在应用层,提供域名到ip地址之间的解析服务。
人类记忆起来比较麻烦,dns协议提供通过域名查找ip地址,或者逆向从ip地址反查域名的服务。

关于TCP,IP,DNS工作的图
着重看 p15

URL
Uniform Resource Locator统一资源定位符
URI用字符串标识某一互联网资源,URL表示资源的地点,URL是URI的子集

第二章

GET /index.htm HTTP/1.1
Host :hackr.jp
Get是问服务器的类型,称为方法, 随后的字符串是请求访问的资源对象,请求URI, 最后HTTP/1.1是HTTP的版本号。
请求报文是由请求方法,请求URI,协议版本,可选的请求首部字段(header)和内容实体构成的。
服务器收到请求后的响应 也是 协议版本+状态吗+状态码短语+响应首部字段+主体

HTTP是一种无状态协议
自身不对请求或者相应之间的通信状态进行保存。也就是说在http这个级别,协议对于发送过的请求或响应都不做持久化处理。
这是为了确报协议的可伸缩性,处理大量事务,不保留之前信息。
但是用户需要记住登录状态,所以这里有了cookie。
对服务器本身发起请求,用*代替请求URI, OPTIONS * HTTP /1.1

GET:获取资源
POST:传输实体主题 POST方法用来传输实体的主体
PUT:传输文件,要求请求报文的主体中包含文件内容,然后保存到请求URI的指定位置。自身不带验证机制,任何人都可以上传文件,存在安全性问题,因此一般web网站不用这个方法,除了rest
HEAD:与GET方法一样,只是不返回报文的主体部分,用于确人URI的有效性及资源更新的日期时间等。“告诉我通信状态”。
DELETE:删除文件,和put相反的 方法,不带验证机制,
OPTIONS:用来查询针对请求URI指定的资源支持方法。
TRACE:追踪路径,让web服务器端将之前的请求通信环回给客户端的方法。
CONNECT:要求用隧道协议连接代理,主要用SSL和TLS协议把通信内容加密后经网络隧道传输。
Alt
在http早期版本,为了获取大量资源,http要不断连接断开连接,连接断开连接。挺麻烦的。
为了解决上面问题,提出了持久连接(HTTP Persistent Connection),只要任意一端没有明确提出断开连接,保持TCP连接状态。在http1.1中,所有默认连接都是持久连接。

管线化 pipeling,从前是请求一个响应一个,现在不需要等待响应直接发送下一个请求。

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
Cookie会根据从服务器发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。
Alt

补充:长连接

作者:南阳居士
链接:https://www.zhihu.com/question/22677800/answer/382380580
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

三次握手和四次挥手TCP区别于UDP最重要的特点是TCP必须建立在可靠的连接之上,连接的建立和释放就是握手和挥手的过程。三次握手为连接的建立过程,握手失败则连接建立失败。四次挥手为连接的完整释放过程,也会发生某个消息丢失或者超时的情况,有一方主动发送FIN消息即表示连接即将释放。注:SYN、ACK、FIN消息具有哪些含义,以及连接的状态,请参考《TCP/IP详解 卷1》第18章。长连接长连接,也叫持久连接,在TCP层握手成功后,不立即断开连接,并在此连接的基础上进行多次消息(包括心跳)交互,直至连接的任意一方(客户端OR服务端)主动断开连接,此过程称为一次完整的长连接。HTTP 1.1相对于1.0最重要的新特性就是引入了长连接。短连接短连接,顾名思义,与长连接的区别就是,客户端收到服务端的响应后,立刻发送FIN消息,主动释放连接。也有服务端主动断连的情况,凡是在一次消息交互(发请求-收响应)之后立刻断开连接的情况都称为短连接。注:短连接是建立在TCP协议上的,有完整的握手挥手流程,区别于UDP协议。2 如何快速区分当前连接使用的是长连接还是短连接1、凡是在一次完整的消息交互(发请求-收响应)之后,立刻断开连接(有一方发送FIN消息)的情况都称为短连接;2、长连接的一个明显特征是会有心跳消息(也有没有心跳的情况),且一般心跳间隔都在30S或者1MIN左右,用wireshark抓包可以看到有规律的心跳消息交互(可能会存在毫秒级别的误差)。3 什么时候用长连接,短连接?1、需要频繁交互的场景使用长连接,如即时通信工具(微信/QQ,QQ也有UDP),相反则使用短连接,比如普通的web网站,只有当浏览器发起请求时才会建立连接,服务器返回相应后,连接立即断开。2、维持长连接会有一定的系统开销,用户量少不容易看出系统瓶颈,一旦用户量上去了,就很有可能把服务器资源(内存/CPU/网卡)耗尽,所以使用需谨慎。

TCP短连接

模拟一种TCP短连接的情况:
client 向 server 发起连接请求
server 接到请求,双方建立连接
client 向 server 发送消息
server 回应 client
一次读写完成,此时双方任何一个都可以发起 close 操作
在第 步骤5中,一般都是 client 先发起 close 操作。当然也不排除有特殊的情况。
从上面的描述看,短连接一般只会在 client/server 间传递一次读写操作!

TCP长连接

再模拟一种长连接的情况:
client 向 server 发起连接
server 接到请求,双方建立连接
client 向 server 发送消息
server 回应 client
一次读写完成,连接不关闭
后续读写操作…
长时间操作之后client发起关闭请求

作者:cynthia猫
链接:https://www.jianshu.com/p/a55e3817db2e
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

第三章

用于http协议的交互信息称为http报文,请求端叫请求报文,响应端叫响应报文
Alt
大段数据传输中,通过编码提升传输速率。
报文主体就是实体主体,在编码操作时,实体主体发现变化,导致它和报文主体产生差异。
有一种技术叫做,分块传输编码

下载中断了,要恢复,所以可以用范围请求,头部加入 Content -Range:bytes = 5001- 10000;会返回 206 Partial Content响应报文
内容协商机制:Content Negotiation 分为 服务器驱动协商 客户端驱动协商 透明协商

第四章

状态码的职责是当前客户端向服务器发送请求时,描述返回的请求结果

1XX

信息性状态码 接受的请求正在处理

2XX

成功状态码 表明请求被正常处理了
200 OK
204 no content
该状态码代表服务器接受的请求已处理成功,但是返回的响应报文中不含实体的主体部分。“请求处理成功,但是没有任何资源可以返回”
206 Partial Content
该状态码表示客户端进行了范围请求,响应报文中包含由content-range指定范围的实体内容。

3XX 重定向

表明浏览器需要执行某些特殊的处理以正确处理请求
301 Moved Permanently 永久重定向 该状态码表示请求的资源已经分配了新的uri,以后应该使用资源现在所指的uri.
302 Found临时性重定向。该状态码表示请求的资源已被分配了新的uri,希望用户能使用新的uri访问。
303 See other
该状态码表示由于请求的对应资源存在另一个uri,应使用get方法定向获取请求的资源。
当301,302,303响应状态码返回时,几乎所有浏览器都会把post改成get,并删除请求报文内的主体,之后请求会自动再次发送。
304 Not Modified
资源已找到,但未符合条件请求。
客户端发送附带条件的请求。304划分在3xx中,但是和重定向没有任何关系。
307 Temporary Redirect
临时重定向,和302有相同的意义,不会从post变成get。

4XX 客户端错误状态码

400 状态码表示请求的报文中有语法错误。
401 unauthorized 表示发送的请求需要通过http认证,第一次返回会弹出一个窗口认证用的。
403 Forbidden
该状态码表明对请求资源的访问被服务器拒绝了,没有给出理由,未获得文件系统的 访问授权,访问权限出现某些问题
404 Not Found
服务器上无法找到请求的资源,服务器端拒绝请求且不想说明理由时使用。

5xx 服务器本身发生错误

500 internal server error 服务器端在执行请求时发生了错误,也有可能是web应用存在bug或者临时的故障。

503 service unavailable
该状态码表明服务器暂时处于超负载和正停机维护无法处理请求。

第五章 与http协作的web服务器

一台web服务器可搭载多个独立域名的web网站,也可作为通信路径上的中转服务器提升传输速率
利用虚拟主机可以让物理层面一台服务器搭载多台服务器。
就算域名不一样,因为dns解析,到达服务器的时候ip已经是一样的了,所以在发送http请求时,必须在host首部内完整指定主机名或域名的URI。
代理
扮演了中间人的角色,收到客户端请求再转发给服务器
在http通信过程中可级联多台代理服务器,请求和响应的转发会经过数台类似锁链一样连接起来的代理服务器,转法时,需要附加via首部字段以标记经过的主机信息
使用代理服务器的理由:
1,利用缓存技术减少网络带宽,代理转发响应时,缓存代理会将预先资源的副本保存在代理服务器上。再收到相同资源的请求,将之前缓存的资源作为响应返回。
2,组织内部针对特定网站的访问限制,转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理

网关
转发其他服务器通信数据的服务器,接受客户端发送来的请求时,它就像自己有资源一样对请求处理。
网关能使通信线路上的服务器提供非http协议服务。可以提高通信安全

隧道
相隔很远的客户端与服务器两者中间进行中转,保持双方通信连接的应用程序。
隧道建立一个通信线路,届时使用SSL等加密手段进行通信,隧道的目的是确报客户端与服务器进行安全的通信。隧道本身不会去解析http请求,也就是说,请求保持原样中转给之后的服务器,隧道会在通信双方断开连接时结束。

缓存的有效期限
即便存在缓存,也会因为客户端的要求,缓存的有效期等因素,向源服务器确人资源的有效性,若判断缓存失效,缓存服务器将会再次从源服务器上获取新资源。
客户端也有缓存,同理,也会判断缓存时效性。

第六章

HTTP报文首部分为报文首部和报文主体,首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。
请求报文中由方法,URI,HTTP版本,HTTP首部字段**(请求首部字段,通用首部字段,实体首部字段)等部分组成
响应报文中由HTTP版本,状态码,HTTP首部字段3部分组成。
(响应首部字段,通用首部字段,实体首部字段)**
首部字段结构,中间用冒号:分隔。

4种HTTP首部字段类型
通用首部字段:请求和响应都会用的
请求首部字段:补充了请求的附加内容,客户端信息,响应内容相关优先性。
响应首部字段:补充了响应的附加内容,也会要求客户端附加额外的内容信息。

几个通用首部字段
cache-control 控制缓存的行为
请求首部字段
if-match 比较实体标记 内容是否变化
if-modified-since 比较资源的更新事件 时间上看是否被修改。

响应首部字段:
accept-ranges 是否接受字节范围请求
实体首部字段:
Expires:实体主体过期的日期时间
Last-Modified:资源的最后修改日期时间。

端到端首部
必须保存在由缓存生成的响应中,另外规定它必须被转发
逐跳首部
分在此类别种的首部只会对单次转发有效

通用首部字段是指,请求报文和响应报文都会使用的首部

通用首部字段

Cache-Control

如果有新缓存请给我–控制缓存的行为
Cache-Control:public
当使用指定public指令时,则明确表明其他用户也可利用缓存。
Cache-Control:private
当指定private指令时,响应只以特定的用户为对象,这与public指令行为相反。
缓存服务器会对该特定用户提供资源缓存的服务,对于其他用户发送过来的请求 ,代理服务器则不会返回缓存。
Cache-Control:no-cache
使用no-cache指令的目的是为了防止从缓存中返回过期的资源,直接从服务器拿资源,
no-store暗示这个很机密,缓存不能在本地存储

Connection

控制不再转发给代理的首部字段
Connection:不再转发的首部字段名
管理持续连接,HTTP 1.1版本的连接都是默认持久连接
Connection:Close
但是1.1之前版本都是非持久连接
Connection:Keep -Alive

Date

表明创建HTTP报文的时间和日期

Pragma

以前不支持Cache-control就用了这个,现在出现是为了向前兼容

Trailer

说明了报文主体记录了哪些首部字段

Transfer-Encoding

规定了传输报文主体时采用的编码方式

Upgrade

用于检测HTTP协议与其他协议

Via

为了追踪客户端与服务器之间的请求和响应报文的传输路径

Warning

告诉用户一些缓存相关的警告

请求首部字段

Accept

客户端告知服务端自己能接受的媒体类型和相对优先度,服务器提供多种内容,将会首先返回权重值最高的媒体类型

Accept-Charset

用来通知服务器用户代理支持的字符集及字符集相对优先顺序。应用于内容协商机制的服务器驱动协商

Accept-Language

用来告知服务器用户代理能够处理的自然语言集

Authorization

用来告知服务器,用户代理的认证信息。

Except

客户端使用这个来告知服务器,想要某种期望
Expect:100 – continue

From

首部字段from用来告知服务器使用用户代理的邮箱地址。

Host

直接告诉服务器,请求资源所处的互联网主机名和端口号。必须包含在请求首部字段

If-Match

收到这样的都叫条件请求,服务器接收到附带条件请求后,只有判断指定条件为真才会执行请求。只有值和服务端ETag值一样,才会执行请求。

if-modified-since

在指定日期时间后,资源发生了更新,服务器才会接受请求。
若在之前,返回304 not modified

If-None-Match

只有在If-None-Match的字段值与Etag值不一致时,才可以处理这个请求。

If-Range

字段值若是跟Etag值或者更新的时间日期匹配一致,那么作为范围请求来处理,不一致的话,忽略范围请求,返回全部资源。如果不使用if-range则需要进行两次处理。

If-Unmodified-Since

告知服务器,指定的请求资源只有在字段值内指定的日期时间后,未发生更新的情况下,才能处理请求。如果在指定日期时间后发生了请求,以状态码412 PreconditionFailed返回。

Max-Forwards

请求经过代理服务器的最大数。

Proxy-Authorization

接受到从代理服务器发来的认证质询时,告知服务器认证需要的信息。

Range

只获取资源范围请求

Referer

只要查看Referer就知道请求的URI从哪里发起的
##User-Agent
首部字段User-Agent会创建请求的浏览器和用户代理名称等信息给服务器。

响应首部字段

Accept-Ranges

告知客户端能否处理范围请求,可以的话用bytes,不可以用none。

Age

告知客户端,源服务器多久之前创建了响应

Etag

每份资源弄一个标识。
强Etag,不论实体发生多么细微的变化都会改变其值
弱Etag,只有发生了根本改变,才会改变Etag值

Location

使用首部字段Location可以将响应接收方引导至某个与请求URI不同的资源位置

proxy-authenticate

这个字段会把代理服务器所要求的认证信息发送给客户端。

Retry-after

客户端在多久后重新发送请求

Server

告知客户端服务器上安装的HTTP程序信息。

实体首部字段

补充内容的更新时间等与实体相关的信息

Allow

allow:get post

Content-Encoding

Content-Encoding:gzip;

Content-Language

Content-Length

Content-Location

表示报文主体返回的资源对应URI

Content-Range

告知客户端作为响应返回的实体哪部分符合范围要求。

Content-Type

说明了实体主题内对象的媒体类型。

Expires

这个字段会将资源失效的日期告知客户端,缓存服务器,在日期之前一直用缓存回复请求, 日期之后就转向服务器去请求。

Last-modified

Cookie

cookie的工作机制时用户识别和状态管理。
因为可以检查Cookie的有效期,以及发送方的域,路径和协议等信息。
Cookie服务的首部字段
Set-Cookie 开始状态管理所使用的Cookie信息 响应首部字段
Cookie 服务器接收到的Cookie信息, 请求首部字段

Set-Cookie: name, expires, path, domain,secure, httponly
httponly:加以限制,使得cookie不能被JavaScript脚本访问。主要为了防止xss对cookie信息的窃取。
path:限制指定cookie的发送范围的文件目录。
domain:作为cookie适用对象的域名。
expires属性:cookie的有效期
secure属性:用于限制web页面仅在https安全连接时,才可以发送cookie。省略它的话,http或者https都会对cookie进行回收。

其他首部字段

X-XSS-Protection:1
属于HTTP响应首部,针对跨站脚本攻击的一种对策。

第七章

HTTP协议中可能有安全问题,使用https就可以防止,我们了解一下
HTTP不足,通信使用明文,内容被窃听
不验证通信方的身份
无法证明报文的完整性,可能以及篡改

怎么加密呢

通信加密:使用SSL或者TLS组合使用,加密HTTP的通信内容
与SSL组合使用的HTTP被称为HTTPS。
内容加密: 对报文主体进行加密

协议中请求和响应不会对通信方进行确认

任何人可以发起请求,不存在通信方处理步骤,任何人可以发起请求。只要服务器接收到请求,不管谁都会返回一个响应。
可能存在的问题:别人可能伪装服务器或者客户端,无法确定对方是否有权限
即便是无意义的请求也会照单全收,无法阻止海量请求下的dos攻击。

解决方法:使用http协议无法确定通信方,但是SSL可以,不仅提供加密处理,还使用称为证书的手段

无法证明报文完整性,可能已经被篡改

这个叫做中间人攻击, MITM
如何防止篡改,虽然有http协议确定报文完整性,但并不便携可靠,常用MD5 SHA-1散列值检查方法,形成数字签名。

为了防止上面这些弊端,有必要使用HTTPS,ssl提供认证和加密处理及摘要功能。

HTTP加上加密处理和认证以及完整性保护后即是HTTPS

我们把添加了加密以及认证机制的HTTP称为HTTPS,在网络段 https:// 带上锁的就是

HTTPS并非是应用层的一种新协议,只是HTTP通信接口部分用了SSL和TLS协议代替而已。
不光http,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。

共享/公开密钥加密技术

1,SSL采用一种叫做公开密钥加密技术,加密和解密都用一把密钥
但是怎么发送密钥给服务器呢,2,这里用到了公开密钥加密方式
就是一把公开钥匙,一把私有钥匙,两把配合起来用。用公开钥匙进行加密处理,然后对方收到被加密的信息后,再使用自己的私有密钥进行解密。

公开密钥加密处理起来比共享密钥加密更为复杂,所以效率就很低,应该结合起来。
但是公开密钥也有问题,你不能证明这就是公开密钥,可能被别人替换掉了。
解决方法就是申请给公开密钥申请数字证书
还有一种叫做客户端证书,证明服务器正在通信的对方始终是预料之内的客户端。

SSL的问题,使用SSL时,处理速度会变慢

HTTPS也存在一点问题,就是使用SSL时,处理速度会变慢。消耗CPU和内存等硬件资源。
慢分两种,通信慢,因为除去tcp连接,http请求,还有进行SSL通信。
处理速度慢,必须加密处理,消耗服务器和客户端的硬件资源,导致负载增强。

这也是为啥不是所有网站都用HTTPS的原因了。

第八章

某些页面只想让特定得人浏览,因此认证功能必不可少。
经常进行核对得信息有:密码,动态令牌,数字证书,生物认证,IC卡
HTTP1.1用的认证方式,BASIC认证,DIGEST认证,SSL客户端认证,FormBase认证

BASIC认证

发送请求给服务器,服务器返回401 Authorization Required
客户端发送账户密码回去,并且用Base64编码。验证成功吼返回一条包含Request-URI资源得响应。但是没有加密很容易被窃听。

DISEST认证

客户端发认证要求给服务器
服务器返回质询码给客户端,从质询计算响应,然后把响应码返回给服务器。
DIGEST认证提供防止密码被窃听的保护机制,但并不存在防止用户伪装的保护机制。

SSL 客户端认证

id 密码被盗被别人冒充就不太好,,利用ssl客户端认证则避免该情况发生。
ssl客户端认证借https的客户端
客户端要事先安装好证书,接收到认证资源的请求,服务器发送Certificate request报文,要求客户端提供客户端证书。
随后用户把客户端证书信息以Client Certificate报文方式发送给服务器。
服务器验证客户端证书验证通过后方可领取证书内的客户端公开密钥,进行https加密通信。
使用SSL客户端认证需要用到客户端证书,客户端证书需要支付一定费用才能使用。

基于表单认证

就是我们一直看到的提供登录名和密码的,第一第二个不太保险,第三个太贵所以这个是常用的。
标准规范:一般用cookie来管理session.
步骤一:客户端把Id和密码放入报文的主体部分,通常以post方法把请求发送给服务器,这时,会使用https通信进行html表单画面德显示和用户数据的发送。
步骤二:服务器发放session id,把用户信息和对应session记录好,然后把session id放进set-cookie。
步骤三:客户端收到服务端发来的session id后,将cookie保存在本地,下次请求时自动发送cookie,随后session id也发送到服务器,服务器端可通过验证接收到的session id识别用户及其认证状态。

第九章

http有一些瓶颈,所以google推出了spdy
一个连接只能发一个请求,请求的头部越来越长繁重,首部未经压缩就发送。
解决方式就是ajax,他其实就是XMLHTTPrequest的api,通过JavaScript脚本语言调用就能获得和http服务器进行通信。但是ajax会发送大量请求,而且也没解决http实际问题。
比如没有压缩头部。
Comet解决方式,由服务器向着客户端推送更新。当请求从客户端发送给服务器时,服务器先挂起来,当有更新时再推送
SPDY没有改写http而是在http下面增加了一个对话层,spdy
SPDY新功能:
多路复用,许多http请求可以在一个tcp上解决。
赋予优先请求级,给请求加上优先级。
压缩http头部。

为了解决其他瓶颈, 提出了websocket全双工通信
一旦 Web 服务器与客户端之间建立起 WebSocket 协议的通信连接,
之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送
JSON、XML、HTML或图片等任意格式的数据。
推送功能
支持由服务器向客户端推送数据的推送功能。这样,服务器可直接发
送数据,而不必等待客户端的请求。
减少通信量
只要建立起 WebSocket 连接,就希望一直保持连接状态。和 HTTP 相
比,不但每次连接时的总开销减少,而且由于 WebSocket 的首部信息
很小,通信量也相应减少了。

HTTP 2.0出现了
压缩 SPDY、Friendly
多路复用 SPDY
TLS 义务化 Speed+ Mobility
协商 Speed+ Mobility,Friendly
客户端拉曳(Client Pull)/服务器推送
(Server Push)
Speed+ Mobility
流量控制 SPDY
WebSocket Speed+ Mobility

还有webDAV
他们都为了解决http的瓶颈

第十章 构建web内容的技术

动态html
动态html技术是通过调用客户端脚本语言JavaScript,实现对html的web页面的动态改造,利用dom可指定将发生动态变化的html元素。
DOM是用以操作HTML文档和XML文档的API.
由服务器准备好的静态内容返回是以前的做法,现在都由程序创建的内容后返回。比如CGI,由web服务器在接收到客户端发送过来的请求后转发给程序的一组机制,由Perl,php语言写成。
CGI每次收到请求就要启动一次,有瓶颈,因此出现了java serverlet,因为java serverlet运行在web服务器相同的进程中。

XML和HTML都是从标准通用标记语言sgml简化而成,使用标签构成树形结构。
RSS(简易信息聚合)和atom都是发布新闻或者博客日志等更新信息文档的格式的总称,两者都用到XML。
JSON是一种以JavaScript的对象表示法为基础的轻量级数据标记语言。

第十一章

HTTP本身就是个简单的网络协议,运行在服务器上的web才是攻击重点。
在HTTP请求报文内加载攻击代码,就能发起对web应用的攻击,通过URL查询字段或者表单,http首部,cookie等途径把代码传入。
主动攻击:sql注入攻击和os命令注入攻击。主要攻击web应用。
被动攻击:给用户设置陷阱,然用户去点击发起请求,获取用户的cookie,所以主要针对用户的资源和权限。

跨站脚本攻击 XSS

是指通过存在的安全漏洞的web网站注册用户浏览器内运行的非法html标签或JavaScript的一种方法
简单来说:利用表单等方法插入脚本进行攻击,或者脚本插入url

sql注入攻击

针对web数据库发起的攻击
书中例子也是通过表单,一个购书的搜索框来进行攻击的,当查询字段输入为‘上官也’–‘,第二个引号后面自动就变成了注释。

os命令注入攻击

是指通过web应用,执行非法的操作系统命令达到攻击的目的。
调用shell时存在疏漏,那么就可以执行插入的非法os命令。
方法:也是通过咨询表单

HTTP首部注入攻击

是指攻击者通过响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。属于被动攻击。
造成的影响:
设置任何cookie信息,重定向至任何url,显示任意的主体。

http响应截断攻击

向首部主体内添加内容的攻击
插入两个换行做出首部与主体分隔所需的空行,显示伪造的主体,达到攻击的目的。
利用这个攻击,已触发陷阱的用户浏览器会显示伪造的web页面,再让用户输入自己的个人信息,达到和跨站脚本攻击相同的结果。

邮件首部注入攻击

可对任意邮件地址发送广告邮件和病毒邮件。

目录遍历攻击

对本来无意公开的文件目录,通过非法截断其目录路径后达成访问目的的一种攻击。
用户使用…/等相对路径定位到/etc/passed等绝对路径上。

远程文件包含漏洞

因设置或设计上的缺陷引发的安全漏洞

1,强制浏览,
2,不正确的错误处理,web应用不必在用户浏览的画面上展现详细的错误信息。给剁了错误信息,让黑客了解到的信息,给他们启发。
3, 开放重定向。http://example.com/?redirect=http://hackr.jp
用户以为访问http://example.com其实访问了hackr.jp

因为会话管理疏忽导致的漏洞

会话劫持

攻击者通过某种手段拿到了用户的会话id,并非法使用此id伪装成用户,达到攻击的目的,获得session id然后伪装成用户
案列:利用脚本的document.cookie窃取cookie随后模仿用户。

会话攻击

强制用户使用攻击者指定的会话id。

跨站点请求伪造

攻击者通过设置好的陷阱,强制对已经完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。
就是不经意间让用户去做一些事。

密码破解

穷举法,字典攻击。
加密方式一般就是用过散列处理,散列函数MD5.

彩虹表

是由明文密码和散列表构成的数据库表。

点击劫持

用一个界面覆在另一个界面上,诱使用户去点击。

DoS攻击

1, 增加很多请求使得资源过载。
2, 通过攻击安全漏洞使得服务停止。

猜你喜欢

转载自blog.csdn.net/weixin_39285712/article/details/89369814