回答

收藏

来自“ Bobby Tables” XKCD漫画的SQL注入如何工作?

技术问答 技术问答 347 人阅读 | 0 人回复 | 2023-09-14

此SQL的作用是:3 R. |6 E$ z. L9 @6 f2 }: {
Robert’); DROP TABLE STUDENTS; –
" P" y7 V# w( O8 p' h9 R我知道这两个’和–是征求意见,但不字DROP得到的评论,以及因为它是在同一行的一部分吗?
3 ~/ K0 {  @7 w/ o# q+ |* B/ W                * K; ~9 P: g7 a
解决方案:: [, r8 \4 b2 R' q& z" G; ~0 h! a
                ; p' T4 O, `/ ]- ?- n; l% H
" M1 v4 s) y2 L! x- [( A' J2 E( A
0 ?. z# V# h# o/ i. \$ g
                学校程序中的原始代码可能看起来像
) N$ b7 `# T# S2 c1 Cq = "INSERT INTO Students VALUES ('" + FNMName.Text + "', '" + LName.Text + "')";0 b0 G+ v9 Q7 }* D
! }" \+ x1 Z! C7 \8 |% b( L
如您所见,这是将文本输入添加到查询中的简单方法,并且非常糟糕。/ x% C" l) _" q) S, I; K: L( ~
在将名字,中间名称文本框FNMName.Text(即Robert'); DROP TABLE STUDENTS; –)和姓氏文本框LName.Text(即称为Derper)的值与查询的其余部分连接在一起之后,结果实际上是两个查询,中间用语句终止符(分号)。第二个查询已注入到第一个查询中。当代码对数据库执行此查询时,它将看起来像这样9 z! p* J% R/ R2 [  T
INSERT INTO Students VALUES ('Robert'); DROP TABLE Students; --', 'Derper')
1 r/ d/ A2 Z2 y( T6 l* K9 K4 F; ^' g) W# R
用简单的英语粗略地翻译成两个查询:- E" ]  h& ~% l& ]: G; v$ O
向“学生”表中添加一个名称为“ Robert”的新记录
/ |) t: N- `+ L) F$ Q( @) |$ b
2 d+ }4 T" w/ F删除学生表/ ^. {$ y) B; n/ k9 q: q. @7 {; X
第二个查询之后的所有内容都标记为注释: –‘, ‘Derper’)9 ]$ ?' o3 ^, t# d
将’在学生的名字是不是一个评论,它的关闭字符串分隔符。由于学生的名字是一个字符串,因此在语法上需要它来完成假设的查询。注入式攻击仅在其将有效查询SQL注入结果的SQL查询时起作用。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则