来自“ Bobby Tables” XKCD漫画的SQL注入如何工作?
技术问答
478 人阅读
|
0 人回复
|
2023-09-14
|
此SQL的作用是:
T* ?& S$ }6 F( M" w1 SRobert’); DROP TABLE STUDENTS; –
* D6 F) Y$ O0 R! M, j( v. s我知道这两个’和–是征求意见,但不字DROP得到的评论,以及因为它是在同一行的一部分吗?2 T' y+ n* E. `- K0 h8 P
) C6 Y/ T }# h: V) q/ V
解决方案:: n/ |; v0 n) e
( `8 F. b# c' o/ f. r3 B' a5 Z
' A# U- a- P* [: y
/ S7 k4 _& o, `$ \
学校程序中的原始代码可能看起来像
4 l" K& L9 I! P* `$ }+ Iq = "INSERT INTO Students VALUES ('" + FNMName.Text + "', '" + LName.Text + "')";- g! x; a, t, n2 Z& l9 Q8 Q
7 b$ U B% n, J4 r2 Q$ z如您所见,这是将文本输入添加到查询中的简单方法,并且非常糟糕。$ x$ x* N4 e( O& B+ Q
在将名字,中间名称文本框FNMName.Text(即Robert'); DROP TABLE STUDENTS; –)和姓氏文本框LName.Text(即称为Derper)的值与查询的其余部分连接在一起之后,结果实际上是两个查询,中间用语句终止符(分号)。第二个查询已注入到第一个查询中。当代码对数据库执行此查询时,它将看起来像这样! G% Z; E& B& n' _
INSERT INTO Students VALUES ('Robert'); DROP TABLE Students; --', 'Derper')
* d' ^) n8 u. p/ G/ x1 H& L* K6 H
& E/ u6 s/ @7 }用简单的英语粗略地翻译成两个查询:
q2 f& k$ Y9 w3 m) J向“学生”表中添加一个名称为“ Robert”的新记录) D& ]8 k0 _+ G' [: p
和4 M& t4 G! g8 |( W( q F
删除学生表
7 V# f- p; i- j1 T( ~1 t) g第二个查询之后的所有内容都标记为注释: –‘, ‘Derper’)4 G+ P2 l# Z% V; |3 m' S
将’在学生的名字是不是一个评论,它的关闭字符串分隔符。由于学生的名字是一个字符串,因此在语法上需要它来完成假设的查询。注入式攻击仅在其将有效查询SQL注入结果的SQL查询时起作用。 |
|
|
|
|
|