Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在csv导入应用程序中防止sql注入_C#_Sql Server_Wpf - Fatal编程技术网

C# 在csv导入应用程序中防止sql注入

C# 在csv导入应用程序中防止sql注入,c#,sql-server,wpf,C#,Sql Server,Wpf,这更像是一个概念问题 我已经用c语言构建了一个小的wpf应用程序来读取工资卷数据的csv并将其插入我的sql 2005数据库,无需编辑或删除 我已经采取了我所能想到的所有步骤来保护应用程序,防止用户进入sql注入并阅读相关主题。这些步骤包括连接字符串用户作为低级sql用户,将我的datagrid控件列与sql表紧密匹配,以及不可编辑的用户输入组合框、文件和日期选择器,只有特定的csv文件名。我的数据源更新方法是将csv读入并显示在datagrid中的datatable合并到sql datatab

这更像是一个概念问题

我已经用c语言构建了一个小的wpf应用程序来读取工资卷数据的csv并将其插入我的sql 2005数据库,无需编辑或删除

我已经采取了我所能想到的所有步骤来保护应用程序,防止用户进入sql注入并阅读相关主题。这些步骤包括连接字符串用户作为低级sql用户,将我的datagrid控件列与sql表紧密匹配,以及不可编辑的用户输入组合框、文件和日期选择器,只有特定的csv文件名。我的数据源更新方法是将csv读入并显示在datagrid中的datatable合并到sql datatable中,然后进行更新

我现在有了一个想法,最明显的弱点是我可以看到的csv文件本身!。我可以看到一个微小的机会,有人可以创建一个具有正确文件名的csv,并在一列中输入“删除[some statement]-等内容,然后将其读入

所以现在我觉得有必要检查这些输入,但是很多文章都说这种客户端的东西是浪费时间。其他人的想法是什么?我在想一个简单的类,它有一个要检查的东西列表,例如“sp”,“;”选择“,”删除“,”-”,然后选择一个函数,根据列表检查csv列输入,并根据需要进行处理

班级观念有点粗糙吗

我在想一个简单的类,它有一个要检查的东西列表,例如“sp”,“;”选择“,”删除“,”-”,然后选择一个函数,根据列表检查csv列输入,并根据需要进行处理

班级观念有点粗糙吗

对。它也是无效的。寻找令人反感的术语并将其过滤掉是一场失败的战斗。相反,您应该做的只是不要在数据库中以代码的形式执行用户输入。如果有人输入字符串DELETE,而您将该字符串作为代码执行,则您可能会受到攻击。另一方面,如果有人输入字符串DELETE,而您只是将该字符串保存到数据库中,那么他们所做的就是将数据输入到数据库中

将用户输入字符串视为字符串,而不是代码。保存它们,不要执行它们

如果看不到实际的数据访问代码,就很难更加具体。您可能非常容易受到SQL注入攻击。这里没有人不看你的代码就知道

但是SQL注入漏洞不在UI中。这可能就是你在这个奇怪的声明中提到的:

很多文章都说这种客户端的东西是浪费时间


任何SQL注入漏洞都将出现在与数据库交互的代码中。只要该代码的输入作为值而不是可执行代码(例如,参数化查询而不是查询串联)正确处理,您就不应该存在SQL注入漏洞。

您应该能够使用SQL参数,而不是从输入数据构造SQL语句:


请参阅:

与论坛网站不同,我们不会在网站上使用感谢、感谢的帮助或签名。请参阅。我正在使用vs2010中.net方法提供的标准基本更新方法。我想你是说,如果我的csv文件中有一个名为NAME的列,并且csv数据中包含的数据行的列名是‘EXEC sp_MSforeachtable@command1=DROP TABLE?然后,当我将csv数据表与sql表WAGEDATA合并时,语句EXEC sp_MSforeachtable command1=DROP table?当我用update方法更新sql表时也不会执行,对吗?如果那样的话,我可以发布代码helps@IanW:我不知道你所说的标准更新方法是什么意思。您可以使用多种不同的数据访问技术。最主要的是使用这种技术,输入是作为参数提供的,而不是作为手动编写的SQL代码提供的。我一直在努力让自己的慢脑筋恢复过来:用户不生成任何数据,实际上只是选择要读取的csv文件,应用程序将csv文件读取到数据表中,然后将其添加到sql数据库中。csv文件中的任何sql语句都会造成伤害吗?@IanW:即使用户没有输入,任何在应用程序之外的内容都应该被视为用户输入。这将包括文件的内容。在不了解您正在使用的数据访问技术的情况下,我不能说得更具体,但只要输入本身从未被视为SQL代码,例如根据用户输入手动连接SQL命令,那么您就应该是安全的。但是,同样,我不能在没有看到代码的情况下做出保证。好的,我理解缺乏保证的原因。不过,感谢您花时间理解和传授您的知识。我还相信文件的内容不会被连接,但为了安全起见,我模拟了我正在考虑的案例,并在我构建的本地测试数据库上进行测试。