首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TableAdapters SQL注入

TableAdapters SQL注入
EN

Stack Overflow用户
提问于 2009-02-27 18:43:18
回答 4查看 1.1K关注 0票数 2

您好,我正在使用一个数据集,在该数据集中,我有一个表适配器。在我的表适配器中,我使用存储过程作为查询。如果我使用我的表适配器使用下面几行代码插入表单数据,那么它是否可以安全地防止SQL注入?谢谢。

代码语言:javascript
复制
UserDataSetTableAdapters.UserInformationTableAdapter myFactory = new TestProject.UserDataSetTableAdapters.UserInformationTableAdapter();
            myFactory.spTest_InsertUserInformation(id, frmAddress);
EN

回答 4

Stack Overflow用户

发布于 2009-02-27 18:52:47

如果不发布存储过程代码,就无法真正回答您的问题,但您可能可以自己回答。

SQL注入攻击源于用户输入的数据摇摆进入动态生成和执行的SQL查询。使用存储过程通常可以通过将参数作为参数传递来避免此问题,从而不会动态生成SQL。过程会自动封装,并且不会成为原始SQL查询文本的一部分。

以以下内容为例:

代码语言:javascript
复制
SELECT *
FROM myTable
WHERE myId = @ID;

作为参数,您可以安全地将@ID设置为"21;DROP TABLE myTable;“。它将为您转义,并将整个字符串与myId进行比较。但是,如果您动态生成SQL查询,如

代码语言:javascript
复制
string query = "SELECT *\nFROM myTable\nWHERE myId = " + userEnteredText + ";";

现在,您将获得以下内容:

代码语言:javascript
复制
SELECT *
FROM myTable
WHERE myId = 21; DROP TABLE myTable;;

唉哟。

因此,回答您的问题:如果您的存储过程没有根据它的参数动态地生成SQL并对它们进行EXEC,那么您应该是安全的。

注意:当然,这依赖于.NET数据提供程序使用参数调用过程,而不是生成动态SQL语句。大多数人这样做是正确的,但如果你使用的是第三方提供商,你应该在假设你是安全的之前仔细检查一下。

票数 4
EN

Stack Overflow用户

发布于 2009-02-27 18:48:40

简单回答:是:)

select 1:即使您没有在适配器上使用存储过程和带有参数的已定义查询,也可以安全地防止注入,即select f1、f2 where f3 = @myparameter ...这将使用已准备好的查询。

票数 1
EN

Stack Overflow用户

发布于 2009-02-27 18:51:43

使用SQL Prolier跟踪进行验证。如果底层应用程序接口是安全的,您将看到参数化的T-SQL命令,类似于sp_executesql。

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

https://stackoverflow.com/questions/596057

复制
相关文章

相似问题

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