sql - 如何通过 SQL 注入(inject)更新列?

标签 sql code-injection

我没有找到太多这方面的信息,但我听说可以在 URL 栏中输入 SQL 查询以从数据库中提取数据,我只是想知道是否也可以通过以下方式更新列或表

这是一个例子:

SELECT * 
FROM table 
WHERE 1 = '2' 
AND 3 = '$input'

是否可以在 URL 栏中使用更新查询,如果可以,怎么做?

最佳答案

如果有人像这样创建了一个 SQL 查询字符串

 sql = "SELECT * FROM table WHERE name = '" & input & "';"

那么如果输入是

input = "John'; DELETE FROM table WHERE 'x'='x"

生成的 SQL 将是

SELECT * FROM table WHERE name = 'John'; DELETE FROM table WHERE 'x'='x';

它将包含两个 SQL 语句。然后第二个可以做注入(inject)器想要的任何事情。


有两种可能性可以防止这种情况发生。

1

转义输入中的单引号

 sql = "SELECT * FROM table WHERE name = '" & Replace(input, "'", "''") & "';"

将错误的输入变成字符串的一部分

SELECT * FROM table WHERE name = 'John''; DELETE FROM table WHERE ''x''=''x';

2

使用参数而不是字符串连接

cmd = new Command("SELECT * FROM table WHERE name = @n")  
cmd.AddParameter("@n", input)  
result = cmd.Execute()  

细节取决于数据库、数据库访问技术和使用的编程语言。我的示例必须被理解为伪代码。

关于sql - 如何通过 SQL 注入(inject)更新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9086390/

相关文章:

sql - SQL Server 2008存储过程中如何操作ntext类型的数据

c++ - PE注入(inject)图像重定位

windows - 错误 0xc000007b 尝试绕行注入(inject) DLL 时

sql - 在同一查询中使用 SUM 的结果

mysql - 错误 #1054 - 尝试将 CSV 文件导入数据库时​​字段列表中出现未知列

sql - 两个表都需要使用 "where"进行 RoR 表连接

sql - 除非给出了 WHERE 的参数,否则对 findAll() 进行后续处理?

java - @Autowired JSF 2 Spring 3 空

javascript - 没有jquery的DOM注入(inject)

php - 单引号是否在 PHP 中自动转义?那么需要清洗什么呢?