Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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# 为避免sql注入而要执行的手动操作列表?_C#_Sql - Fatal编程技术网

C# 为避免sql注入而要执行的手动操作列表?

C# 为避免sql注入而要执行的手动操作列表?,c#,sql,C#,Sql,我目前正在使用c#连接到链接的SQL Server。问题是参数化不起作用,因为我必须在命令SQL字符串中使用openquery 这现在对我来说意味着(据我所知)我有一个问题,我需要做不应该做的事情……设置手动设置以避免SQL注入,而不是使用参数化SQL命令 我所拥有的是参数本身以及我需要确保安全的参数值 例如: 参数accountnumber的值为100-200-300-400,客户端的值为'MIP' 所以我的问题是:有没有列出最常见的攻击路线以及如何打击它们 (或者,由于最常见的路线不对我开放

我目前正在使用c#连接到链接的SQL Server。问题是参数化不起作用,因为我必须在命令SQL字符串中使用openquery

这现在对我来说意味着(据我所知)我有一个问题,我需要做不应该做的事情……设置手动设置以避免SQL注入,而不是使用参数化SQL命令

我所拥有的是参数本身以及我需要确保安全的参数值

例如:

参数accountnumber的值为100-200-300-400客户端的值为'MIP'

所以我的问题是:有没有列出最常见的攻击路线以及如何打击它们

(或者,由于最常见的路线不对我开放,我还可以选择其他路线吗?

来自

您有以下几种选择:

选项1:白名单输入验证

请前往查看建议白名单

SQL查询的各个部分都不是使用绑定变量的合法位置,例如表或列的名称以及排序顺序指示符(ASC或DESC)。在这种情况下,输入验证或查询重新设计是最合适的防御措施。对于表或列的名称,理想情况下,这些值来自代码,而不是来自用户参数。但是,如果使用用户参数值使表名和列名不同,则参数值应映射到合法/预期的表名或列名,以确保未验证的用户输入不会在查询中结束。请注意,这是设计不良的症状,如果时间允许,应考虑完全重新写入。下面是一个表名验证的示例

 String tableName;
 switch(PARAM):
   case "Value1": tableName = "fooTable";
                  break;
   case "Value2": tableName = "barTable";
                  break;
     ...
   default      : throw new InputValidationException("unexpected value provided for table name");
选项2:转义所有用户提供的输入

只有在上述任何一项都不可行的情况下,才应将此技术用作最后手段。输入验证可能是一个更好的选择,因为与其他防御措施相比,这种方法是脆弱的,我们不能保证它在所有情况下都会阻止所有SQL注入

这种技术是在将用户输入放入查询之前对其进行转义。它的实现非常特定于数据库。通常只建议在实现输入验证不经济的情况下改装遗留代码。从头构建的应用程序,或者需要低风险容忍度的应用程序,应该使用参数化查询、存储过程或某种为您构建查询的对象关系映射器(ORM)来构建或重新编写

这种技术的工作原理是这样的。每个DBMS支持一个或多个特定于某些查询类型的字符转义方案。如果然后使用所使用数据库的正确转义方案转义所有用户提供的输入,DBMS将不会将该输入与开发人员编写的SQL代码混淆,从而避免任何可能的SQL注入漏洞

OWASP企业安全API(ESAPI)是一个免费、开源的web应用程序安全控制库,使程序员更容易编写低风险的应用程序。ESAPI库的设计目的是使程序员更容易将安全性改进到现有应用程序中。ESAPI库也为新的开发奠定了坚实的基础。p> 其他操作: 具有多个DB用户和视图的最低权限

您有以下几种选择:

选项1:白名单输入验证

请前往查看建议白名单

SQL查询的各个部分都不是使用绑定变量的合法位置,例如表或列的名称以及排序顺序指示符(ASC或DESC)。在这种情况下,输入验证或查询重新设计是最合适的防御措施。对于表或列的名称,理想情况下,这些值来自代码,而不是来自用户参数。但是,如果使用用户参数值使表名和列名不同,则参数值应映射到合法/预期的表名或列名,以确保未验证的用户输入不会在查询中结束。请注意,这是设计不良的症状,如果时间允许,应考虑完全重新写入。下面是一个表名验证的示例

 String tableName;
 switch(PARAM):
   case "Value1": tableName = "fooTable";
                  break;
   case "Value2": tableName = "barTable";
                  break;
     ...
   default      : throw new InputValidationException("unexpected value provided for table name");
选项2:转义所有用户提供的输入

只有在上述任何一项都不可行的情况下,才应将此技术用作最后手段。输入验证可能是一个更好的选择,因为与其他防御措施相比,这种方法是脆弱的,我们不能保证它在所有情况下都会阻止所有SQL注入

这种技术是在将用户输入放入查询之前对其进行转义。它的实现非常特定于数据库。通常只建议在实现输入验证不经济的情况下改装遗留代码。从头构建的应用程序,或者需要低风险容忍度的应用程序,应该使用参数化查询、存储过程或某种为您构建查询的对象关系映射器(ORM)来构建或重新编写

这种技术的工作原理是这样的。每个DBMS支持一个或多个特定于某些查询类型的字符转义方案。如果然后使用所使用数据库的正确转义方案转义所有用户提供的输入,DBMS将不会将该输入与开发人员编写的SQL代码混淆,从而避免任何可能的SQL注入漏洞

OWASP企业安全API(ESAPI)是一个免费、开源的web应用程序安全控制库,使程序员更容易编写低风险的应用程序。ESAPI库的设计目的是使程序员更容易将安全性改进到现有应用程序中。ESAPI库也可以作为一个坚实的基础