INSERT上的SQL注入

Bra*_*rad 28 c# sql sql-injection

我在我们公司的Intranet上创建了一个小型调查网页.无法从外部访问此网页.

表单只是几个单选按钮和一个注释框.

我想保持良好的编码实践,并希望防范SQL注入.

SQL注入是否可以在带有文本框注释的insert语句中发生?如果是这样,我如何使用.NET 2.0防范它?

Dav*_*ebb 58

注入可能发生在任何未正确运行的SQL语句上.

例如,让我们假装您的注释表有两个字段,一个整数ID和注释字符串.所以你INSERT如下:

 INSERT INTO COMMENTS VALUES(122,'I like this website');
Run Code Online (Sandbox Code Playgroud)

考虑有人输入以下评论:

'); DELETE FROM users; --
Run Code Online (Sandbox Code Playgroud)

如果您只是将注释字符串放入SQL中而不进行任何处理,则可以将您的单个字符转换INSERT为以下两个语句,后跟注释:

INSERT INTO COMMENTS VALUES(123,''); DELETE FROM users; -- ');
Run Code Online (Sandbox Code Playgroud)

这会删除users表格中的所有内容.而且有些人愿意花一整天的时间找到正确的表格,以便使用反复试验和各种技巧来清空. 以下是如何执行SQL注入攻击的说明.

您需要使用参数化SQL语句来防止这种情况.

这不仅仅是出于安全原因.例如,如果您正在天真地创建SQL语句,请注意以下注释:

I'm just loving this website
Run Code Online (Sandbox Code Playgroud)

会导致SQL语法错误,因为撇号被SQL解释为结束引号.

  • 撇号上的好点 - 我一直在使用string.replace方法 - 但我可以看到这更容易. (2认同)
  • 我们有一个名叫Ja'Net的女孩为我的公司工作.这真的搞砸了一些东西.大部分代码都是在我到达之前编写的. (2认同)

tva*_*son 27

使用参数化查询,以便自动为您引用文本.

SqlCommand command = connection.CreateCommand();
command.CommandText = "insert into dbo.Table (val1,val2,txt) values (@val1,@val2,@txt)";
command.AddParameterWithValue( "val1", value1 );
command.AddParameterWithValue( "val2", value2 );
command.AddParameterWithValue( "txt", text );

...
Run Code Online (Sandbox Code Playgroud)