2实际问题:
我知道我必须尽可能多地使用存储过程,但我想知道以下几点。
A:可以从SELECT语句(Select *来自MyTable)获得SQL注入攻击吗?
B:,当我在ASP.NET中使用SQLDataSource时,我能得到一个SQL注入攻击吗?
发布于 2009-07-08 17:19:51
回答你的问题。
A:是的,您可以从任何接受参数的查询获得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();显然,这不是调用存储过程的方式。您应该使用平台的抽象或参数化查询。
B: SQLDataSource是数据库的抽象层。它将为您创建SQL查询,并自动对它们进行消毒,以防止注入。
为了避免注射,要么:
发布于 2009-07-08 17:17:35
在大多数情况下,您可以在不使用参数化查询的任何时候受到SQL注入攻击。
如果你的例子,
SELECT * from MyTable没有任何用户输入的数据,所以这应该是好的。然而,类似于:
SELECT * from MyTable WHERE name='x'(x是一个参数)那么就有可能有人在他们的名字中注入一些SQL。
B: ASP.NET使用参数化查询,因为它基于以编程方式提供的参数构建查询。
发布于 2009-07-08 17:21:47
当您赋予用户操作查询的能力时,注入攻击就会发生,对于参数化的查询,大多数(如果不是全部)威胁都会被中和,因为特殊字符被转义,只使您想要执行的查询成为可执行的。
示例:
搜索框:
select * from myTable where keywords like '%$searchTerm%'然后黑客插入一个';‘来终止查询,并可以编写他们想要的任何其他查询。
https://stackoverflow.com/questions/1099391
复制相似问题