超全面深入计算机网络知识 ==》解决面试网络问题

     记录下计算机网络的常见题目,以及HTTP的一系列知识和问题,方便巩固知识和回顾~~~

目录

1. TCP/IP协议分层管理?

TCP/IP协议的分层管理:

==>  TCP 与 UDP的区别:

osi七层模型

2. 三次握手四次挥手机制及其原因?

三次握手过程理解:

四次挥手过程理解:

3. HTTP的常用方法?

4. GET 和 POST的区别?

5. HTTP建立持久连接的意义?

(1)、http长连接:  

(2)、http短连接

(3)、什么是http 持久连接

 6. HTTP报文的结构?

7.  HTTP状态码?

总结

8. HTTP报文首部?  HTTP通用首部字段?  HTTP请求首部字段、响应首部字段、实体首部字段?

(1)、HTTP报文首部:

(2)、HTTP通用首部字段:

HTTP请求首部字段:

响应首部字段:

实体首部字段:

9. Cookie相关知识?

Cookie 和 Session的区别:

存储机制localStorage、sessionStorage与Cookie存储技术的对比?

10. HTTPS与HTTP区别及实现方式?

HTTPS 和 HTTP 的主要区别:

非对称加密的优点:

11、 常见的Web攻击分类:?

(1)、 XSS攻击

  (2)、 CSRF攻击

(3)、SQL注入攻击

(4)、文件上传漏洞

(5)、DDoS攻击


1. TCP/IP协议分层管理?

      计算机与网络设备通信,双方就要基于实现商量好的方法通讯,而这个方法也就是协议;

协议中包含各式各样的内容从电缆规格到IP地址的选定方法等等;这样互联网相关的协议集

称为TCP/IP。

 TCP/IP是互联网相关各类协议族的总称,而我们经常说的HTTP是属于它内部的子集;

 

TCP/IP协议的分层管理:

 1、 应用层;  2、传输层;  3、网络层;  4、数据链路层;

好处: 某一个地方改变设计的时候,只需要把变动的层替换掉即可;

(1)、应用层: 决定了向用户提供的应用服务时的通信活动,TCP/IP中预存了通用的应用服务,

        1、FTP(File Transfer Protocol)文件传输协议;

        2、DNS(Domain Name System)域名系统;

        3、HTTP;

(2)、传输层: 位于应用层的下层,提供位于网络连接中的两台计算机之间的数据传输,传输层有两种性质不同的协议:  

      1、TCP(Transmisson Control Protocol)传输控制协议;

      2、UDP(User DataProtocol)用户数据报协议;

<!-- TCP 与 UDP的区别 -->

==>  TCP 与 UDP的区别:

TCP面向有连接,UDP面向无连接;

    TCP传输经过三次握手;

    TCP传输的速度慢,UDP相对较快;

    TCP传输安全,而UDP传输不安全;

=》  所以大数据传输忽略丢帧现象考虑用UDP,机密数据传输用TCP传输;

(3)、网络层  (又名网络互连层)

网络层用来处理在网络上流动的数据包(数据包:网络上传输的最小数据单位)

网络层规定在众多选项中通过怎样的路径(传输路线)到达对方的计算机,把数据包传输给对方;

(4)、链路层(又名数据链路层,网络接口层)

用来处理连接网络的硬件部分,硬件上的范围均在链路层中,包含:

  1)、操作系统;       2)、硬件设备驱动;

  3)、NIC(Network interface Card 网络适配器:网卡)

  4)、光纤等物理可见部分;

总的来说: 

应用层:向用户提供应用服务时通信活动(HTTP); 

传输层:提供计算机中的数据传输(TCP);

网络层:处理数据包,选择传输路线(IP);

链路层:物理硬件(网卡)

网络通信的时候,发送端从应用层往下走,接收端往应用层上层走;

<!-- osi七层模型 -->

osi七层模型

 对应的网络协议:

应用层             DNS、HTTP、FTP、IMAP4、POP3、SSH、TELNET 

表示层

会话层             (spdy)

传输层             TCP、UDP、PPTP、TLS/SSL 

网络层             IP(v4-v6)、ICMP、IGMP、Ipsec

