实际上有2个问题:
我知道我必须尽可能多地使用存储过程,但是我想知道以下内容。
答: 我可以从SELECT语句(例如(从MyTable中选择*))获得SQL注入攻击吗?
B: 另外,当我在ASP.NET中使用SQLDataSource时,是否可以遭到SQL注入攻击?
回答您的问题。
答: 是的,您可以从任何 接受参数的 查询 中
获得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();
显然,这不是调用存储过程的方法。您应该使用平台的抽象或参数化查询。
B: SQLDataSource
是数据库的抽象层。它将为您创建SQL查询并自动清除它们,以防止注入。
为了避免注入,可以执行以下任一操作:
问题内容: 默认情况下,使用ASP控件时,ASP.net可以防止SQL注入攻击吗? 问题答案: 不。只要您提供SQL,就应该由您明智地使用控件。 这通常意味着清理输入并在动态SQL字符串上使用参数化查询或存储过程。 如果该控件正在为您生成查询(例如成员资格控件等),那么您将受到良好保护。
我如何满足静态代码分析工具(在这种情况下是校验),以下方法没有问题: Checkmarx告诉我: 方法ExecuteQuery从ExecuteReader元素获取数据库数据。然后,该元素的值在代码中流动,而没有经过适当的清理或验证,并最终用于方法ExecuteQuery中的数据库查询。这可能会导致二阶SQL注入攻击。
问题内容: 准备好的语句如何帮助我们防止SQL注入攻击? 维基百科说: 准备好的语句可以抵御SQL注入,因为稍后需要使用其他协议传输的参数值不需要正确地转义。如果原始语句模板不是从外部输入派生的,则不会发生SQL注入。 我不太清楚原因。用简单的英语和一些例子,简单的解释是什么? 问题答案: 这个想法很简单-查询和数据被发送到数据库服务器 分开 。 就这样。 SQL注入问题的根源在于 代码和数据 的
本文向大家介绍什么是SQL注入式攻击?相关面试题,主要包含被问及什么是SQL注入式攻击?时的应答技巧和注意事项,需要的朋友参考一下 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。常见的SQL
在SQL中,语句用于从数据库中的表中查询或检索数据。 返回存储在表中的数据,返回的结果称为结果集。 语法 这里,表达式是要从中选择数据的表的字段名称。使用以下语法选择表中可用的所有字段: 假设表有以下行记录 - EMP_ID EMP_NAME CITY PHONE_NO SALARY 1 Kristen Chicago 9737287378 150000 2 Russell Austin 9262
SELECT 语句用于从数据库中选取数据。 SQL SELECT 语句 SELECT 语句用于从数据库中选取数据。 结果被存储在一个结果表中,称为结果集。 SQL SELECT 语法SELECT column_name,column_name FROM table_name; 与SELECT * FROM table_name; 演示数据库 在本教程中,我们将使用 RUNOOB 样本数据库。 下面