我没有找到太多这方面的信息,但我听说可以在 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/