security - "Bobby Tables"XKCD 漫画中的 SQL 注入(inject)是如何工作的?

标签 security validation sql-injection

只是看看:

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

这个 SQL 的作用是:

Robert'); DROP TABLE STUDENTS; --

我知道 '-- 都是注释,但是 DROP 这个词也不会被注释,因为它是注释的一部分同一行?

最佳答案

它会删除学生表。

学校程序中的原始代码可能类似于

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

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

在名字的值之后,中间名文本框FNMName.Text(即Robert');放下 table 上的学生; --)和姓氏文本框LName.Text(我们称之为Derper)与查询的其余部分连接起来,现在的结果实际上是< em>两个查询由 statement terminator 分隔(分号)。第二个查询已注入(inject)到第一个查询中。当代码对数据库执行此查询时,它将如下所示

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

第二个查询之后的所有内容都是 marked as a comment : --', 'Derper')

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

根据dan04再次编辑精辟的评论

关于security - "Bobby Tables"XKCD 漫画中的 SQL 注入(inject)是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47352957/

相关文章:

php - 我怎样才能使这个查询防注入(inject)? (PHP)

asp.net - Parameters 真的足以防止 Sql 注入(inject)吗?

java - 将现有私钥导入 BKS Keystore

c# - 在 asp.net 中验证密码

security - TURN 上的 WebRTC 流量是否端到端加密?

Angular 4 表单验证器 - minLength 和 maxLength 不适用于字段类型编号

javascript - jQuery(或 javascript)验证日期范围

security - 在 Symfony2 中使用 https 重定向任何 url 上的循环

php - Google OAuth JWT 签名验证

php - 绕过 mysql_real_escape_string 的保护