如何通过SQL注入更新列?

use*_*271 2 sql code-injection

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

这是一个例子:

SELECT * 
FROM table 
WHERE 1 = '2' 
AND 3 = '$input'
Run Code Online (Sandbox Code Playgroud)

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

Oli*_*bes 6

如果有人创建了这样的SQL查询字符串

 sql = "SELECT * FROM table WHERE name = '" & input & "';"
Run Code Online (Sandbox Code Playgroud)

那么如果输入是

input = "John'; DELETE FROM table WHERE 'x'='x"
Run Code Online (Sandbox Code Playgroud)

生成的SQL将是

SELECT * FROM table WHERE name = 'John'; DELETE FROM table WHERE 'x'='x';
Run Code Online (Sandbox Code Playgroud)

它将包含两个SQL语句.然后第二个可以做注射器想要的任何事情.


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

1

转义输入中的单引号

 sql = "SELECT * FROM table WHERE name = '" & Replace(input, "'", "''") & "';"
Run Code Online (Sandbox Code Playgroud)

将错误输入转换为字符串的一部分

SELECT * FROM table WHERE name = 'John''; DELETE FROM table WHERE ''x''=''x';
Run Code Online (Sandbox Code Playgroud)

2

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

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

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