Merge 36f60342b833c4a50b5b95f74458ed82878d01eb into af577a42e0e5686dc9393fc9f97d95703e966de1
This commit is contained in:
commit
af4dd62b73
139
notes/HTTP.md
139
notes/HTTP.md
@ -1,58 +1,87 @@
|
||||
<!-- GFM-TOC -->
|
||||
* [一 、基础概念](#一-基础概念)
|
||||
* [URI](#uri)
|
||||
* [请求和响应报文](#请求和响应报文)
|
||||
* [二、HTTP 方法](#二http-方法)
|
||||
* [GET](#get)
|
||||
* [HEAD](#head)
|
||||
* [POST](#post)
|
||||
* [PUT](#put)
|
||||
* [PATCH](#patch)
|
||||
* [DELETE](#delete)
|
||||
* [OPTIONS](#options)
|
||||
* [CONNECT](#connect)
|
||||
* [TRACE](#trace)
|
||||
* [三、HTTP 状态码](#三http-状态码)
|
||||
* [1XX 信息](#1xx-信息)
|
||||
* [2XX 成功](#2xx-成功)
|
||||
* [3XX 重定向](#3xx-重定向)
|
||||
* [4XX 客户端错误](#4xx-客户端错误)
|
||||
* [5XX 服务器错误](#5xx-服务器错误)
|
||||
* [四、HTTP 首部](#四http-首部)
|
||||
* [通用首部字段](#通用首部字段)
|
||||
* [请求首部字段](#请求首部字段)
|
||||
* [响应首部字段](#响应首部字段)
|
||||
* [实体首部字段](#实体首部字段)
|
||||
* [五、具体应用](#五具体应用)
|
||||
* [连接管理](#连接管理)
|
||||
* [Cookie](#cookie)
|
||||
* [缓存](#缓存)
|
||||
* [内容协商](#内容协商)
|
||||
* [内容编码](#内容编码)
|
||||
* [范围请求](#范围请求)
|
||||
* [分块传输编码](#分块传输编码)
|
||||
* [多部分对象集合](#多部分对象集合)
|
||||
* [虚拟主机](#虚拟主机)
|
||||
* [通信数据转发](#通信数据转发)
|
||||
* [六、HTTPS](#六https)
|
||||
* [加密](#加密)
|
||||
* [认证](#认证)
|
||||
* [完整性保护](#完整性保护)
|
||||
* [HTTPS 的缺点](#https-的缺点)
|
||||
* [七、HTTP/2.0](#七http20)
|
||||
* [HTTP/1.x 缺陷](#http1x-缺陷)
|
||||
* [二进制分帧层](#二进制分帧层)
|
||||
* [服务端推送](#服务端推送)
|
||||
* [首部压缩](#首部压缩)
|
||||
* [八、HTTP/1.1 新特性](#八http11-新特性)
|
||||
* [九、GET 和 POST 比较](#九get-和-post-比较)
|
||||
* [作用](#作用)
|
||||
* [参数](#参数)
|
||||
* [安全](#安全)
|
||||
* [幂等性](#幂等性)
|
||||
* [可缓存](#可缓存)
|
||||
* [XMLHttpRequest](#xmlhttprequest)
|
||||
* [参考资料](#参考资料)
|
||||
- [一 、基础概念](#一-基础概念)
|
||||
- [URI](#uri)
|
||||
- [请求和响应报文](#请求和响应报文)
|
||||
- [1. 请求报文](#1-请求报文)
|
||||
- [2. 响应报文](#2-响应报文)
|
||||
- [二、HTTP 方法](#二http-方法)
|
||||
- [GET](#get)
|
||||
- [HEAD](#head)
|
||||
- [POST](#post)
|
||||
- [PUT](#put)
|
||||
- [PATCH](#patch)
|
||||
- [DELETE](#delete)
|
||||
- [OPTIONS](#options)
|
||||
- [CONNECT](#connect)
|
||||
- [TRACE](#trace)
|
||||
- [三、HTTP 状态码](#三http-状态码)
|
||||
- [1XX 信息](#1xx-信息)
|
||||
- [2XX 成功](#2xx-成功)
|
||||
- [3XX 重定向](#3xx-重定向)
|
||||
- [4XX 客户端错误](#4xx-客户端错误)
|
||||
- [5XX 服务器错误](#5xx-服务器错误)
|
||||
- [四、HTTP 首部](#四http-首部)
|
||||
- [通用首部字段](#通用首部字段)
|
||||
- [请求首部字段](#请求首部字段)
|
||||
- [响应首部字段](#响应首部字段)
|
||||
- [实体首部字段](#实体首部字段)
|
||||
- [五、具体应用](#五具体应用)
|
||||
- [连接管理](#连接管理)
|
||||
- [1. 短连接与长连接](#1-短连接与长连接)
|
||||
- [2. 流水线](#2-流水线)
|
||||
- [Cookie](#cookie)
|
||||
- [1. 用途](#1-用途)
|
||||
- [2. 创建过程](#2-创建过程)
|
||||
- [3. 分类](#3-分类)
|
||||
- [4. 作用域](#4-作用域)
|
||||
- [5. JavaScript](#5-javascript)
|
||||
- [6. HttpOnly](#6-httponly)
|
||||
- [7. Secure](#7-secure)
|
||||
- [8. Session](#8-session)
|
||||
- [9. 浏览器禁用 Cookie](#9-浏览器禁用-cookie)
|
||||
- [10. Cookie 与 Session 选择](#10-cookie-与-session-选择)
|
||||
- [缓存](#缓存)
|
||||
- [1. 优点](#1-优点)
|
||||
- [2. 实现方法](#2-实现方法)
|
||||
- [3. Cache-Control](#3-cache-control)
|
||||
- [4. 缓存验证](#4-缓存验证)
|
||||
- [内容协商](#内容协商)
|
||||
- [1. 类型](#1-类型)
|
||||
- [2. Vary](#2-vary)
|
||||
- [内容编码](#内容编码)
|
||||
- [范围请求](#范围请求)
|
||||
- [1. Range](#1-range)
|
||||
- [2. Accept-Ranges](#2-accept-ranges)
|
||||
- [3. 响应状态码](#3-响应状态码)
|
||||
- [分块传输编码](#分块传输编码)
|
||||
- [多部分对象集合](#多部分对象集合)
|
||||
- [虚拟主机](#虚拟主机)
|
||||
- [通信数据转发](#通信数据转发)
|
||||
- [1. 代理](#1-代理)
|
||||
- [2. 网关](#2-网关)
|
||||
- [3. 隧道](#3-隧道)
|
||||
- [六、HTTPS](#六https)
|
||||
- [加密](#加密)
|
||||
- [1. 对称密钥加密](#1-对称密钥加密)
|
||||
- [2.非对称密钥加密](#2非对称密钥加密)
|
||||
- [3. HTTPS 采用的加密方式](#3-https-采用的加密方式)
|
||||
- [认证](#认证)
|
||||
- [完整性保护](#完整性保护)
|
||||
- [HTTPS 的缺点](#https-的缺点)
|
||||
- [七、HTTP/2.0](#七http20)
|
||||
- [HTTP/1.x 缺陷](#http1x-缺陷)
|
||||
- [二进制分帧层](#二进制分帧层)
|
||||
- [服务端推送](#服务端推送)
|
||||
- [首部压缩](#首部压缩)
|
||||
- [八、HTTP/1.1 新特性](#八http11-新特性)
|
||||
- [九、GET 和 POST 比较](#九get-和-post-比较)
|
||||
- [作用](#作用)
|
||||
- [参数](#参数)
|
||||
- [安全](#安全)
|
||||
- [幂等性](#幂等性)
|
||||
- [可缓存](#可缓存)
|
||||
- [XMLHttpRequest](#xmlhttprequest)
|
||||
- [参考资料](#参考资料)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
@ -223,6 +252,8 @@ CONNECT www.example.com:443 HTTP/1.1
|
||||
|
||||
- **500 Internal Server Error** :服务器正在执行请求时发生错误。
|
||||
|
||||
- **502 Bad Gateway** : 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
|
||||
|
||||
- **503 Service Unavailable** :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
|
||||
|
||||
# 四、HTTP 首部
|
||||
|
@ -29,6 +29,44 @@
|
||||
|
||||
另一个用户浏览了含有这个内容的页面将会跳转到 domain.com 并携带了当前作用域的 Cookie。如果这个论坛网站通过 Cookie 管理用户登录状态,那么攻击者就可以通过这个 Cookie 登录被攻击者的账号了。
|
||||
|
||||
## 分类
|
||||
|
||||
XSS可分为三种不同的类型:反射型XSS、存储型XSS和DOM型XSS。
|
||||
|
||||
### 反射型XSS
|
||||
|
||||
反射型XSS主要是攻击者将精心构造的带有恶意代码的URL发送给受害者。受害者打开该连接后,经过浏览器的渲染从而遭受攻击。
|
||||
|
||||
### 存储型XSS
|
||||
|
||||
存储型XSS多出现于带有表单功能的页面,如留言板。攻击者提交带有恶意代码的数据,后端程序未经处理直接插入数据库。受害者用户在浏览该页面时,后端程序从数据库查询数据,未经处理直接传输给浏览器进行渲染,导致受害者遭受攻击。
|
||||
|
||||
### DOM型XSS
|
||||
|
||||
DOM型的XSS主要是特指攻击者插入的恶意代码修改了DOM环境,而造成服务器响应的代码没有按照原有的逻辑执行。DOM型的XSS没有对服务器响应的代码进行修改,而是在客户端侧影响DOM环境而产生的攻击行为。具体的例子如下:
|
||||
|
||||
```html
|
||||
<select><script>
|
||||
|
||||
document.write("<OPTION value=1>"+document.location.href.substring(document.location.href.indexOf("default=")+8)+"</OPTION>");
|
||||
|
||||
document.write("<OPTION value=2>English</OPTION>");
|
||||
|
||||
</script></select>
|
||||
```
|
||||
|
||||
正常情况下的URL如下:
|
||||
|
||||
```
|
||||
http://www.some.site/page.html?default=French
|
||||
```
|
||||
|
||||
而DOM型的XSS攻击构造的URL则是:
|
||||
|
||||
```
|
||||
http://www.some.site/page.html?default=<script>alert(document.cookie)</script>
|
||||
```
|
||||
|
||||
## 危害
|
||||
|
||||
- 窃取用户的 Cookie
|
||||
@ -83,6 +121,14 @@ alert(/xss/);
|
||||
</script>
|
||||
```
|
||||
|
||||
### 3. 设置CSP(Content-Security-Policy)
|
||||
|
||||
CSP 本质上就是建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行。我们只需要配置规则,如何拦截是由浏览器自己实现的。我们可以通过这种方式来尽量减少 XSS 攻击。
|
||||
通常可以通过两种方式来开启 CSP:
|
||||
|
||||
- 设置 HTTP Header 中的 Content-Security-Policy
|
||||
- 设置 meta 标签的方式
|
||||
|
||||
> [XSS 过滤在线测试](http://jsxss.com/zh/try.html)
|
||||
|
||||
# 二、跨站请求伪造
|
||||
@ -185,14 +231,42 @@ ResultSet rs = stmt.executeQuery();
|
||||
|
||||
分布式拒绝服务攻击(distributed denial-of-service attack,DDoS),指攻击者使用两个或以上被攻陷的电脑作为“僵尸”向特定的目标发动“拒绝服务”式攻击。
|
||||
|
||||
## 分类
|
||||
拒绝服务攻击大致可以分为两种:
|
||||
|
||||
- 直接向目标发送大量报文,造成目标资源耗尽。
|
||||
- 伪造请求报文的源IP地址(受害者IP),借助中间服务器,将响应报文反射到受害目标,这类称为**反射放大攻击**。
|
||||
|
||||
## 防范手段
|
||||
|
||||
其实目前DDoS攻击仍然是让安全研究人员最头疼的一种攻击方式。随着DDoS攻击的产业化,只需向攻击服务提供者支付一定的费用,攻击者即可发起大流量的DDoS攻击。而一次大流量的DDoS攻击对于任何组织来说,都是一次沉重的打击。
|
||||
|
||||
现在,针对DDoS攻击的不存在绝对有效的防御方法,以下的防御措施仅供参考。
|
||||
|
||||
### 1. 负载均衡
|
||||
|
||||
负载均衡技术可以有效的缓解单节点负载过大的问题。可以借助负载均衡技术将请求报文分摊到多个服务器上进行处理。假如一台服务器能够轻松处理10Gbps的流量,10台服务器能够处理流量将大幅提升。
|
||||
|
||||
### 2. 扩大带宽和使用硬件防火墙
|
||||
|
||||
针对于大企业来说,处理大规模的流量问题并不是很大。但是DDoS攻击会占用企业的带宽,从而影响用户的正常使用。因此,面对突如其来的DDoS攻击,提升带宽不失为一种紧急应对措施。可是,砸钱提升带宽只能缓一时之急。
|
||||
|
||||
一些硬件防火墙具有检测小流量的DoS攻击和其他网络攻击的能力,可以有效的防御一部分攻击。
|
||||
|
||||
### 3. 流量牵引
|
||||
|
||||
在企业流量入口处,做流量镜像。借助机器学习模型和异常检测算法对入网流量进行实时分析。在检测到发生DoS攻击时,借助路由协议(RIP、OSPF和BGP)将流量牵引到DoS流量清洗平台,允许清洗后的流量入网。
|
||||
|
||||
# 参考资料
|
||||
|
||||
- [维基百科:跨站脚本](https://zh.wikipedia.org/wiki/%E8%B7%A8%E7%B6%B2%E7%AB%99%E6%8C%87%E4%BB%A4%E7%A2%BC)
|
||||
- [维基百科:SQL 注入攻击](https://zh.wikipedia.org/wiki/SQL%E8%B3%87%E6%96%99%E9%9A%B1%E7%A2%BC%E6%94%BB%E6%93%8A)
|
||||
- [维基百科:跨站点请求伪造](https://zh.wikipedia.org/wiki/%E8%B7%A8%E7%AB%99%E8%AF%B7%E6%B1%82%E4%BC%AA%E9%80%A0)
|
||||
- [维基百科:拒绝服务攻击](https://zh.wikipedia.org/wiki/%E9%98%BB%E6%96%B7%E6%9C%8D%E5%8B%99%E6%94%BB%E6%93%8A)
|
||||
|
||||
|
||||
- [DOM Based XSS](https://owasp.org/www-community/attacks/DOM_Based_XSS)
|
||||
- [常见六大Web安全攻防解析](https://juejin.im/post/5c446eb1e51d45517624f7db#heading-1)
|
||||
- [反射型 DDoS 攻击的原理和防范措施](https://blog.csdn.net/whatday/article/details/89453777)
|
||||
- [浅谈DDoS攻防对抗中的AI实践](https://security.tencent.com/index.php/blog/msg/144)
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user