首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能从SELECT语句获得SQL注入攻击吗?

我能从SELECT语句获得SQL注入攻击吗?
EN

Stack Overflow用户
提问于 2009-07-08 17:15:01
回答 7查看 9.8K关注 0票数 9

2实际问题:

我知道我必须尽可能多地使用存储过程,但我想知道以下几点。

A:可以从SELECT语句(Select *来自MyTable)获得SQL注入攻击吗?

B:,当我在ASP.NET中使用SQLDataSource时,我能得到一个SQL注入攻击吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-07-08 17:19:51

回答你的问题。

A:是的,您可以从任何接受参数的查询获得SQL攻击(如果平台不使用所提供的方法并通过调用,甚至调用存储过程)。

我被要求提供一个示例,说明即使使用存储过程也可以进行注入。我看到开发的应用程序确实使用了存储过程,但以这种方式:

代码语言:javascript
复制
// 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查询,并自动对它们进行消毒,以防止注入。

为了避免注射,要么:

  • 净化你的投入
  • 使用平台提供的抽象层。
  • 使用参数化查询。
票数 19
EN

Stack Overflow用户

发布于 2009-07-08 17:17:35

在大多数情况下,您可以在不使用参数化查询的任何时候受到SQL注入攻击。

如果你的例子,

代码语言:javascript
复制
 SELECT * from MyTable

没有任何用户输入的数据,所以这应该是好的。然而,类似于:

代码语言:javascript
复制
 SELECT * from MyTable WHERE name='x'

(x是一个参数)那么就有可能有人在他们的名字中注入一些SQL。

B: ASP.NET使用参数化查询,因为它基于以编程方式提供的参数构建查询。

票数 6
EN

Stack Overflow用户

发布于 2009-07-08 17:21:47

当您赋予用户操作查询的能力时,注入攻击就会发生,对于参数化的查询,大多数(如果不是全部)威胁都会被中和,因为特殊字符被转义,只使您想要执行的查询成为可执行的。

示例:

搜索框:

代码语言:javascript
复制
select * from myTable where keywords like '%$searchTerm%'

然后黑客插入一个';‘来终止查询,并可以编写他们想要的任何其他查询。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1099391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档