数据链路层          Wi-Fi(IEEE 802.11)、ARP、WiMAX(IEEE 802.16)、PPP、PPPoE、L2TP…

物理层

 

TCP对应的协议:FTP、Telnet、SMTP、POP3、HTTP

UDP对应的协议:DNS、SNMP、TFTP

 

2. 三次握手四次挥手机制及其原因?

TCP ==> 全双工

   序列化seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。

   确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。

确认号ACK:占1位,仅当ACK=1时,确认号字段才有效,ACK=0,确认号无效;

 同步SYN:连接建立时用于同步序号,当SYN=1,ACK=0时表示,这是一个连接请求报文段;若同意链连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接收报文;SYN这个标志位只有在TCP建产连接时才会被置为1,握手完成后SYN标志位被置为0。

终止FIN:用来释放一个连接。FIN = 1表率: 此报文段的发送方的数据已经发送完毕,并要求释放运输连接;

ps: ACK、SYN和FIN 这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。

 

三次握手过程理解:

(1)第一次握手: 建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务确认;SYN:同步序列编号(Synchronize Sequence Numbers);

(2)第二次握手: 服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,即服务器进入SYN_RECV状态;

(3)第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

 

四次挥手过程理解:

1)客户端进程发出连接释放报文,并且停止发送数据;释放是数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。

2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务器就进入了CLOSE-WAIT(关闭等待)状态。

3)客户端收到服务器的确认请求后,此时,客户端进入FIN-WAIT-2(终止等待2)状态, 等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

5) 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态;

6)服务器只要收到了客户端发出的确认,立即进入CLOSEAD状态。同样,撤销TCB之后,就结束了这次的TCP连接。  TCP结束,服务器连接的时间要比客户端早一些。

ps:   《图解HTTP》——浅显易懂介绍HTTP

 

3. HTTP的常用方法?

(1)、GET: 获取资源,  GET方法用来请求URL指定的资源,指定的资源经服务器端解析后返回响应内容;

(2)、POST: 传输实体主体, POST方法用来传输实体的主体;

(3)、PUT: 传输文件, PUT方法用来传输文件。就像FTP协议的文件上传一样,要求在请求报文主体中包含文件的内容,然后保存到请求URL指定的位置。不太常用。

(4)、 HEAD: 获取报文首部,HEAD方法和GET方法一样,只是不返回报文主体部分。用于确认URL的有效性及资源更新的日期时间等。

(5)、DELETE:删除文件, DELETE方法用来删除文件,是PUT的相反方法。DELETE方法按请求URL删除指定的资源。也不常用。

(6)、OPTIONS: 询问支持的方法,  OPTIONS方法用来查询针对请求URL指定的资源支持的方法。

(7)、TRACE:追踪路径,  TRACE方法是让Web服务器端将之前的请求通信环回给客户端方法。客户端可以用TRACE方法查询发送出去的请求时怎样被加工修改的。不常用,还容易引发XST攻击

(8)、CONNECT:要求用隧道协议链接代理,

CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TSL协议把通信内容加密后经网络隧道传输。

 

4. GET 和 POST的区别?

GET用于获取信息,是无副作用的,长度有限制(url的最大长度是2048个字符),且可缓存,参数保留在浏览器历史中,与POST相比,GET的安全性较差,因为所发送的数据是URL 的一部分,数据在URL中对所有人都是可见的; 

而POST用于修改服务器上的数据,有副作用,非幂等,不可缓存,参数不

会保存在浏览器历史中,对数据长度无限制,POST比 get更安全,因为参数不会保存在浏览器历史或web服务器日志中,数据不会显示在URL中。

 

5. HTTP建立持久连接的意义?

(1)、http长连接:  

client方与server方法先建立连接,连接建立后不断开,然后再进行保文发送和接收,这种方式下由于通讯连接一直存在。此种方式常用于P2P点对点的通信。

长连接的操作步骤是:建立连接——数据传输...(保持连接) ...数据传输————关闭连接

长连接的适用场景,example:

监控系统: 后台硬件热插拔、LED、温度、电压发生变化;

即时通信系统:其他用户登录、发送信息;

即时报价系统:后台数据库内容发送变化;

