首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查C#中的SQL关键字

问检查C#中的SQL关键字
EN

Stack Overflow用户
提问于 2013-05-13 10:26:41
回答 3查看 1.9K关注 0票数 0

如果我允许用户在文本框中键入内容,然后对我的数据库执行搜索,则可能会出现sql注入。我可以使用正则表达式,这是我的第一个想法。但我有个更好的主意。为什么不看看他们输入的内容中是否有SQL关键字。我使用的是SQL Server数据库,在一个使用c#的ASP.NET程序中,我认为微软会为我所说的提供一个简单的解决方案。我能找到的最好的是这篇文章:

Is it a programmatic way to get SQL keywords (reserved words)

这可能就是我最终要做的,但我的问题是我仍然需要输入整个关键字列表,大约有100个。当然,我现在可以完成了,而不是搜索和询问这个问题。但是有没有更简单的方法呢?现在我要:

1创建Hashset 2将所有关键字添加到hashset (cmon) 3根据hashset验证用户输入

我希望看到步骤2变得更容易,任何其他关于sql注入的建议也是值得感谢的

EN

回答 3

Stack Overflow用户

发布于 2013-05-13 10:43:29

如果要将搜索文本传递到存储过程中,并执行如下操作

代码语言:javascript
复制
WHERE search LIKE @inputParam  

SQL将不允许在上面的片段中引入注入。

但是,如果您正在构建字符串变量,然后使用EXEC @sql或SQL @SQL,则很容易受到sp_execute注入的攻击。

票数 2
EN

Stack Overflow用户

发布于 2013-05-13 10:45:18

在我看来,最好使用parameterized SQL来避免完全检查SQL关键字的问题。下面是一个用C#编写的示例(假设您使用的是MS SQL Server):

代码语言:javascript
复制
using (SqlCommand sqlcmd = new SqlCommand("SELECT * FROM [MyDB].[dbo].[MyTable] WHERE [SomeColumn] = @SomeValue", sqlconnection))
{
    sqlcmd.Parameters.AddWithValue("@SomeValue", strUsersSearchString);

    // use sqlcmd.ExecuteReader() here 
    // or whatever you normally would
}

这是关于MSDN的另一个例子。它使用参数化的SQL调用存储过程:http://msdn.microsoft.com/en-us/library/ff648339.aspx#paght000002_step3。

票数 2
EN

Stack Overflow用户

发布于 2013-05-13 12:39:11

使用命名参数。Dapper-dot-net让这件事变得非常容易:

代码语言:javascript
复制
IEnumerable<Row> results = connection.Query<Row>("SELECT column FROM table WHERE title LIKE @query", new { query = "SEARCHTERM" });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16514071

复制
相关文章

相似问题

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