一尘不染

"Bobby Tables" XKCD 漫画中的 SQL 注入是如何工作的?

sql

只是看着:

XKCD 条 (来源:https ://xkcd.com/327/ )

这个 SQL 做了什么:

Robert'); DROP TABLE STUDENTS; --

我都知道'并且是为了发表评论,但由于它是同一行的一部分,所以--这个词也没有得到评论吗?DROP


阅读 76

收藏
2022-09-03

共1个答案

一尘不染

它掉落了学生表。

学校程序中的原始代码可能看起来像

q = "INSERT INTO Students VALUES ('" + FNMName.Text + "', '" + LName.Text + "')";

这是将文本输入添加到查询中的幼稚方法,并且非常糟糕,正如您将看到的那样。

在名字、中间名文本框FNMName.Text(即Robert'); DROP TABLE STUDENTS; --)和姓氏文本框LName.Text(我们称之为Derper)的值与查询的其余部分连接之后,结果现在实际上是两个查询,由语句终止符(分号)。第二个查询已注入第一个查询。当代码对数据库执行此查询时,它将如下所示

INSERT INTO Students VALUES ('Robert'); DROP TABLE Students; --', 'Derper')

用简单的英语,大致翻译为两个查询:

Add a new record to the Students table with a Name value of ‘Robert’

Delete the Students table

第二个查询之后的所有内容都标记为注释--', 'Derper')

学生姓名中的'不是评论,它是结束字符串 delimiter。由于学生的姓名是一个字符串,因此在语法上需要它来完成假设查询。注入攻击仅在它们注入的 SQL 查询产生有效的 SQL时才起作用。

2022-09-03