还有: websocket   !!!!!

像以上这些连接,如果每次操作都要建立连接然后再操作的话处理速会降低;所以操作时第一次连接上以后,以后每次直接发送数据就可以了,不用再建立TCP连接。

other example: 数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,频繁socket创建也是对资源的浪费。

 

Comet

以前的http的长连接技术不成熟,目前有新技术名叫Comet:基于 HTTP 长连接的“服务器推”技术。

案例:基于 AJAX 的长轮询(long-polling)方式

AJAX 的出现使得 JavaScript 可以调用 XMLHttpRequest 对象发出 HTTP 请求,JavaScript 响应处理函数根据服务器返回的信息对 HTML 页面的显示进行更新。使用 AJAX 实现“服务器推”与传统的 AJAX 应用不同之处在于执行顺序及内容:

1.服务器端会阻塞请求直到有数据传递或超时才返回。

2.客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。

3.当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。

<!--  -->

websocket:

    websocket是html5 提出的一个协议规范,是为了解决客户端与服务端实时通信,本质上是一个基于TCP,先通过HTTP/HTTPS协议发起一条特殊的http请求进行握手后创建一个用于交换数据的TCP连接。

websocket的优势:

    浏览器和服务器只需要做一个握手的动作,在建立连接之后,双方可以在任意时刻,相互推送信息。同时,服务器与客户端之间交换的头信息很小。

http和websocket都是应用层协议。

他们规定的是数据怎么封装,而他们传输的通道是下层提供的。就是说无论是 http 请求,还是 WebSocket 请求,他们用的连接都是传输层提供的,即 tcp 连接(传输层还有 udp 连接)。

 

(2)、http短连接

定义:client方与server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。

此方式常用于一点对多点通讯。

短连接的操作步骤是:建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连接

 

短连接的使用场景:

短连接多用于操作频繁,点对点的通讯,而且连接数不能太多的情况。每个tcp连接的建立都需要三次握手,每个tcp连接的断开要四次挥手。

web网站的http服务一般都用短连接,因为长连接对于服务器来说要耗费一定的资源;像web网站这么频繁的成千上万甚至上亿客户端的连接用短连接更省资源。

总之:长连接和短连接的选择要视需求而定。

 

(3)、什么是http 持久连接

http协议是位于协议层之上的应用层协议,其网络层基础通常是tcp协议。tcp协议是面向连接和流的,因此连接的状态和控制对于http协议而言都相当重要。同时,http是基于报文的,因此如何确定报文长度也是协议中比较重要的一点。

        在使用持久连接前,http协议规定为获取每个url资源都需要单独一个tcp连接,这增加了http服务器端的负载,引起互联网拥塞。例如内嵌图片以及其他类似数据的使用要求一个客户端在很短时间内向同一个服务端发起多个请求。

 

    使用持久连接的优点:

        1)、减少tcp的连接数量;

        2)、在一个连接上实现http请求和应答的流水,即允许客户端发出多个请求,而不必在接收到前一个请求的应答后才发出下一个请求,极大减少时间消耗;

        3)、后续请求延迟减少,无需再在tcp握手上耗时;

        4)、可以更加优雅地实现http协议,由于持续连接的存在无需报告错误后无需关闭连接,因此客户端可使用最新的特性发出请求,如果接收到表示错误的应答,则换用更旧的语义。

 

HTTP/1.1和之前版本的显著区别是HTTP/1.1默认使用持久连接。即,除非服务端在应答中明确指出,客户端应当假定服务端会维持一个持久连接,即使从服务端收到的应答是报告错误。

持久连接对关闭tcp连接的行为提供信号量机制的支持。

持久HTTP连接有两种方式, 即流水线 和 非流水线。

 

 6. HTTP报文的结构?

HTTP报文结构: 

报文  =》  请求报文: 1、请求行 ———— (1)、请求方法;  (2)、HTTP协议版本

                    2、请求头部   ————  Content-Type

                    3、空行

                    4、请求体

 

      =》  响应报文:1、状态行   ————   状态码   

                    2、响应头部

                    3、空行

                    4、响应体 

 

7.  HTTP状态码?

