网络

148 阅读29分钟

一、网络基础TCP/IP

  • TCP/IP

    计算机与网络设备要相互通信,如:探测通讯目标,由谁先发起通信,确定使用哪种通信语言,结束通信等,不同硬件、操作系统之间的通信,都要达成某种协议,才能完成通信的过程。协议中又存在各式各样的内容(HTTP、DNS、UDP、IP、FTP等等),因此,我们把与互联网相关联的协议集合起来总称为TCP/IP。
    
  • 网络体系参考模型OSI

    OSI参考模型分为7层,从上到下分别为:
    
    • 应用层

      HTTP、SMTP、IMAP
      
    • 表示层

      用于加密/解密   
      
    • 会话层

      用于通信连接/维持会话
      
    • 传输层

      TCP/UDP
      
    • 网络层

      IP
      
    • 数据链路层

      网络特有的链路接口
      
    • 物理层

      网络物理硬件
      
  • 因特网所遵循的协议体系参考模型TCP/IP

    TCP/IP参考模型分为4层,从上到下分别为
    
    • 应用层

      FTP(文件传输协议)、DNS(域名解析系统)、HTTP(超文本传输协议)
      
    • 传输层

      提供处于网络连接中两台计算机之间的数据传输,它主要包括两种TCP(传输控制协议)、UDP(用户数据报协议)
      
    • 网际层

      用来处理网络上流动的数据包,数据包是网络传输的最小数据单位。
      它规定了应该通过怎样的传输路线到达对方的计算机,并把数据包传送给对方。
      当对方的计算机之间通过多台计算机或网络设备进行传输时,它的作用是它会在众多的路线中选择其中的一条作为传输路线。
      
    • 网络接口层

      用来处理连接网络的硬件部分。它主要包括控制操作系统、硬件的设备驱动、网卡、光纤等物理可见部分。硬件上的范畴均在链路层的作用范围之内。
      
  • TCP/IP中与HTTP相关的协议

    • IP(网际协议位于网络层)

      IP旨在让目标主机收到数据包。
      IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可以变换,但MAC地址基本上不会更改。
      IP地址间的通信依赖MAC地址,在网络上,通信的双方在同一局域网内的情况很少,通常需要多台计算机和网络设备中转才能连接到对方。中转的过程利用中转设备的MAC地址在找寻下一个中转目标。此时,会采用ARP协议,ARP是一种用以解析地址的协议,根据通信方的IP地址就可以发查出对应的MAC地址。  
      
    • TCP

      TCP位于传输层,提供可靠的字节流服务,能够把数据准确的传送给对方。
      字节流服务:把大块数据分割成以报文段为单位的数据包进行管理。
      为了准确无误地将数据送达目标处TCP协议采用了三次握手策略
      

  • HTTP报文

    • 报文结构

      HTTP协议的报文由报文首部和报文主体构成,中间由空行(CR+LF)分割。其中报文首部为客户端和服务器分别处理请求和响应提供所需要的信息。
      
    • HTTP请求报文

      请求报文的报文首部包括:请求行、请求首部字段、通用首部字段、实体首部字段等部分。其中请求行由方法、URI、HTTP版本组成。
      
    • HTTP响应报文

      响应报文的报文首部包括:状态行、响应首部字段、通用首部字段、实体首部字段等部分。其中状态行由状态码、原因短语、HTTP版本组成。
      
  • 首部字段的类型

    • 请求首部字段

      请求首部字段是从客户端往服务器发送请求报文中所使用的字段,用来补充请求的信息。
      
      1.Accept: application/json, text/html, */*; q=0.01
       Accept首部字段用于通知服务器,客户端能够处理的媒体类型以及媒体类型的相对优先级,其中优先级使用q=来表示权重值,权重值q得范围为0~1,可精确到小数点后3位,值越大权重越大,不指定权重q时,默认权重为q=1.0。
       
      2.Accept-Encoding: gzip, deflate, br
        Accept-Encoding首部字段用于通知服务器,客户端支持的内容编码及内容编码的优先级顺序。可以使用q表示优先级,可以使用*作为通配符,同上。
        
      3.Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
        Accept-language首部字段用来通知服务器,客户端能够处理的自然语言集,以及自然语言集的相对优先级。可以使用q表示优先级,可以使用*作为通配符,同上。
      
      4.Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJhIjoiODk1NkY4ODZDNzk0QTUyMzdFNjA5MEY0M0UyNkM5QjMiLCJiIjoiMjBVQzE5OTI4ODE1NDEzNTY5ODQ2MDkiLCJjIjoiMTlSTDE2MDcxMzg5MTQ5MTEzODc2NDgsMTlSTDE2ODQxNzU4ODc4NzQxMjk5MjAiLCJkIjoic3lzX2VkdV9wYyIsImUiOiJlZHUiLCJmIjoiMSIsImV4cCI6MTU5NjcxODQ4NX0.31LgwPfheFxQYHB7fkTDM0eoZR1azX_Ki1bi0woEz7M
      首部字段Authorization用来通知服务器,用户带来的认证信息。
      
      5.Host: dl.reg.163.com
      Host首部字段用来通知服务器,请求的资源所处的互联网主机名和端口号。
      
      6.referer: https://www.w3school.com.cn/tcpip/tcpip_intro.asp
        referer首部字段用来通知服务器,请求的URI是从哪个Web页面发起的。
        
      形如 If-XXX这种样式的请求首部字段,都可以成为条件请求,服务器接收 
      到附带条件的请求后,只有判断指定的条件为真时,才会执行请求。
      
      7.origin: https://v.qq.com
      
      origin请求首部字段告诉服务器来自哪个站点,该字段仅指示服务器名称,并不包含任何路径信息。该首部用于CORS请求或者POST请求。除了不包含路径信息,该字段与Referer首部字段相似。
      
      8.User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36
      
      首部字段User-Agent会将创建请求的浏览器和用户代理名称等信息传达给服务器。
      
      9.If-Match
      If-Match首部字段用来通知服务器,匹配资源所用的实体标记的值(ETag),
      服务器会比对If-Match的字段值和资源的ETag值,仅当两者一致时服务器才会
      执行请求。否则返回412 Precondition Failed值。
      
      10.If-Modified-Since:Tue, 04 Aug 2020 13:41:07 GMT
      If-Modifed-Since首部字段用来通知服务器,在指定的日期时间之后是否更新过,服务器会比对If-Modified-Since的字段值和资源的更新日期时间Last-Modified,当If-Modified-Since的值大于Last-Modified的值,则返回304 Not Modified,否则执行请求。
      
      10.If-None-Match
       If-None-Match首部字段用来通知服务器,是否匹配到了资源所用的实体标记的值(ETag),服务器会比对If-None-Match字段值的实体标记ETag和资源的ETag值,当两者不一致时服务器服务器执行请求,否则返回304.
       
      
    • 响应首部字段

      响应首部字段是由服务器端向客户端返回响应报文中所使用的字段,用户补充响应的信息。
      
      1.ETag:"bd2f0cb86495fd2357c89114c34f2b16-ssl-df"
      ETag首部字段用来告诉客户端实体标识,是用字符串的形式做唯一性标识的方式,服务器会为每份资源分配对应的ETag值。ETag有强值和弱值区分,弱值会在字段值最开始处附加W/
      
      2.Location:http://www.baidu.com/index.html
      Location首部字段可以将响应的接收方引导至某个新的请求URI地址。
      
      3.Server: nginx
      首部字段Server用来告知客户端当前服务器上安装的HTTP服务器应用程序的信息。
      
    • 通用首部字段

      通用首部字段是指,请求报文和响应报文双方都会使用的首部字段。
      
      1.Cache-Control
      通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制、
       1.1 Cache-Control:public
       指定public后,其他用户也可利用缓存
       1.2 Cache-Control:private
       指定private后,服务器只对该特定的用户对象提供资源缓存服务,对于其他用户服务器不会返回缓存。
       1.3 Cache-Control:no-cache
       使用no-cache指令的目的是为了防止从缓存中返回过期的资源。
       客户端的角度:客户端不会接收缓存过的响应,强制向源服务器发送请求验证。
       服务器的角度:缓存服务器不能对资源进行缓存,源服务器以后也将不再对缓存服务器请求中提出的资源有效性进行确认,且禁止其对响应资源进行缓存操作。
       1.4 Cache-Control:no-store
       使用no-store指令不缓存请求或响应的任何内容
       1.5 Cache-Control:max-age=604800
       使用max-age的目的是指定缓存期限。
       客户端的角度:如果判定缓存资源的缓存时间数值比指定时间的数值更小。那么客户端就接收缓存的资源。当指定max-age=0后,那么缓存服务器需要将请求转发给源服务器。
       服务器的角度:缓存服务器将不对资源的有效性再作确认,而max-age数值代表资源保存为缓存的最长时间。
       在HTTP/1.1版本中如果同时存在Expires首部字段,会优先处理max-age指令。
       
       2.Connection:不再转发的首部字段名
       在客户端发送请求和服务器返回响应内,使用Connection首部字段,可控制不再转发给代理的首部字段。
       
       3.Connection:Keep-Alive
       持久连接,HTTP/1.1版本的默认连接都是持久连接。客户端会在持久连接上连续发送请求。
       
       4.Connection:close
       当服务器端想明确断开连接时,则指定Connection首部字段的值为close
       
       5.Date: Tue, 04 Aug 2020 23:12:16 GMT
       首部字段Date表明创建HTTP报文的日期和时间。
       
       6.Pragma: no-cache
       PragmaHTTP/1.1之前版本的历史遗留字段,仅作为与HTTP/1.0的向后兼容。只用在客户端发送的请求中,客户端会要求所有的中间服务器不返回缓存的资源,如果所有的中间服务器都能以HTTP/1.1为基准,那么直接采用Cache-Control:no-cahce指定缓存的处理方式最为理想,但是整体掌握所有的中间服务器使用的HTTP协议版本不现实,因此发送的请求会同时含有 Pragma:no-cacheCache-Control:no-cache
       
       7.Transfer-Encoding: chunked
       Transfer-Encoding首部字段规定了传输报文主体时采用的编码方式。HTTP/1.1的传输编码方式仅对分块传输编码有效。
       
       8.Upgrade
       首部字段Upgrade用于检测HTTP协议及其他协议是否可使用更高的版本进行通信。使用首部字段Upgrade时,还需要额外指定Connection:Upgrade9.Via
       报文经过代理或网关时,会先在首部字段Via中附加该服务器的信息,然后再进行转发。使用Via首部字段是为了追踪客户端于服务器之间的请求和响应报文的传输路径。除此之外还可以避免请求回环的发生。
      
    • 实体首部字段

      实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间与实体相关的信息。
      
      1. Allow
      首部字段Allow用于通知客户端能够支持Request-URI指定资源的所有HTTP方法。当服务端收到不支持的HTTP方法时,会以状态码405 Method Not Allowed作为响应返回,与此同时还会把所有能支持的HTTP方法写入首部字段Allow后返回。
      
      2.Content-Encoding: gzip
      首部字段Content-Encoding会告知客户端服务器在对实体的主体部分选用的内容编码方式。内容编码,不丢失实体信息的前提下所进行的压缩。
      
      3.Content-Language:zh-CN
      首部字段Content-Language会告知客户端,实体主体使用的自然语言。
      
      4.Content-Length: 15000
      首部字段Content-Length表明了实体主体部分的大小。
      
      5.Content-Loaction:http://www.hackr.jp/index.html
      首部字段Content-Location表示的是报文主体返回资源对应的URI6.Content-Type:text/html;charset=UTF-8
      首部字段Content-Type说明了实体主体内对象的媒体类型。
      
      7.Expires:Tue, 04 Aug 2020 23:12:16 GMT
      首部字段Expired会将资源失效的日期告知客户端。缓存服务器接收到客户端含有首部字段Expires的响应后,在Expires字段值指定的时间之前,缓存服务器会以缓存来应答请求。当超过指定的时间后,缓存服务器会转向源服务器请求资源。
      源服务器不希望缓存服务器对资源缓存时,最好在Expires字段内写入与首部字段Date相同的时间。
      首部字段Cache-Control的max-age指令比首部字段Expires优先级高。
      
      8.Last-Modified:Tue, 04 Aug 2020 23:12:16 GMT
      首部字段Last-Modified指明资源最终的修改时间。
      
    • 为Cookie服务的首部字段

      Cookie用来管理客户端与服务器之间的状态。Cookie的工作机制是用户识别及状态管理。
      1.Cookie
      在客户端保存着从服务器返回来的Cookie信息。首部字段Cookie会告知服务器,当客户端想获得HTTP状态管理支持时,就会在请求中包含Cookie信息。
      
      2.Set-Cookie:status=enable;expires=Tue, 04 Aug 2020 23:12:16 GMT;path=/;domain=.hackr.jp;secure;HttpOnly;
      开始状态管理时服务器生成的Cookie信息。
      
      2.1 expires属性
      Cookie的expires属性指定浏览器可发送Cookie的有效期。
      expires属性不存在时有效期仅限于维持浏览器会话的时段内,通常限于浏览器应用程序被关闭之前。
      Cookie从服务器端发送至客户端后,服务器端就只能通过覆盖已过期的Cookie来实现对客户端Cookie的实质性删除。
      
      2.2 path属性
      path属性用于指定Cookie发送范围的文件目录。
      
      2.3 domain属性
      通过domain指定可以发送Cookie的域名,可以设置子域。
      
      2.4 secure属性
      Cookie的secure属性用于限制web页面仅在HTTPS安全连接时才可以发送Cookie。
      
      2.5 HttpOnly属性
      httpOnly属性的作用是,它使Javascript脚本的document.cookie无法获得Cookie。主要目的是为了防止跨站脚本攻击(XSS)对Cookie的信息窃取。
      
      2.6 Max-Age
      Max-Age告知浏览器Cookie多久之后过期,而不是一个具体的时间点。
      
  • HTTP缓存

  • HTTP和HTTPS

    • HTTPS

      HTTPS就是HTTP+SSL(安全套接层)或TLS(安全传输层协议)
      
    • HTTP的缺点

      1.HTTP不具备加密功能,使用明文通信,内容可能会被窃听。
      解决方案:1.使用SSL或TLS的组合,对通信加密,即HTTPS。
               2.对HTTP报文里所含的内容(报文主体)进行加密。
      
      2.HTTP是无状态的协议,不验证通信方的身份,因此有可能遭遇伪装。
      不验证通信方身份,因此任何客户端发送过来的请求都会返回响应。会造成以下问题:
      2.1:无法确定请求的目标服务器,可能是伪装的服务器。
      2.2:无法确定接收响应的客户端,可能是伪装的客户端。
      2.3: 无法确定正在通信的对方是否具备访问权限。
      2.4:无法确定请求来自何方、出自谁手。
      2.5  无意义的请求也会接收,无法阻止DOS攻击。
      
      解决方案:SSL不仅提供加密处理,还使用了证书的手段来确定通信方。
      
      3.无法证明报文的完整性即报文信息是否正确,因此有可能遭到篡改。
      
      解决方案:使用MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。但这种方法不可靠。
       
      
    • HTTPS的缺点

      1.与HTTP通信相比,ssl加密会消耗更多的CPU及内存资源。因此如果是非敏感信息则使用HTTP通信,包含个人信息等敏感数据时,才利用HTTPS加密通信。 2.购买证书需要一定的费用,会增加开销。

    • HTTP+加密+认证+完整性保护=HTTPS

      作用:HTTPS是用来解决上述HTTP的所有问题的。在使用了SSL后,HTTP就拥有了加密、认证、完整性保护等功能。
      
      概念:HTTPS只是在HTTP通信接口部分用SSL和TLS代替而已,通常HTTP直接和TCP进行通信,当使用SSL时,就变成了先和SSL通信,再由SSL和TCP通信。HTTPS就是身披SSL协议这层外壳的HTTP
      
  • 加密

    • 共享密钥加密

      加密和解密同用一个密钥的方式称为共享密钥加密,也叫对称密钥加密。
      
      缺点:把密钥发送给对方的时,如果通信被人监听,有可能落入攻击者之手,只要拿到密钥任何人都能破解密码。这样加密也就失去了意义。
      
    • 公开密钥加密

      公开密钥加密使用一对非对称的密钥,一把叫做私有密钥,另一把叫做公开密钥。公开密钥可以随意发布,私有密钥不能让其他任何人知道。
      
      原理:发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,在使用自己的私有密钥进行解密。因为要根据密文和公开密钥来恢复原文,从目前的技术上来看,是不太现实的因此这种方式比较安全。
      
      优点:不需要发送用来解密的私有密钥,因此不用担心私有密钥被攻击者窃听盗走。
      
    • HTTPS的加密机制

      从安全的角度来看:公开密钥加密比共享密钥加密更安全。
      从性能的角度来看: 公开密钥加密比共享密钥加密的处理速度要慢。
      为了发挥各自优势,HTTPS采用二者混合的加密机制,1.在交换密钥阶段使用公开密钥加密方式来保证安全性。在建立通信交换报文阶段使用共享密钥加密方式来保证效率。
      即使采用公开密钥加密也还是无法证明公开密钥本身是真实的公开密钥,因为公开密钥也需要传输,传输的过程中,真正的公开密钥可能已经被攻击者替换掉了。因此我们需要使用数字证书认证机构CA颁发的公开密钥证书。
      
    • 证书

      1.什么是证书?
      
      数字证书认证机构是客户端与服务器双方都可信赖的第三方机构。
      服务器的运营人员向数字证书认证机构提出公开密钥的申请。
      数字证书认证机构在判明申请者的身份后,会用自己的私有密钥对服务器 的公开密钥做数字签名,然后分配这个已签名的公开密钥,并放入公钥证书。
      服务器会将这个公钥证书发送给客户端,以进行公开密钥加密方式通信。
      公钥证书也可叫做数字证书,或者证书。
      
      2.客户端如何处理证书?
      客户端接收到证书后,可以使用数字证书认证机构的公开密钥,对证书上的数字签名进行验证,一旦验证通过,客户端就确定两个信息:一,认证服务器端公开密钥的数字证书认证机构是真实有效的。二,服务器端的公开密钥是值得信赖的。
      
      3.如何传递数字证书认证机构的公开密钥?
      数字证书认证机构的公开密钥传递给客户端也会面临在传输过程中,被替换掉的风险,因此,多数浏览器开发商发布版本时,会事先在内部植入常用数字证书认证机构的公开密钥。
      
      4.客户端证书一般用于银行的网上银行。
      
      
    • SSL的速度会慢

      1.HTTPS比HTTP慢2-100倍。因为SSL本身也需要进行通信,因此相比于HTTP会从整体上增加通信处理的量。
      2.SSL必须进行加密处理,在服务器和客户端都需要进行加密和解密运算处理,会大量消耗服务器和客户端的硬件资源,导致负载增强。
      
  • 用户身份认证(HTTP使用的认证方式)

    • BASIC认证

      BASIC认证是从HTTP/1.0就开始定义的认证方式
      
      BASIC认证的认证步骤如下:
      
      1. 客户端发送请求。
      2.当请求的资源需要BASIC认证时,服务器会返回401 Authorization Require状态码,并返回WWW-Authenticate首部字段的响应。告诉客户端需要认证。
      3.客户端接收到状态码401后,为了通过BASIC认证,需要将用户名ID及密码用冒号:连接,并经过Base64编码处理后,(浏览器会自动完成Base64的转码工作)将这段编码后的字符串写入首部字段Authorization,发送给服务器。
      4.服务器接收到包含首部字段Authorization请求后,会对认证信息的正确性进行验证,如果通过则返回包含Request-URI资源的响应。
      
      缺点:
      
      1.BASIC认证虽然采用Base64编码,但Base64并不是加密处理,因此认证的过程中,认证信息容易被盗。
      2.一般的浏览器无法实现认证注销操作,因此没有办法在认证之后,在进行一次认证。
      
    • DIGEST 认证

      DIGEST认证是从HTTP/1.1起开始定义的认证方式。为了弥补BASIC认证的缺点。
      
      DIGEST认证的认证步骤:
      
      1.客户端发送请求
      2.当请求的资源需要认证时,服务器会返回401 Authorization Require状态码,并返回WWW-Authenticate首部字段的响应。告诉客户端需要认证。WWW-Authenticate必须包含 realm 和 nonce两个字段信息。
      3.客户端接收到状态码401后,会在请求中加上DIGEST认证必须的首部字段Authorization信息。Authorization字段必须包含username realm nonce uri response等字段信息。realm nonce是从服务器接收到的响应字段。
      4.服务器接收到包含首部字段Authorization请求后,会对认证信息的正确性进行验证,如果通过则返回包含Request-URI资源的响应。并在首部字段Authentication-Info写入一些认证成功的信息。
      
      缺点:
      1.DIGEST认证安全等级高于BASIC认证但较低于HTTPS的客户端认证。
      2.DIGEST认证提供防止密码被窃听的保护机制,但没有防止用户伪装的保护机制。
      
    • SSL客户端认证

      SSL客户端认证需要事先将客户端证书分发给客户端,且客户端必须安装此证书。
      作用: 只要用户名密码正确,服务器就可认证通过,当用户账号密码被盗后,第三者冒充客户端去发送请求。而SSL客户端认证是用来认证客户端计算机的。因为可以避免当用户账号密码被盗后,防止第三者拿着用户名和密码冒充客户端去发送请求。
      
      SSL客户端认证的认证步骤:
      1.客户端会事先安装好客户端证书,客户端发送请求。
      2.当请求的资源需要认证时,服务器会发送Certificate Request报文,要求客户端提供客户端证书。
      3.客户端会把客户端证书信息以Client Certificate报文的方式发送给服务器。
      4.服务器验证客户端证书通过后,会领取客户端证书的公开密钥,然后进行HTTPS加密通信。
      
      缺点:
      1.SSL客户端证书需要从认证机构购买客户端证书,因此需要产生一定的费用。
      
    • 基于表单认证

      基于表单的认证方法并不是在HTTP协议中定义的。
      基于表单认证的本质是:通过服务器端的Web应用,对客户端发送过来的用户ID和密码进行验证,基于验证结果来决定是否成功。
      因为HTTP是无状态协议,无法通过协议层面来保存上一次已经认证成功的用户状态,即HTTP协议无法实现状态管理。因此当已经认证成功的用户下一次继续访问时,服务器也无法区分它是谁。为了弥补HTTP协议中无法实现的状态管理功能。我们用Cookie来管理Session
      
    - 用Cookie来管理Session
    
          利用Cookie来管理Session的步骤:
          1.客户端把用户ID和密码等登录信息放入报文的实体部分,通常以POST的方式发送给服务器。
          2.服务器验证客户端发送过来的登录信息进行身份认证,服务端会生成一个用于识别用户的SessionID,并把用户的认证状态与SessionID绑定在一起然后记录在服务器端。
          3.当服务器向客户端返回响应时,会在首部字段Set-Cookie内写入SessionID。建议在Cookie中写上HttpOnly,避免跨站脚本攻击。
          4.客户端接收到服务器端发来的SessionID后,会将其作为Cookie保存在本地,下次向服务器发送请求时,浏览器会在请求报文中自动带上Cookie,因此Session ID也随之发送到服务器,服务器就收到客户端发来的SessionID后,通过SessionID识别用户和认证状态。 
          
    - 用户身份认证的使用现状
    
          由于使用的上的便利性及安全性问题,HTTP协议标准提供的BASIC认证和DIGEST认证几乎都不怎么使用。SSL虽然安全性等级很高,因为费用问题,尚未普及。现在的用户认证大部分使用的是基于表单的认证。
        
    
  • 网络安全

    针对Web应用的攻击模式主要有以下两种:

    • 1.主动攻击

      主动攻击是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。该攻击模式是直接针对服务器上的资源进行攻击。主要有SQL注入攻击、OS命令注入攻击。会话劫持。
      
    • 2.被动攻击 XSS跨站脚本攻击,会话固定攻击,CSRF跨站点请求伪造,属于被动攻击

输出值转义不完全引发安全漏洞

- XSS跨站脚本攻击

      跨站脚本攻击:是指通过存在安全漏洞的web网站,在注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。
      
      后果:
      1.利用虚假输入表单骗取用户的个人信息。
      2.利用脚本窃取用户的Cookie值。在被害者不知情的情况下,发送恶意请求。
      3.显示伪造的图片或文章。


- SQL注入攻击
   
      SQL注入攻击:是指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。
         
      后果:
      1.非法查看篡改数据库内的数据
      2.规避认证
      3.执行和数据库服务器业务关联的程序
      
 - OS命令注入攻击
   
       OS命令注入攻击:是指通过Web应用,执行非法的操作系统命令达到攻击的目的。
         
       为什么能注入OS?
       只要在能调用Shell函数的地方,就有存在被攻击的风险。Web应用中可以从通过Shell来调用操作系统命令。此时如果调用Shell时存在安全疏漏,就可以执行插入的非法OS命令。
         
       后果:
       OS命令可以向shell发送命令,让Windows或Linux操作系统的命令行启动程序,因此通过OS注入攻击可执行OS上安装着的各种程序。
         
  - 其他的因输出值转义不完全引发安全漏洞攻击
  
        1.HTTP首部注入攻击
        通过%0D%0A换行符插入新的首部字段,比如插入Set-Cookie就可以伪装用户达到攻击的目的。
        
        2.HTTP响应截断攻击
        在响应报文中插入%0D%A%0D%0A字符串,利用这两个连续的换行就可以让HTTP首部与主体分隔开,这样就能伪造响应的主体,发送给客户端,达到攻击目的。
        
        3.邮件首部注入攻击
        在web应用的邮件发送功能中,通过向邮件首部To或Subject内任意添加非法内容发起的攻击。同样利用%0D%0A和%0D%A%0D%0A。
       
        4.目录遍历攻击
          目录遍历攻击:指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的攻击。当外部指定文件名存在漏洞时,可以利用./或者../等相对路径定位到指定文件的上一级或根目录等任何目录下,因此服务器上的任意文件或文件目录都能被访问到,从而达到攻击的目的。
          
        5.远程文件包含漏洞攻击
        远程文件内包含漏洞攻击:指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL当作依赖文件,脚本读取该URL后,就可以运行任意脚本的攻击。
      

因会话管理疏忽引发的安全漏洞

- 会话劫持
  
      会话劫持:指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的。
      攻击案例:利用XSS攻击用含有document.cookie的JavaScript脚本窃取用户的Cookie信息然后就能拿到用户的会话ID。攻击者在自己浏览器的Cookie中设置该会话ID,就能伪装成用户,访问web网站了。

- 会话固定攻击
   
      会话固定攻击:是指强制用户使用攻击者指定的会话ID,以达到攻击的目的。
     
      攻击案例:如果一个Web网站的认证功能是,先在认证前发布一个会话ID,若认证成功,就会在服务器内改变认证状态。攻击过程如下:
      1.攻击者访问登录页面,服务器会发布一个会话ID,该会话ID为未认证状态。
      2.攻击者设置好强制用户使用该会话ID的陷阱,一旦用户触发陷阱,用户就会拿着这个攻击者的会话ID前去认证,当用户完成认证后,服务器上的状态就会记录成用户已认证。
      3.攻击者估计用户差不多已触发陷进后,利用这个会话ID去访问网站。由于这个会话ID目前已是用户的登录状态,于是攻击者就可以作为用户的身份顺利登录网站。
     
- CSRF跨站点请求伪造 

      跨站点请求伪造:是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行状态更新或信息处理。
      攻击过程如下:
      1.用户身份认证通过,它的浏览器中的Cookie持有已认证的会话ID。
      2.攻击者布下陷阱。
      3.用户触发陷阱,因为用户此时已经认证,陷进就会拿着用户的认证信息去做自己想做的事。

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

- 强制浏览

      强制浏览安全漏洞是指:把那些原本非自愿公开的,或者需要具有访问权限的用户才能查看的信息,放置在web服务器的公开目录下的文件中。因此用户直接可以通过URL访问这些非自愿公开的文件  和信息,从而产生安全漏洞。
 
- 不正确的错误消息处理

      不正确的错误消息处理的安全漏洞是指:web应用抛出的错误信息内包含对攻击者有用的信息。攻击者会利用这些有用的错误消息给下一次攻击进行提示。从而产生安全漏洞。

- 开放重定向

      开放重定向是一种对指定的任意URL作重定向跳转的功能。因此开放重定向安全漏洞是指:假如把重定向的URL指向了某个具有恶意的Web网站,那么用户就会被诱导至那个Web网站。从而达到攻击目的。

其他安全漏洞

- 密码破解

      密码破解攻击:算出密码,突破认证。

- 点击劫持

      点击劫持:是指利用透明的按钮或链接做成陷阱,覆盖再Web页面之上,然后诱使用户在不知情的情况下,点击那个连接访问内容的一种攻击手段,又称界面伪装。

- Dos攻击

      Dos攻击是一种让运行中的服务呈停止状态的攻击,也叫服务停止攻击,或拒绝服务攻击。
      DDos攻击:多台计算机发起的Dos攻击。

      Dos攻击的对象不仅限于Web网站,还包括网络设备及服务器。
      Dos攻击的攻击方式:
      1.集中利用访问请求造成资源过载,资源用尽时,实际上服务也就呈停止状态了。集中利用访问请求也就是发送大量合法请求,服务器没法分辨是攻击还是正常请求,因此Dos攻击难以防范。
      2.通过攻击安全漏洞使服务停止。

- 后门程序

      后门程序是指开发设置的隐藏入口,可以不按正常步骤使用原本受限制的功能。

- MITM中间人攻击

      中间人攻击:因为HTTP协议无法证明报文信息的准确性,在请求或响应的传输过程中,有可能遭受攻击者拦截并篡改内容。这称为中间人攻击
      
      

HTTP2.0

MDN关于网络
https://developer.mozilla.org/zh-CN/docs/Web/HTTP
CSRF概念:CSRF跨站点请求伪造
https://blog.csdn.net/xiaoxinshuaiga/article/details/80766369
前端登录相关
https://juejin.cn/post/6845166891393089544
https://juejin.cn/post/6844904142155022349
https://zhuanlan.zhihu.com/p/129227994
https://zhuanlan.zhihu.com/p/84401159
https://zhuanlan.zhihu.com/p/152224669
vue

https://juejin.cn/post/6850037277675454478
axios封装
https://juejin.cn/post/6847009771606769677

ajax以及跨域相问题 mp.weixin.qq.com/s/bje2AAk7e… juejin.cn/post/684490…