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
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://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解密
暴力破解,枚举各种数据。但是数据源是无穷无尽的,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就是能够认定“公钥属于此人”,并能够生成数字签名的个人或组织
-有国际性组织、政府设立的组织
-有通过提供认证服务来盈利的企业
-个人也可以成立认证机构