2013-08-21 63 views
3

阻止SQL注入创建语句有意义吗?我怎么能这样做? 我想使用命令参数,但它不缝到工作:C#阻止SQL注入创建语句

实施例:

var createSql = "CREATE TABLE @TableName (@Column1 ...)"; 
var command = new SqlCommand(); 

command.CommandText = createSql; 
command.Parameters.AddWithValue("@TableName", "XYZ"); 
command.Parameters.AddWithValue("@Column1", "Col"); 

// somewhere else 
command.Connection = connection; 
command.ExecuteNonReader(); // --> exception: invalid syntax at @TableName 

编辑:取决于其他数据生成列和表名。间接也在用户输入,是的。给定的创建语句不完整。这只是一个例子。

我的问题是,它似乎命令参数不会被替换。

+0

列名和表名来自哪里?用户输入? – Thilo

+0

请参阅上面的修改。 – SACO

回答

2

不能使用绑定变量表或列名。

所以你必须建立基于字符串连接的是SQL语句,并在必要时,手动报价/转义,并且必须非常小心你如何去了解它。

用户直接输入将是非常危险的,但如果只是间接的,例如只是选择了自动生成的名称选项,你应该没问题。

0

在这个特定的代码不能有SQL注入,因为用户没有这个发言权。

SQL注入的时候要么不正确过滤用户输入嵌入到SQL语句或用户输入的字符串文字的转义字符不是强类型,并在你的情况下意外地执行

用户不输入任何东西所以造成不用担心。

但是,您创建表查询是无效的。你可以在创建语句上阅读here

你不能在创建语句的“...”使用,每列必须有类型

+0

我更新了我的问题以澄清一些事情。 – SACO

+0

@SACO判断由编辑,你需要更换标题,因为这不是一个SQL注入的问题,这是一个SqlCommand参数的问题,你也应该给我们的全力抛出的异常,CUS'真正的代码现在所有的i可以做我指导你的信息和SqlCommand参数的例子 –

+0

由thilo的答案已经指出我需要知道的。 – SACO