200   成功  表示请求被服务器正常处理 

204 No Content   表示请求已成功处理,但是没有内容返回(就应该没有内容返回的状况) 

206 Partial Content 表示服务器已经完成了部分GET请求(客户端进行了范围请求)

 

3XX 重定向

301 Moved Permanently 永久重定向,表示请求的资源已经永久的搬到了其他位置 

就是说资源已经被分配了新的URI 

302 Found  临时重定向,表示请求的资源临时搬到了其他位置 

请求的资源暂时被配到到了新的URI 

303 See Other  表示请求资源存在另一个URI,应使用GET定向获取请求资源 

303功能与302一样,区别只是303明确客户端应该使用GET访问  

304 Not Modified 表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足 返回304时,不包含任何响应主体 虽然304被划分在3XX,但和重定向一毛钱关系都没有

 

4XX 客户端错误

400 Bad Request 表示请求报文存在语法错误或参数错误,服务器不理解 

服务器不应该重复提交这个请求 需要修改请求内容后再次发送

401 Unauthorized

表示发送的请求需要有HTTP认证信息或者是认证失败了 

403 Forbidden

表示对请求资源的访问被服务器拒绝了 服务器可以对此作出解释,也可以不解释 

想说明的话可以在响应实体的主体部分描述原因  比如说你可能没有访问权限

404 Not Found

表示服务器找不到你请求的资源 

 

5XX 服务器错误

500 Internal Server Error

表示服务器执行请求的时候出错了 

可能是Web应用有bug或临时故障 

更有可能是服务器源代码有bug…

 

总结

返回的状态码和状态不一致的情况是有可能发生得 

比如Web应用程序内部错误,但仍然返回 200 OK

(1)、200 OK                          请求正常处理完毕

(2)、204 No Content                  请求成功处理,没有实体的主体返回

(4)、301 Moved Permanently           永久重定向,资源已永久分配新URI

(7)、304 Not Modified                发送的附带条件请求未满足

(8)、307 Temporary Redirect          临时重定向,POST不会变成GET

(10)、401 Unauthorized               需要通过HTTP认证,或认证失败

(11)、403 Forbidden                  请求资源被拒绝

(12)、404 Not Found                  无法找到请求资源(服务器无理由拒绝)

(13)、500 Internal Server Error      服务器故障或Web应用故障

(14)、503 Service Unavailable        服务器超负载或停机维护

 

8. HTTP报文首部?  HTTP通用首部字段?  HTTP请求首部字段、响应首部字段、实体首部字段?

http报文结构:  报文首部、  空行、 报文主体

请求报文中的报文首部: (1)、请求行(方法、URI、HTTP版本)

                     (2)、请求首部字段

                     (3)、通用首部字段

                     (4)、实体首部字段

                     (5)、其他

响应报文中的报文首部:  (1)、状态行(HTTP版本、状态码)

                      (2)、响应首部字段

                      (3)、通用首部字段

                      (4)、实体首部字段

                      (5)、其他

(1)、HTTP报文首部:

HTTP请求报文:method / url / HTTP版本号 / header / body

也就是请求行、请求头、请求体

HTTP响应报文:http版本号 / 状态码 / headers / body

响应行 / 响应头部 / 响应体

 

(2)、HTTP通用首部字段:

Cache-Control   控制缓存的行为;

Connection      逐跳首部、连接的管理;

Date            创建报文的日期时间;

Pragma          报文指令

Trailer         报文末端的首部一览

Transfer-Encoding   制定报文主体的传输编码方式

Upgrade         升级为其它协议

Via             代理服务器的相关信息

Warning         错误通州

 

HTTP请求首部字段:

Accept              用户代理可处理的媒体类型

Accept-Charset      优先的字符集

Accept-Encoding     优先的内容编码

Accept-Language     优先的语言(自然语言)

Authorization       web认证信息

Expect              期待服务器的特定行为

From                用户的电子邮箱地址

Host                请求资源所在服务器

If-Match            比较实体标记(ETag)

If-Modified-Since   比较资源的更新时间

If-None-Match       比较实体标记(与If-Match相反)

If-Range            资源未更新时发送实体Byte的范围请求

