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 中的一个常见错误。分号前需要单引号,否则它在文本字符串中,因为你没有分隔符。