Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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时防止Sql注入_C#_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

C# 在编写动态Sql时防止Sql注入

C# 在编写动态Sql时防止Sql注入,c#,sql,sql-server,sql-server-2008,C#,Sql,Sql Server,Sql Server 2008,由于传统的数据库访问层,我不得不为存储过程的参数动态创建Sql语句 var p1 = Encoding.ASCII.GetString(p1).Replace("'", "''").Replace("\n", " "); var p2 = Encoding.ASCII.GetString(p2).Replace("'", "''").Replace("\n", " "); ..... var sql = string.Format("exec storedprocedure @p1='{0}',

由于传统的数据库访问层,我不得不为存储过程的参数动态创建Sql语句

var p1 = Encoding.ASCII.GetString(p1).Replace("'", "''").Replace("\n", " ");
var p2 = Encoding.ASCII.GetString(p2).Replace("'", "''").Replace("\n", " ");
.....
var sql = string.Format("exec storedprocedure @p1='{0}', @p2='{1}', @p3='{2}', ....", 
    p1, p2, p3, ...);
现在,在将字符串转换为ascii字符串后,我将
'
替换为
'
,并将
\n'
替换为一个空格。我还需要做什么?我无法使用
sqlparameter
,由于一些事实,我不得不压缩字符串

不要


用于所有具有动态输入的查询。所有类型的ADO都有类型化参数,以及sun下每个数据库的ADO.NET提供程序。如果您试图推出自己的SQL注入预防措施,那么您的日子会很不好过。

如果以正确的方式解码,unicode会变成上面的一种(),那么
\'
,,,
\'
,unicode呢,等等?为什么不能使用SqlParameter?@Patashu我已经更新了问题并强制字符串Ascii@NickW我不确定强制它使用ASCII是否可以修复它,但老实说,我从未尝试过类似的方法