If-Unmodified-Since  比较资源的更新时间(与If-Modified-Since 相反)

Max-Forwards        最大传输逐跳数

Proxy-Authorization 代理服务器要求客户端的认证信息

Range               实体的字节范围请求

Referer             对请求中URI的原始获取方

TE                  传输编码的优先级

User-Agent          HTTP客户端程序的信息


 

响应首部字段:

Accept-Ranges       是否接受字节范围请求

Age                 推算资源创建经过时间

ETag                资源的匹配信息

Location            令客户端重定向至指定URI

Proxy-Authenticate  代理服务器对客户端的认证信息

Retry-After         对再次发起请求的时机要求

Server              HTTP服务器的安装信息

Vary                代理服务器缓存的管理信息

WWW-Authenticate    服务器对客户端的认证信息

 

实体首部字段:

Allow               资源可支持的HTTP方法

Content-Encoding    实体主体适用的编码方式

Content-Language    实体主体的自然语言

Content-Length      实体主体的大小(单位:字节)

Content-Location    替代对应资源的URI

Content-MD5         实体主体的报文摘要

Content-Range       实体主体的位置范围

Content-Type        实体主体的媒体类型

Expires             实体主体过期的日期时间

Last-Modified       资源的最后修改日期时间

 

9. Cookie相关知识?

Set-Cookie:  status=enable;  expires=True, 18 Jul 2019 11:26:31 GMT;

=>  path=/;  domain...

Set-Cookie的字段值:

属性:                 说明:

NAME=VALUE             赋予Cookie的名称和其值(必须项)

expires=DATE           Cookie的有效期(若不明确指定则默认为浏览器关闭前为止)

path=PATH              将服务器上的文件目录作为Cookie的适用对象(若不指定则默认为文档所在的文件目录)

domain=域名            作为Cookie适用对象的域名(若不指定则默认为创建Cookie的服务器的域名)

Secure                 仅在HTTPS安全通信时才会发送Cookie

HttpOnly               加以限制,使Cookie不能被JavaScript脚本访问

 

解析:

expires属性:

    Cookie的expires属性指定浏览器可发送Cookie的有效期,当省略expires属性时,其有效期仅限于维持浏览器会话(Session)时间内,这通常限于浏览器应用程序被关闭之前。

    另外,一旦Cookie从服务器端发送到客户端,服务端就不存在可以显示删除Cookie的方法,但可以覆盖已经过期的Cookie,实现对客户端Cookie的实质性删除操作。

path属性:

    path属性可用于限制指定Cookie的发送范围的文件目录。

domain属性:

    通过Cookie的domain属性指定的域名,可做到与结尾匹配一致;比如,当指定 example.com后,除example.com以外,www.example.com或www2.example.com等都可以发送cookie.因此,除了针对具体指定的多个域名发送Cookie之外,不指定domain属性显得更安全。

secure属性:

    secure属性用于限制web页面仅在HTTPS安全连接的时候,才可以发送Cookie。如下:

    Set-Cookie: name=value; secure

Cookie 和 Session的区别:

(1)、cookie的数据存放在客户的浏览器上,而session的数据放在服务器上(默认30分钟);

(2)、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。

(3)、session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

(4)、存储数据量方面:session能够存储任意的java对象,Session是没有大小限制和服务器的内存大小有关;单个cookie保存的数据不能超过4k,cookie只能存储String类型的对象,很多浏览器都限制一个站点最多保存20个cookie。

(5)、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

(6)、域的支持范围不一样,比方说a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解决这个问题的办法是JSONP或者跨域资源共享。

存储机制localStorage、sessionStorage与Cookie存储技术的对比?

webstorage 是本地存储,存储在客户端包括localStorage和sessionStorage

WebStorage 支持事件通知机制,可以将数据更新的通知发送给监听者。Web Storage 的 api 接口使用更方便

(1)、localStorage 的生命周期是永久,只有用户显示在浏览器提供的UI上清除localStorage的信息,这些信息才会被清除;存放的数据大小一般为5MB, 而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。

(2)、sessionStorage 仅在当前会话下有效,关闭页面或浏览器后被清除;存放数据大小为也一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。

 

