Npgsql/Postgres 的 SQL 注入
SQLInjection with Npgsql/Postgres
我想了解 SQL注入如何与 PostgresqlDb 一起工作。我在 C# 中使用 Npgsql。
这是我的查询,当我重命名文件夹时会调用它:
cmd.CommandText = "UPDATE allfolder.folder SET folder_name = '" + foldernamenew + "'";
cmd.ExecuteNonQuery();
我现在尝试将以下值传递到文本字段中:
abcdef; INSERT INTO allfolder.folder (id, folder_name) VALUES (56,"aaaaaaa");
然后 AJAX 被解雇。
我假设的输出是,table 中的所有文件夹都有 folder_name“abcdef”,并且我有一个名为“aaaaaa”的 ID 为“56”的新文件夹。事实并非如此,因为分号不被识别为分隔符,因此每个 folder_name 的名称都是“abcdef; INSERT INTO ....”。我不想在允许多查询的数据库端更改它。
所以我的问题是:
我需要如何准备实现注入的 SQL 语句?
当因为分号无法识别而不允许执行第二个 qry 时,甚至可以进行注入吗?
我只说 Npgsql 和 postgres。
在 PostgreSQL.
中 总是 允许“多查询”(一行中的多个查询,用分号分隔)
您的问题是 SQL:
中的多个错误
abcdef
后缺少单引号。
aaaaaaa
. 周围用双引号代替单引号
- 语句末尾没有单引号或行注释。
说句有道理的:先学会SQL,才能学会SQL注入。
正如 Laurenz 上面提到的,这应该有效:
abcdef'; INSERT INTO allfolder.folder (id, folder_name) VALUES (56,'aaaaaaa'); -- test
确保不要混用单引号和双引号。 SQL 中的一个常见错误。分号前需要单引号,否则它在文本字符串中,因为你没有分隔符。
我想了解 SQL注入如何与 PostgresqlDb 一起工作。我在 C# 中使用 Npgsql。
这是我的查询,当我重命名文件夹时会调用它:
cmd.CommandText = "UPDATE allfolder.folder SET folder_name = '" + foldernamenew + "'";
cmd.ExecuteNonQuery();
我现在尝试将以下值传递到文本字段中:
abcdef; INSERT INTO allfolder.folder (id, folder_name) VALUES (56,"aaaaaaa");
然后 AJAX 被解雇。
我假设的输出是,table 中的所有文件夹都有 folder_name“abcdef”,并且我有一个名为“aaaaaa”的 ID 为“56”的新文件夹。事实并非如此,因为分号不被识别为分隔符,因此每个 folder_name 的名称都是“abcdef; INSERT INTO ....”。我不想在允许多查询的数据库端更改它。
所以我的问题是:
我需要如何准备实现注入的 SQL 语句? 当因为分号无法识别而不允许执行第二个 qry 时,甚至可以进行注入吗?
我只说 Npgsql 和 postgres。
在 PostgreSQL.
中 总是 允许“多查询”(一行中的多个查询,用分号分隔)您的问题是 SQL:
中的多个错误abcdef
后缺少单引号。aaaaaaa
. 周围用双引号代替单引号
- 语句末尾没有单引号或行注释。
说句有道理的:先学会SQL,才能学会SQL注入。
正如 Laurenz 上面提到的,这应该有效:
abcdef'; INSERT INTO allfolder.folder (id, folder_name) VALUES (56,'aaaaaaa'); -- test
确保不要混用单引号和双引号。 SQL 中的一个常见错误。分号前需要单引号,否则它在文本字符串中,因为你没有分隔符。