回答

收藏

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

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

此SQL的作用是:
* A2 v4 v' C, Y, p  eRobert’); DROP TABLE STUDENTS; –5 p" n3 ^3 m+ t: J  n8 [1 D5 ]# E
我知道这两个’和–是征求意见,但不字DROP得到的评论,以及因为它是在同一行的一部分吗?
! b' E4 B& M3 V* g               
( u' A: j8 ^7 G' g# ]- X解决方案:% ~$ F( Q2 V; E2 r1 S2 t
               
" h' V8 K8 u- a; z) w& }+ z- G, \3 E+ o- R; R0 m! f
. A) u/ D9 z+ M8 Q% z3 I
                学校程序中的原始代码可能看起来像5 O* i. g: T9 z# g# Q7 x
q = "INSERT INTO Students VALUES ('" + FNMName.Text + "', '" + LName.Text + "')";) C/ N% Y$ _# N, c# [+ b/ j
  `0 T! y* t$ m8 E- ^* G% j% b
如您所见,这是将文本输入添加到查询中的简单方法,并且非常糟糕。0 v8 z: L+ _1 [: S5 G6 s
在将名字,中间名称文本框FNMName.Text(即Robert'); DROP TABLE STUDENTS; –)和姓氏文本框LName.Text(即称为Derper)的值与查询的其余部分连接在一起之后,结果实际上是两个查询,中间用语句终止符(分号)。第二个查询已注入到第一个查询中。当代码对数据库执行此查询时,它将看起来像这样& G1 f$ Y5 U5 v  e( S3 ?
INSERT INTO Students VALUES ('Robert'); DROP TABLE Students; --', 'Derper')
. t% H. g4 ~4 t) V1 `3 ?% Q3 K/ g1 V  ]) |. f  H  E5 v$ ^/ `
用简单的英语粗略地翻译成两个查询:* ~' ]7 Q5 r5 u, D/ q
向“学生”表中添加一个名称为“ Robert”的新记录4 V4 \$ ~( O0 n& X  m" y3 L

! U9 F3 G, h8 D# K删除学生表
  x8 f- r8 R0 O' s6 `第二个查询之后的所有内容都标记为注释: –‘, ‘Derper’)
* T( ^3 \- l$ ?, ]& k6 i将’在学生的名字是不是一个评论,它的关闭字符串分隔符。由于学生的名字是一个字符串,因此在语法上需要它来完成假设的查询。注入式攻击仅在其将有效查询SQL注入结果的SQL查询时起作用。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则