相同点:   三者都是保存在客户端、且同源的;

列举区别:   

cookie 的数据始终在同源的http请求中携带,即cookie在浏览器和服务器间来回传递,而sessionStorage和

localStorage不会自动把数据发送给服务器,仅在本地保存; cookie数据还有路径的概念,可以限制cookie只属于某个路径下。

 

                          Cookie                                             sessionStorage                       localStorage

大小:                4KB                                                  5MB                                             5MB

生命周期:   可以自己设置默认到浏览器关闭       浏览器关闭                       除非自行删除或清除缓存,否则一直存在       

与服务器通信:    http头中                             不参与和服务器的通信                         仅在客户端

易用性:           一般自己封装接口                      接口可以直接使用                       接口可以直接使用               

作用域:        在所有同源窗口中都是共享的     不在不同的浏览器窗口共享   在所有同源窗口中都是共享的

 

10. HTTPS与HTTP区别及实现方式?

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

   为了解决HTTP协议的这一缺陷,需要使用另一种协议: 安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加上了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并未浏览器和服务器之间的通信加密。

 

HTTPS协议是由SSL/TLS + HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

HTTPS协议的主要作用可以分为两种: 一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

 

HTTPS 和 HTTP 的主要区别:

(1)、https协议需要用到CA申请证书,一般免费证书较少,因而需要一定的费用;

(2)、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议;

(3)、http 和 https使用的连接方式不同,用的端口也不同,http为80端口, https则为443端口;

(4)、http的连接很简单,是无状态的, https协议是由SSL/TLS + HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

 

客户端在使用https 方式与web服务器通信时候的步骤:

(1)、客户使用https的url访问web服务器,要求与web服务器简历ssl连接;

(2)、web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端;

(3)、客户端的浏览器与web服务器开始协商SSL/TLS连接的安全等级,也就是信息加密的等级;

(4)、客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送

给网站;

(5)、web服务器利用自己的私钥解密出会话密钥;

(6)、web服务器利用会话密钥加密与客户端之间的通信。

 

客户端(浏览器)                        服务端

1:请求https连接()   ==>

                                     返回证书(公钥)

2:产生随机(对称)密钥()   ==>     

3: 使用公钥对对称密钥加密() 

4:发送加密后的对称密钥()

5:通过对称密钥加密的密文通信()

 

CA证书的申请及其使用过程

上面客户端使用HTTPS与服务器通信中使用到了CA认证,这里可能大家会问为什么不直接使用非对称加密的形式直接进行,首先这里先介绍下非对称加密。

非对称加密:客户端 和 服务端均拥有一个公有密钥和一个私有密钥,公有密匙可以对外暴露,而私有密匙只有自己可见。    使用公有密匙加密的消息,只有对应的私有密匙才能解开。反过来,使用私有密匙加密的消息,只有公有密匙才能解开。这样客户端在发送消息前,先用服务器的公匙对消息进行加密,服务器收到后再用自己的私匙进行解密。

 

非对称加密的优点:

非对称加密采用公有密匙和私有密匙的方式,解决了http中消息保密性问题,而且使得私有密匙泄露的风险降低。

因为公匙加密的消息只有对应的私匙才能解开,所以较大程度上保证了消息的来源性以及消息的准确性和完整性。

为了应对上面非对称加密带来的问题,我们就引入了数字证书与数字签名

CA认证介入我们的HTTPS连接的过程如下:

1、服务器拥有自己的私钥与公钥

2、服务器将公钥交给CA认证机构,请求给予一份数字证书

3、CA认证机构生成数字证书,并颁发给服务器

4、服务器将带有公钥信息的数字证书发给客户端

5、进入客户端生成对称密钥再进行对接的过程......

 

<!-- https 的缺点 -->

https的缺点:

(1)、https协议握手阶段比较费时,会使页面的加载时间延长近50%,增加耗电;

(2)、HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

(3)、SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。

(4)、SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。

 

11、 常见的Web攻击分类:?

常见的web攻击手段:

(1)、XSS 攻击;

(2)、CSRF攻击;

(3)、SQL注入攻击;

(4)、文件上传漏洞;

(5)、DDoS攻击

 

