use*_*271 2 sql code-injection
我没有找到关于此的更多信息,但我听说可以在URL栏中输入SQL查询以从数据库中提取数据,我只是想知道是否也可以通过它更新列或表.
这是一个例子:
SELECT *
FROM table
WHERE 1 = '2'
AND 3 = '$input'
Run Code Online (Sandbox Code Playgroud)
是否可以在URL栏中使用更新查询,如果是,如何使用?
如果有人创建了这样的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语句.然后第二个可以做注射器想要的任何事情.
有两种可能性可以防止这种情况发生.
转义输入中的单引号
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)
使用参数而不是字符串连接
cmd = new Command("SELECT * FROM table WHERE name = @n")
cmd.AddParameter("@n", input)
result = cmd.Execute()
Run Code Online (Sandbox Code Playgroud)
细节取决于数据库,数据库访问技术和使用的编程语言.我的例子必须被理解为伪代码.
| 归档时间: |
|
| 查看次数: |
3482 次 |
| 最近记录: |