C# 在编写动态Sql时防止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}',
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是否可以修复它,但老实说,我从未尝试过类似的方法