0

我已经阅读了很多关于 SQL 注入的内容和许多论点,为什么你应该避免在你的 cs.file 中使用纯代码/连接动态地构建你的查询

但是,我有疑问,我需要比我更有经验的人提供一些建议。

我创建了一些 DLL 文件,以便在不同的项目中重用我的代码,因此我认为是通用的。

我创建了这些 DLL 文件,其中包含以动态方式 + 语句连接构建 SQL 查询的所有逻辑/代码。此后,我将这些 DLL 文件添加为对我的项目的引用。

这会容易受到 SQL 注入的攻击吗?这也是程序不足(耗时/维护不足)吗?

任何意见,将不胜感激。

4

3 回答 3

1

如果您没有处理传递给查询的输入(在运行时构建),那么您很容易受到 SQL 注入的攻击。添加或不添加到 dll 没有任何区别。

为了克服这个问题,您需要使用参数化查询。它们具有多种优势,其中一部分来自安全性。

我现在能想到的一个原因是你有一个文本框。你的查询是

 "select * from table1 where name = '" +  textbox1.Text;

不要假设在 textbox1 用户输入Ehsan's. 您的查询会爆炸,甚至不会执行。

参数化查询示例

 "select * from table1 where name = @Name"
 yourCommand.Parameters.AddWithValue("@Name", textbox1.Text);
于 2013-07-31T13:09:33.473 回答
0

很难确定,但如果你做类似的事情

string sql = "SELECT Field FROM Table WHERE Field = " + Somevar;

如果 somevar 来自某种类型的输入(通常是用户输入),那么您就可以接受 SQL 注入。

没有理由这样做,因为你可以这样做

string sql = "SELECT Field FROM Table WHERE Field = @myvar"
于 2013-07-31T13:10:01.793 回答
0

您应该确保您使用的是参数化查询或存储过程等。

并避免使用动态 SQL 查询,例如

"SELECT * FROM Users WHERE UserID = " + UserID

因为这些容易受到 SQL 注入的影响

而是使用参数化查询或存储过程,例如

"SELECT * FROM Users WHERE UserID = @UserID"

大多数 ORM(例如 .NET 的实体框架)将提供一些针对 SQL 注入的保护(但只有在正确使用的情况下)

此链接更详细地解释了http://www.troyhunt.com/2013/07/everything-you-wanted-to-know-about-sql.html

于 2013-07-31T13:16:13.600 回答