使用 SqlBuilder 在 FROM 子句中注入 SQL

The*_*oon 5 c# sql sql-server sql-injection

我们有一个 SQL 语句,它SqlBuilder在 from 子句中使用set the table name。数据库是 SQL Server 2008 及更高版本。

var sqlBuilder = new SqlBuilder();

sqlBuilder.Select("*").From(tableName);
sqlBuilder.Where("...");

Connection.BuilderQuery<dynamic>(sqlBulder).Select(Map);
Run Code Online (Sandbox Code Playgroud)

我想知道这是否是 SQL 注入风险?我怎样才能减轻这种风险?还是SqlBuilder管这些东西?

我可以通过将表名括在方括号中来降低风险吗?例如

sqlBuilder.From("[" + tableName + "]");
Run Code Online (Sandbox Code Playgroud)

此外,如果有人可以在FROM子句中提供一些 SQL 注入攻击的示例,我将不胜感激,以便我可以了解它的工作原理并创建测试。

Ami*_*mit 3

我不知道是什么SqlBuilder,但这里有一个利用注入的示例:假设您有一个代码可以执行以下操作:

var myFullQuery = string.Format("SELECT * FROM {0} WHERE A = 1", externalInput);
Run Code Online (Sandbox Code Playgroud)

然后针对数据库执行此操作。如果恶意用户发送此字符串作为输入:ValidTableName; DELETE FROM ValidTableName; SELECT * FROM ValidTableName

myFullQuery变量将设置为:SELECT * FROM ValidTableName; DELETE FROM ValidTableName; SELECT * FROM ValidTableName WHERE A = 1并且您已经丢失了整个表...显然可以通过这种方式实现更具破坏性的命令...