Update 攻击技术.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
CyC2018
2026-10-23 03:23:08 +08:00
co-authored by Claude Fable 5
parent e478ecfae4
commit 9b93c24c01
+43 -10
View File
@@ -15,6 +15,12 @@
跨站脚本攻击(Cross-Site Scripting, XSS),可以将代码注入到用户浏览的网页上,这种代码包括 HTML 和 JavaScript。
主要有三种类型:
- 存储型:恶意代码保存在服务器上,例如论坛帖子,所有浏览该页面的用户都会受到攻击;
- 反射型:恶意代码放在 URL 参数中,服务器直接把它输出到页面上,需要诱导用户点击该 URL;
- DOM 型:前端 JavaScript 直接把不可信的数据写入 DOM,服务器没有参与。
### 攻击原理
例如有一个论坛网站,攻击者可以在上面发布以下内容:
@@ -36,6 +42,7 @@
- 窃取用户的 Cookie
- 伪造虚假的输入表单骗取个人信息
- 显示伪造的文章或者图片
- 以用户的身份向网站发起请求
### 防范手段
@@ -43,9 +50,9 @@
设置了 HttpOnly 的 Cookie 可以防止 JavaScript 脚本调用,就无法通过 document.cookie 获取用户 Cookie 信息。
#### 2. 过滤特殊字符
#### 2. 转义特殊字符
例如将 `<` 转义为 `&lt;`,将 `>` 转义为 `&gt;`,从而避免 HTML 和 Jascript 代码的运行。
在把用户输入的数据输出到页面时进行转义,例如将 `<` 转义为 `&lt;`,将 `>` 转义为 `&gt;`,从而避免 HTML 和 JavaScript 代码的运行。输出到 HTML 标签、属性、JavaScript 代码和 URL 中需要使用不同的转义规则。
富文本编辑器允许用户输入 HTML 代码,就不能简单地将 `<` 等字符进行过滤了,极大地提高了 XSS 攻击的可能性。
@@ -87,6 +94,10 @@ alert(/xss/);
> [XSS 过滤在线测试](http://jsxss.com/zh/try.html)
#### 3. 内容安全策略
通过 Content-Security-Policy 首部告诉浏览器只允许执行来自指定来源的脚本,禁止内联脚本,即使攻击者注入了代码也不会被执行。
## 二、跨站请求伪造
### 概念
@@ -100,18 +111,18 @@ XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用
假如一家银行用以执行转账操作的 URL 地址如下:
```
http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName。
http://www.examplebank.com/withdraw?account=AccountName&amount=1000&for=PayeeName
```
那么,一个恶意攻击者可以在另一个网站上放置如下代码:
```
<img src="http://www.examplebank.com/withdraw?account=Alice&amount=1000&for=Badman">。
<img src="http://www.examplebank.com/withdraw?account=Alice&amount=1000&for=Badman">
```
如果有账户名为 Alice 的用户访问了恶意站点,而她之前刚访问过银行不久,登录信息尚未过期,那么她就会损失 1000 美元。
如果有账户名为 Alice 的用户访问了恶意站点,而之前刚访问过银行不久,登录信息尚未过期,那么就会损失 1000 美元。
这种恶意的网址可以有很多种形式,藏身于网页中的许多地方。此外,攻击者也不需要控制放置恶意网址的网站。例如他可以将这种地址藏在论坛,博客等任何用户生成内容的网站中。这意味着如果服务器端没有合适的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险。
这种恶意的网址可以有很多种形式,藏身于网页中的许多地方。此外,攻击者也不需要控制放置恶意网址的网站。例如他可以将这种地址藏在论坛,博客等任何用户生成内容的网站中。这意味着如果服务器端没有合适的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险。改为 POST 请求也不能解决问题,攻击者可以使用自动提交的表单。
通过例子能够看出,攻击者并不能通过 CSRF 攻击来直接获取用户的账户控制权,也不能直接窃取用户的任何信息。他们能做到的,是欺骗用户浏览器,让其以用户的名义执行操作。
@@ -125,9 +136,13 @@ Referer 首部字段位于 HTTP 报文中,用于标识请求来源的地址。
#### 2. 添加校验 Token
在访问敏感数据请求时,要求用户浏览器提供不保存在 Cookie 中,并且攻击者无法伪造的数据作为校验。例如服务器生成随机数并附加在表单中,并要求客户端传回这个随机数。
在访问敏感数据请求时,要求用户浏览器提供不保存在 Cookie 中,并且攻击者无法伪造的数据作为校验。例如服务器生成随机数并附加在表单中,并要求客户端传回这个随机数。攻击者的网站受同源策略限制,无法读取到这个随机数。
#### 3. 输入验证码
#### 3. 设置 Cookie 的 SameSite 属性
SameSite=Strict 表示跨站请求不携带 Cookie,Lax 则只允许顶级导航的 GET 请求携带。Chrome 等浏览器的默认值已经是 Lax,上面例子中图片发出的请求不会带上 Cookie。
#### 4. 输入验证码
因为 CSRF 攻击是在用户无意识的情况下发生的,所以要求用户输入验证码可以让用户知道自己正在做的操作。
@@ -168,7 +183,7 @@ strSQL = "SELECT * FROM users;"
#### 1. 使用参数化查询
Java 中的 PreparedStatement 是预先编译的 SQL 语句,可以传入适当参数并且多次执行。由于没有拼接的过程,因此可以防止 SQL 注入的发生。
Java 中的 PreparedStatement 是预先编译的 SQL 语句,可以传入适当参数并且多次执行。SQL 语句的结构在预编译时已经确定,传入的参数只会被当作数据,因此可以防止 SQL 注入的发生。
```java
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM users WHERE userid=? AND password=?");
@@ -179,7 +194,11 @@ ResultSet rs = stmt.executeQuery();
#### 2. 单引号转换
将传入的参数中的单引号转换为连续两个单引号,PHP 中的 Magic quote 可以完成这个功能。
将传入的参数中的单引号转换为连续两个单引号。PHP 的 Magic Quotes 曾经自动完成这个功能,但是因为不可靠已经被移除,应该使用数据库驱动提供的转义函数,并且只在无法使用参数化查询时使用。
#### 3. 最小权限
应用连接数据库的账号只授予必要的权限,即使发生注入也无法执行删库等危险操作。
## 四、拒绝服务攻击
@@ -187,9 +206,23 @@ ResultSet rs = stmt.executeQuery();
分布式拒绝服务攻击(distributed denial-of-service attack,DDoS),指攻击者使用两个或以上被攻陷的电脑作为“僵尸”向特定的目标发动“拒绝服务”式攻击。
常见类型:
- 流量型:用海量数据包耗尽目标的带宽,例如 UDP Flood,以及利用 DNS、NTP 等服务的反射放大攻击;
- 协议型:耗尽服务器的连接资源,例如 SYN Flood 只发送 SYN 报文而不完成三次握手,使服务器维持大量半连接;
- 应用层:发送大量消耗服务器资源的正常请求,例如 HTTP Flood(CC 攻击)。
防范手段:
- 使用 CDN、高防 IP 等服务对流量进行清洗;
- 使用 SYN Cookie 应对 SYN Flood,服务器在握手完成之前不为连接分配资源;
- 在应用层进行限流,并通过验证码区分正常用户和攻击程序。
## 参考资料
- [维基百科:跨站脚本](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)
- [OWASP Cross Site Scripting Prevention Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html)
- [OWASP Cross-Site Request Forgery Prevention Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html)