<!-- (1) -->

(1)、 XSS攻击

XSS(Cross Site Scripting)跨站脚本攻击,为了不与层叠样式表(CSS)混淆,故将跨站脚本攻击缩写为XSS。原理即在网页中嵌入恶意脚本,当用户打开网页时,恶意脚本便开始在用户浏览器上执行,以盗取客户端cookie、用户名、密码,甚至下载木马程式,危害可想而知。

 

以一个表单输入举例说明

<input type="text" name="firstname" value="">

倘若用户在表单中输入恶意脚本,即对输入做些处理,如:

<input type="text" name="firstname" value=""/><script>alert("longlong")</script><!-- "/>

 

其实攻击的形式还有很多,比如将脚本伪装进URL,然后将URL进行URLEncode编码,当用户点击链接后,脚本就会被执行。

 

XSS防御:

对用户输入的数据进行HTML转义处理,将输出的“尖括号”、“单引号”、"引号"之类的特色符号进行转义。

    HTML         HTML转义后的字符    

    <            &lt;   

    >            &gt;

    '            &amp;   

    "            &quot;

 

<!-- (2) -->

(2)、 CSRF攻击

    CSRF攻击的全称跨站请求伪造(Cross Site Request Forgery),通过盗用用户的身份信息,以你的名义向第三方网站发起恶意请求,如转账、盗取账号、发信息、邮件等。

 

CSRF攻击的一般场景是:

1、 用户登录受信站点A,生成本地cookie;

2、 用户没有退出站点A,访问了恶意站点B;

 

CSRF防御:

1、将cookie设置为HttpOnly

    csrf攻击很大程度是利用了浏览器的cookie,为了防止站内XSS漏洞,cookie设置HttpOnly属性,

    js脚本就无法读取到cookie中的信息,避免攻击者伪造cookie的情况出现。

2、增加token

在请求中放入攻击者不能伪造的信息,并且信息不在cookie中。

于是,可以在http请求中以参数的形式加一个token,此token在服务端生成,也在服务端校验,服务端的每次会话都可以用同一个token;如果验证token不一致,则认为csrf攻击,拒绝请求。

3、通过Referer识别

    Http头中有一个字段Referer,它记录了Http请求来源地址;但是注意不要把Referer用在身份验证或者其他非常重要的检查上,因为Referer非常容易在客户端被改变。

    (火狐的一个插件RefControl修改Referer引用)

 

<!-- (3) -->

(3)、SQL注入攻击

SQL注入攻击就是把SQL命令伪装成正常的http请求参数,传递到服务端,欺骗服务器最终执行恶意的SQL命令,达到入侵目的。

SQL注入防范:

1、使用预编译语句

2、使用ORM框架

 

<!-- (4) -->

(4)、文件上传漏洞

倘若web网站没有对文件类型进行严格的校验,导致可执行文件上传到了服务器,恶意程序就会执行。

为了避免恶意文件上传,需要对上传文件类型进行白名单校验,并限制文件大小,上传文件进行重命名。有关文件类型的校验,需要去了解下魔数(magic number)这个概念,这里不做引伸。

 

<!-- (5) -->

(5)、DDoS攻击

DDoS(Distributed Denial Of Service)攻击即分布式服务攻击,借助公共网络,将数量庞大的计算器设备(肉鸡)联合起来,对一个或多个目标发动攻击,从而达到瘫痪目标主机的目的。

DDoS攻击手段

1、SYN flood

攻击者伪造大量无效IP,不断与目标主机建立TCP链接,导致服务器维护了一个非常大的链接等待列表,占用大量系统资源,直至新链接无法建立。

这种攻击是利用了TCP三次握手的异常处理机制,即第三次握手,服务端在没有收到客户端ACK报文时,服务端会进行多次SYN+ACK重试,然后维护一个等待列表,而系统会为即将建立的TCP连接分配一部分资源。资源耗尽,系统也就无法再建立TCP连接。

2、DNS query flood

攻击者伪造大量无效域名,发送给目标服务器解析,这些域名均为无效域名,导致DNS服务器耗用大量资源去处理这些无效域名,造成DNS解析域名超时,达到攻击目的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值