此SQL的作用是:
Robert’); DROP TABLE STUDENTS; – 我知道这两个’和–是征求意见,但不字DROP得到的评论,以及因为它是在同一行的一部分吗?
学校程序中的原始代码可能看起来像
q = "INSERT INTO Students VALUES ('" + FNMName.Text + "', '" + LName.Text + "')";
如您所见,这是将文本输入添加到查询中的简单方法,并且非常糟糕。
在将名字,中间名称文本框FNMName.Text(即Robert'); DROP TABLE STUDENTS; –)和姓氏文本框LName.Text(即称为Derper)的值与查询的其余部分连接在一起之后,结果实际上是两个查询,中间用语句终止符(分号)。第二个查询已注入到第一个查询中。当代码对数据库执行此查询时,它将看起来像这样
FNMName.Text(即Robert'); DROP TABLE STUDENTS
LName.Text
INSERT INTO Students VALUES ('Robert'); DROP TABLE Students; --', 'Derper')
用简单的英语粗略地翻译成两个查询:
向“学生”表中添加一个名称为“ Robert”的新记录
和
删除学生表
第二个查询之后的所有内容都标记为注释: –‘, ‘Derper’)
将’在学生的名字是不是一个评论,它的关闭字符串分隔符。由于学生的名字是一个字符串,因此在语法上需要它来完成假设的查询。注入式攻击仅在其将有效查询SQL注入结果的SQL查询时起作用。