Eti*_*nne 8 c# sql vb.net asp.net sql-injection
实际上有2个问题
我知道我必须尽可能多地使用存储过程,但我想知道以下内容.
答:我可以从SELECT语句中获取SQL注入攻击,例如(Select*from MyTable)吗?
B: 另外,当我在ASP.NET中使用SQLDataSource时,我能获得SQL注入攻击吗?
And*_*ore 19
回答你的问题.
答:是的,您可以从任何带参数的查询中获取SQL注入攻击(如果您未使用平台提供的方法并通过SQL调用执行此操作,则甚至调用存储过程).
我被要求提供一个例子,说明即使使用存储过程也可以进行注射.我见过开发的应用程序确实使用了存储过程,但是这样:
// C# - DON'T DO THIS!
String regionName = assignedSomewhereElse();
SQLCommand sqlCmd = DatabaseConnection.CreateCommand();
SQLCommand sqlCmd.CommandText =
String.Format("EXECUTE sp_InsertNewRegion '{0}'", regionName);
sqlCmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
显然,这不是调用存储过程的方法.您应该使用平台的抽象或参数化查询.
B: SQLDataSource是数据库的抽象层.它将为您创建SQL查询并自动清理它们以防止注入.
为了避免注射,要么:
在大多数情况下,您可以在不使用参数化查询的任何时候获得SQL注入攻击.
如果你的例子,
SELECT * from MyTable
Run Code Online (Sandbox Code Playgroud)
没有任何用户输入的数据,所以应该没问题.但是,像:
SELECT * from MyTable WHERE name='x'
Run Code Online (Sandbox Code Playgroud)
(x作为参数)然后有人可能会在他们的名字中注入一些SQL.
B:ASP.NET使用参数化查询,因为它基于您以编程方式提供的参数构建查询.