美文网首页
HTTP网络协议(学习笔记五)

HTTP网络协议(学习笔记五)

作者: 小小小小饼 | 来源:发表于2021-09-18 14:43 被阅读0次

    HTTP网络协议(五)

    15~18课

    15.状态码_form提交

    状态码(Status Code)

    -状态码指示HTTP请求是否已成功完成

    状态码可以分为5类

    -信息响应:100~199

    -成功响应:200~299

    -重定向:300~399

    -客户端错误:400~499

    -服务端错误:500~599

    状态码描述语

    100 continue

    -请求的初始部分已经被服务器收到,并且没有被服务器拒绝,客户端应该继续发送剩余的请求,如果请求已完成,就忽略这个响应

    -允许客户端发送带请求体的请求前,判断服务器是否愿意接收请求(服务器通过请求头判断)

    -在某些情况下,如果服务器再不堪请求体就拒绝请求时,客户端就发送请求体是不恰当的或低效的

    200 OK:请求成功

    302 Found:请求的资源被暂时的移动到了由Location头部指定的URL上

    304 Not Modified: 说明无需再次传输请求的内容,也就是说可以使用缓存的内容

    400 Bad Request: 由于语法无效,服务器无法理解该请求

    有可能格式没问题,但内容不全,也会返回400。(可由开发决定)

    401 Unauthorized: 由于缺乏目标资源要求的身份验证凭证

    403 Forbidden: 服务器端有能力处理该请求,但是拒绝授权访问

    404 Not Found:服务器端无法找到所请求的资源

    405 Method Not Allowed: 服务器禁止了使用当前HTTP方法的请求(有能力,但是禁止)

    406 Not Acceptable: 服务器端无法提供与Accept-Charset以及Accept-Language 指定的值相匹配的响应

    408 Request Timeout: 服务器想要将没有在使用的连接关闭

    一些服务器会在空闲连接上发送此消息,即使是在客户端没有发送任何请求的情况下

    500 Internal Server Error: 所请求的服务器遇到意外的情况并阻止其执行请求

    501 Not Implemented: 请求的方法不被服务器支持,因此无法被处理

    -服务器必须支持的方法(即不会返回这个状态的方法) 只有GET和HEAD

    502 Bad Gateway: 作为网关或代理角色的服务器,从上游服务器(如tomcat)中接收到的响应是无效的

    503 Service Unavailable:服务器尚处于可以接受请求的状态

    -通常造成这种情况的原因是由于服务器停机维护或已超载

    form提交 - 常用属性

    html 里form里的button, 默认类型 type = submit

    form提交,文件上传必须使用multipart/form-data

    -action: 请求的URI

    -method: 请求方法(GET、POST)

    -enctype: POST请求时,请求体的编码方式

    application/x-www-form-urlencoded(默认值)

    用&分隔参数,用=分割键和值,字符用URL编码方式进行编码

    getParameter, 只能取urlencoded的方法取值

    multipart/form-data的类型,不能通过getParameter取出。需要从content-type 的boundary取出每一段的数据

    Java里可以用第三方库取出这些值,帮助解析请求体。 第三方库 Commons-fileupload

    form提交 - multipart/form-data

    参考RFC_1521

    请求头

    Content-Type:multipart/form-data; boundary=xxx


    MORERR formi.jpg

    16.跨域_Cookie_Session

    Access-Control-Allow-Origin 服务器设置,告诉浏览器,谁能跨域

    Origin 浏览器发给服务器,告诉服务器源头是什么

    前后端分离:后台工程师 JAVA

    前端工程师 HTML JS CSS

    页面服务器(Nginx)

    03CORS FontEdge

    Index.html

    后台服务器(Tomcat)

    02.Cors UserSecvlet

    Idea服务器会自动开启一个服务器

    同源策略(Same-Origin Policy)(浏览器出于安全考虑)

    浏览器有个同源策略 Ajax请求 异步请求的一种

    -它规定了:默认情况下,Ajax请求只能发送给同源的URL

    -同源是指三个相同:协议、域名(IP)、端口

    -img、script、line、iframe、video、audio等标签不受同源策略的约束

    跨域资源共享和

    解决Ajax跨域请求的常用方法

    -CORS(Cross-Origin Resource Sharing),跨域资源共享

    CORS的实现需要客户端和服务器同时支持

    -客户端

    所有的浏览器都支持(IE至少是IE10版本)

    -服务器

    需要返回相应的响应头(比如Access-Control-Allow-Origin)

    告知浏览器这是一个允许跨域访问的请求

    Cookie 请求头

    Set-Cookie 响应头

    Cookie: (只针对一个浏览器,换了浏览器需重新设置Cookie)

    在服务器(浏览器)存储一些数据,存储到本地磁盘(硬盘)

    服务器可以返回Cookie交给客户端去存储

    Cookie是直接存储在浏览器本地的一小串数据

    -使用document.cookie访问Cookie

    -修改Cookie时,只会修改其中提到的Cookie

    -name = value 必须被编码(encodeURIComponet)

    -一个Cookie最大为4kb, 每个网站最多有20+个左右的Cookie(具体取决于浏览器)

    服务器设置Cookie

    Cookie通常是由Web服务器使用的响应头Set-Cookie设置的

    关于max-age

    -在JavaScript

    Cookie的作用域

    domain和path标示定义了Cookie的作用域,即Cookie应该发送给哪些URL

    domain

    -标示制定了那些主机可以接受Cookie

    -如果不指定,默认为当前文档的主机(不包含子域名);如果指定了domain, 则一般包子域名

    -例如:如果设置domain=502it.com, 则Cookie也包含在子域名中(如bbs.520it.com)

    Path

    -标识置顶了主机下的哪些数据路径可以接受Cookie, 子路径也会被匹配

    -例如:设置path=/docs, 则一下地址都会匹配

    /docs

    /docs/one/

    /docs/one/img

    Session

    getSession内部的原理

    检查客户端是否有发送一个叫做JSSESION的Cookie

    -如果没有

    创建一个新的session对象,并且这个Session对象会有一个id

    这个Session对象会保留在服务器的内存中

    在响应的时候,会添加一个Cookie(JESSIONID=Session对象的id)给客户端

    -如果没有

    返回id为JSSESION的Session对象

    Session的有效期

    -session的有效期默认是30分钟

    -可以在web.xml中配置失效时间(单位是分钟)

    总结

    Cookie

    -数据存储在浏览器客户端

    -数据有大小和数据的限制

    -适合存储一些小型、不敏感的数据

    -默认情况下,关闭浏览器后就会销毁

    Session

    -数据存储在服务器端

    -数据没有大小和数量的限制

    -可以存储大型、敏感的数据(比如用户数据)

    -默认情况下,未使用30分钟后就会销毁

    Cookie、Session会话跟踪技术,请求之间是否是同一个会话。

    17.代理CDN网络安全

    代理服务器(Proxy Server)

    特点

    -本身不生产内容

    -处于中间位置转发上下游的请求和响应

    面向下游的客户端:它是服务器

    面向上游的服务器:它是客户端

    正向代理:代理的对象是客户端

    反向代理:代理的对象是服务器

    正向代理 - 作用

    -隐藏客户端身份

    -绕过防火墙(突破访问限制)
    -internet访问控制

    -数据过滤

    -一些免费的正向代理

    https://ip.jiangxianli.com/

    https://www.kuaidaili.com/free/inha/

    反向代理 - 作用

    -隐藏服务器身份

    -安全防护

    -负载均衡

    抓包工具的原型

    Fiddler、Charles等抓包工具的原理:在客户端启动了正向代理服务

    需要注意

    -wireshark的原理是:通过底层驱动,拦截网卡上流动的数据

    代理服务器 - 相关的头部字段

    Via: 追加经过的每一台代理服务器的主机名(或域名)

    X-Forwarded-For: 追加请求方IP地址

    X-Real-IP: 客户端的真实IP地址

    CDN(Content Delivery Networks 或Content distribution Network),译为:内部分发发网络

    利用最靠近每位用户的服务器

    更快更可靠地将音乐、图片、视频等资源文件(一般是静态资源)传递给用户

    CDM运营商在全国,乃至全球的各大枢纽城市都建立了机房

    -部署了大量拥有高存储高宽带的节点,构建了一个跨运营商、跨地域的专用网络

    内容所有者向CDN运营商支付费用,CDN将其内容交付给最终客户

    网络安全问题

    网络通信中面临的4种安全威胁

    截取:窃听通信内容

    中断:中断网络通信

    篡改:篡改通信内容

    伪造:伪造通信内容

    网络层- ARP欺骗

    ARP欺骗(ARP spoofing)、又称ARP毒化(ARP poisoning)、ARP病毒、ARP攻击

    ARP欺骗可以造成的效果

    -可让攻击者获取局域网上的数据包甚至可以篡改数据包

    -可让网络上特定电脑之间无法正常通行(比如网络执法官这样的软件)

    -让送至特定IP地址的流量被错误送到攻击者所取代的地方

    APR欺骗 - 核心步骤举例

    -假设主机C是攻击者,主机A、B是被攻击者

    C只要收到过A、B发送的ARP请求,就会拥有A、B的IP、MAC地址,就可以进行欺骗活动

    C发送一个ARP响应给B,把响应包里的源IP设置为A的IP地址,源MAC设置为C的MAC地址

    DoS、DDoS

    DoS攻击(拒绝服务器攻击,Denial-of-Servive attack)

    -使目标电脑的网络或系统资源耗尽,使服务端暂时中断或停止,导致其正常用户无法访问

    DDoS攻击(分布式拒绝服务器攻击,Distributed Denial-of-Service attack)

    -黑客使用网络上两个或两个以上被攻陷的电脑作为“僵尸”向特定的目标发动DoS攻击

    -2018年3月,GitHub遭到迄今为止规模最大的DDoS攻击

    DoS攻击可以分为2个大类

    -带宽消耗型:UDP洪水攻击、ICMP洪水攻击

    -资源消耗型:SYN洪书攻击、LAND攻击

    SYN洪水攻击(SYN flooding attack)

    -攻击者发送一系列的SYN请求(第一次握手)到目标,然后让目标😯收不到ACK(第三次握手)而进行等待,消耗资源

    攻击方法

    -跳过发送最后的SCK信息

    -修改源IP地址,让目标送SYN-ACK到伪造的IP地址,因此目标永不可能收到ACK(第三次握手)

    防护

    -参考 RFC_4987

    传输层 - LAND攻击

    LAND攻击(局域网拒绝服务攻击,Local Area Network Denial arrack)

    -通过持续发送相同源地址和目标地址的欺骗数据包,使目标试图与自己建立连接,消耗系统资源直至崩溃

    有些系统存在设计上的缺陷,允许设备接受并响应来自网络,却宣称来自于设备自身的数据包,导致循环应答

    防护

    -大多数防火墙都能拦截类似的攻击包,以保护系统

    -部分操作系统通过发布安全补丁修复了这一漏洞

    -路由器应同时配置上行与下行的筛选器,屏蔽所有源地址与目标地址相同的数据包

    DoS、DDoS防御

    防御方式通常为:入侵检测、流量过滤、和多重验证

    -堵塞网络带宽的流量将被过滤、而正常的流量可正常通过

    防火墙

    -防火墙可以设置规则,例如允许或拒绝特定的通讯协议,端口或IP地址

    -当攻击从少数不正常的IP地址发出时,可以简单的使用拒绝规则阻止一切从攻击源IP发出的通信

    -复杂攻击难以用简单规则来阻止,例如80端口遭受攻击时不可能拒绝端口所有的通信,因为同时会阻止合法的流量

    -防火墙可能处于网络框架中过后的位置,路由器可能在恶意流量达到防火墙前即被攻击影响

    黑洞引导

    -将所有受攻击计算机的通信全部发送至一个“黑洞”(空接口或不存在的计算机地址)或者有足够能力处理洪流的网络设备商,以避免网络收到较大的影响

    流量清洗

    -当流量被送到DDoS防护清洗中心时,通过采用抗DDoS软件处理,将正常流量和恶意流量区分开

    -正常的流量则回注客户网站

    应用层 - DNS劫持

    DNS劫持,又称为域名劫持

    -攻击者篡改了某个域名的解析结果,使得指向该域名的IP变成了另外一个IP

    -导致对相应网址的访问被劫持到另一个不可达的或者假冒的网址

    -从而实现非法窃取用户信息或者破坏正常网络服务的目的

    为防止DNS劫持,可以考虑更靠谱的DNS服务器,比如:114.114.114.114

    -谷歌:8.8.8.8、8.8.4.4

    -微软:4.2.2.1、4.2.2.2

    -百度:180.76.76.76

    -阿里:223.5.5.5、223.6.6.6

    HTTP劫持:对HTTP数据包进行拦截处理,比如插入JS代码

    -比如你的访问某些网站时,在右下角多了一个莫名其妙的弹窗广告

    HTTP协议的安全问题

    HTTP协议默认是采取明文传输的,因此会有很大的安全隐患

    -常用的提高安全性的方法是:对通信内容进行加密后,在进行传输

    18.对称加密非对称加密数字签名_证书

    常见的加密方式有

    -不可逆

    单向单列函数:MD5、SHA等

    -可逆

    对称加密:DES、3DES、AES等

    非对称加密:RSA等

    -其他

    混合密码系统

    数字签名

    数字证书

    iOS底层原理,iOS签名 苹果是如何对app进行签名的(这个课程可以看)

    常见英文

    encrypt:加密

    decrypt:解密

    plaintext:明文

    ciphertext:密文

    如何防止被窃听

    单向散列函数(One-Way hash function)

    单向散列函数,可以根据消息内容计算出散列值

    应用:密码加密

    散列值的长度和消息长度无关,无论消息是1bit、10M、100G, 单向散列函数都会计算出固定长度的散列值 (长度20字节)

    单向散列-特点

    根据任意长度的消息,计算出固定长度的散列值

    计算速度快,能快速计算出散列值

    消息不同,散列值也不同

    具备单向性

    单向散列函数-称呼

    单向散列函数,也被称为

    -消息摘要函数(message digest function)

    -哈希函数(hash finction)

    输出的散列值,也被称为

    -消息摘要(message digest)

    -指纹(fingerprint)

    MD4、MD5

    -产生128bit的散列值,MD就是Message Digest的缩写,目前已经不安全(32个十六进制字符)

    SHA-1

    -产生160bit的散列值,目前已经不安全

    SHA-2

    -SHA-256、SHA-384、SHA-512,散列值长度分别是256bit、384bit、512bit

    SHA-3

    -全新标准

    单向散列函数-几个网址

    MD5加密

    https://www.cmd5.com/hash.aspx

    MD5解密

    https://www.cmd5.com/

    暴力破解,枚举各种数据。但是数据源是无穷无尽的,MD5密文是有限的

    其他加密

    https://www.sojson.com/encrypt_des.html

    https://tool.chinaz.com/tools/md5.aspx

    单向散列函数 - 应用:防止数据被篡改(检测数据是否被篡改)

    镜像站点,为了分散通信负荷而从镜像站点下载软件

    官网站点,对比镜像站点的散列值,为了确认完整性,从原始网址获取到散列

    应用:密码加密

    18.对称加密非对称加密数字签名_证书

    如何加密解密?

    对称加密(Symmetric Cryptography):加密用的密钥 = 解密用的密钥

    常用的:

    AES(Advanced Encryption Standard)

    -取代DES成为新标准的一种对称加密算法,又称为Rijndeal加密法

    -AES的密钥长度有128、192、256bit三种(密钥越长破解难度越大)

    -目前AES,已经逐步取代DES,3DES,成为首选的对称加密算法

    它经过了全世界密码学家所进行的高品质验证工作

    DES(Data Encryption Standard)

    -DES 是一种将64bit 明文加密成64bit密文的加密算法,密钥长度是56bit

    -规格上来说,密钥长度是64bit, 但每隔7bit会设置一个用于错误检查的bit, 因此密钥长度实质上是56bit

    -由于DES每次只能加密64bit的数据,遇到比较大的数据,需要对DES加密进行迭代(反复)

    -目前已经可以在短时间内被破译,所以不建议使用

    3DES(Triple Data Encryption Algorithm)

    3DES, 将DES重复3次所得到的一种密码算法,也叫做3DES

    -三重DES并不是进行3次DES加密(加密->加密->加密)

    -而是加密(Encryption)-> 解密(Decryption)-> 加密(Encryption)的过程

    -目前还被一些银行等机构使用,但处理速度不高,安全性逐渐暴露出问题

    -3个密钥都是不相同的,也叫DED-EDE3

    -如果所有的密钥相同,则结果与普通DES是等价的 (无效用法)

    -如果密钥1,密钥3相同,密钥2不同,称为DES-EDE2

    ——————————————————————————————————————————————————————————

    非对称加密(公钥密码):(Asymmetric Cryptography)

    -在非对称jimmy,密钥分为加密密钥、解密密钥2中,它们并不是同一个密钥

    -加密密钥一般是公开的,因此该密钥称为公钥(Public key)

    因此,非对称加密也被称为公钥密码算法(Public-key Cryptography)

    -解密密钥:有消息接受者自己保管的,不能公开,因此也称为私钥(private key)

    公钥、私钥

    公钥和私钥是一一对应的,不能单独生成

    -一对公钥和私钥统称为密钥对(Key pair)

    由公钥加密的密文,必须使用与该公钥对应的私钥才能解密

    由私钥加密的密文,必须使用与该私钥对应的公钥才能解密

    RSA

    目前使用最广泛的非对称加密算法是RSA

    RSA的名字,由他的3位开发者,即Ron Rivest、 Adi Shamir、Leonard Adleman的姓氏首字母组成

    ——————————————————————————————————————————————————————————

    密钥配送问题

    -在使用对称加密时,一定会遇到密钥配送问题

    -如果Alice将使用对称加密过的信息发给了Bob

    只有将密钥发送给Bob,Bob才能完成解密

    在发送过程中:可能会被窃听,对方也能完成解密

    如何解决密钥配送问题

    有以下几种解决密钥配送的方法

    -事先共享密钥(比如私下共享)

    -密钥分配中心(Key Distribution Center, 简称KDC)

    -Diffie-Hellman密钥交换

    解决密钥配送问题

    由消息的接收者,生成一对公钥、私钥

    将公钥发给消息的发送者

    消息的发送者使用公钥加密消息

    非对称加密的加密解密速度比较对称加密要慢

    -非对称加密:复杂->安全->加密解密速度慢

    -对称加密:简单->不安全->加密解密速度快

    混合密码系统(Hybird Cryptosystem)

    对称加密的缺点

    -不能很好的解决密钥配送问题(密钥会被窃听)

    非对称加密的缺点

    -加密解密速度比较慢

    混合密钥系统:是将对称加密和非对称加密的优势相结合的方法

    -解决了非对称加密速度慢的问题

    -并通过非对称加密解决了对称加密的密钥配送问题

    网络上密码通信所用的SSL/TLS都运用了混合密码系统

    混合密码

    会话密钥(Session key)

    -为本次通信随机生成的临时密钥(例如随机数)

    -作为对称加密的密钥,用于加密消息,提高速度

    加密步骤(发送消息)

    1.首先,消息发送者要拥有消息接受接收的公钥

    2.生成会话密钥(随机数),作为对称加密的密钥,加密消息(生成密文A)

    3.用消息接收者的公钥,加密会话密钥(2的随机数)(生成密文B)

    4.将前两步生成的加密结果,AB一并发送给消息接收者

    发送出去的内容包括

    -用会话密钥加密的消息(加密方法:对称加密)

    -用公钥加密的会话密钥(加密方法:非对称加密)

    A —> B 的msg, 一定用对称加密,因为msg大小不确定

    混合密码 — 解密

    解密步骤(收到消息)

    1.消息接收者用自己的密钥解密(密文B)出会话密钥

    2.再用第一步解密出来的会话密钥,解密消息

    数字签名

    服务器如何确认消息的真实性?

    在数字签名技术中,有一下2种行为

    -生成签名:由消息的发送者完成,通过“签名密钥”生成

    -验证签名:由消息的接受者完成,通过“验证密钥”验证

    过程改进

    1.消息进行MD5,拿到固定长度

    2.利用私钥对散列值进行签名

    Q:如何能保证这个签名是消息发送者之间签的?

    A:用消息发送者的私钥进行签名

    Q: 如果有人篡改了消息内容或签名内容,会是什么结果?

    A:签名验证失败,证明内容被篡改了

    Q:数字签名不能保证机密性?

    A:数字签名的作用不是为了保证机密性,仅仅是为了能够识别内容有没有被篡改

    数字签名的作用:

    1.确认消息的完整性

    2.识别消息是否被篡改

    3.防止消息发送人否认

    非对称加密 - 公钥、私钥再总结

    在非对称加密中,任何人都可以使用公钥进行加密

    在数字签名中,任何人都可以用公钥验证签名

    数字签名,就是将非对称加密反过来使用

    既然是加密,那肯定是不希望别人知道我的消息,所以只有我能解密。

    -公钥负责加密,私钥负责解密

    既然是签名,那肯定是不希望有人冒充我发送消息,所以只有我能签名

    -私钥负责签名,公钥负责验签

    公钥的合法性

    如果遭遇了中间人攻击,那么

    -公钥有可能是伪造的

    如何验证公钥的合法性

    -证书

    是消息发送者能拿到真正的公钥,利用权威机构认证过的公钥。

    认证权威机构,再拿公钥

    证书(Certificate)

    说到证书

    -首先联想到的是驾驶证、毕业证、英语四六级等等,都是由权威机构认证的

    密码学中的证书,全城是公钥证书(Public-key Certificate, PKC),跟驾驶证类似

    -里面有姓名、邮箱等个人信息,以及此人的公钥

    -并由认证机构(Certificate Authority, CA),施加数字签名

    CA就是能够认定“公钥属于此人”,并能够生成数字签名的个人或组织

    -有国际性组织、政府设立的组织

    -有通过提供认证服务来盈利的企业

    -个人也可以成立认证机构

    相关文章

      网友评论

          本文标题:HTTP网络协议(学习笔记五)

          本文链接:https://www.haomeiwen.com/subject/jjicgltx.html