Skip to content

Commit 2bae8c3

Browse files
committed
ops/security: Fix SQLi example
1 parent 3bc6725 commit 2bae8c3

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

docs/ops/security.md

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,23 @@ icon: material/security
7676
SELECT * FROM users WHERE username = '$username' AND password = '$password';
7777
```
7878

79-
如果应用程序选择直接通过拼接字符串的方式构造这个查询,并且用户输入的 `username``admin``password``123' OR '1'='1`,那么查询就会变成
79+
如果应用程序选择直接通过拼接字符串的方式构造这个查询,那么
8080

81-
```sql
82-
SELECT * FROM users WHERE username = 'admin' AND password = '123' OR '1'='1';
83-
```
81+
1. 如果用户输入的 `username``admin``password``123' OR '1'='1`,那么查询就会变成:
82+
83+
```sql
84+
SELECT * FROM users WHERE username = 'admin' AND password = '123' OR '1'='1';
85+
```
86+
87+
这个查询中,`WHERE` 条件始终为真,因此攻击者就可以以返回中首个用户(不少时候是管理员用户)的身份登录系统。
88+
89+
2. 如果用户输入的 `username``admin'; --``password` 是任意内容(例如 `xyz`),那么查询就会变成:
90+
91+
```sql
92+
SELECT * FROM users WHERE username = 'admin'; -- ' AND password = 'xyz';
93+
```
8494

85-
可以发现,这个查询就不再起到检查密码的作用,恶意用户此时就可以以 `admin` 的身份登录系统。
95+
此时可以发现,这个查询只会筛选出用户名为 `admin` 的用户,而后面的密码检查部分被注释掉了(`--` 代表 SQL 注释),因此攻击者也可以以 `admin` 的身份登录系统。
8696

8797
相似的问题还有 **XSS(跨站脚本攻击)**:如果应用程序直接将用户输入的内容插入到 HTML 中,那么攻击者可以构造恶意的 HTML 代码,例如:
8898

0 commit comments

Comments
 (0)