我在我们公司的Intranet上创建了一个小型调查网页.无法从外部访问此网页.
表单只是几个单选按钮和一个注释框.
我想保持良好的编码实践,并希望防范SQL注入.
SQL注入是否可以在带有文本框注释的insert语句中发生?如果是这样,我如何使用.NET 2.0防范它?
注入可能发生在任何未正确运行的SQL语句上.
例如,让我们假装您的注释表有两个字段,一个整数ID和注释字符串.所以你INSERT
如下:
INSERT INTO COMMENTS VALUES(122,'I like this website');
考虑有人输入以下评论:
'); DELETE FROM users; --
如果您只是将注释字符串放入SQL中而不进行任何处理,则可以将您的单个字符转换INSERT
为以下两个语句,后跟注释:
INSERT INTO COMMENTS VALUES(123,''); DELETE FROM users; -- ');
这会删除users
表格中的所有内容.而且有些人愿意花一整天的时间找到正确的表格,以便使用反复试验和各种技巧来清空. 以下是如何执行SQL注入攻击的说明.
您需要使用参数化SQL语句来防止这种情况.
这不仅仅是出于安全原因.例如,如果您正在天真地创建SQL语句,请注意以下注释:
I'm just loving this website
会导致SQL语法错误,因为撇号被SQL解释为结束引号.
使用参数化查询,以便自动为您引用文本.
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 ); ...