当前位置:编程学习 > C#/ASP.NET >>

100分咨询个问题,这样的方法有效吗?????

string ID = Server.UrlDecode(Web.ReadCookie(this, "Admin", "ID")).Trim().Replace("'", "a").Replace(" ", "b").Replace("=", "c");


获取参数ID时,把“'”、“空格”、“=”这三个字符替换才其他的,能不能防止SQL的注入???? --------------------编程问答-------------------- 少少了 --------------------编程问答--------------------   使用存储过程 可以防止注入  
  另外可以如此
 


 public static string StrFilter(string str)
        {
            /*str = str.Replace("&", "&");
            str = str.Replace("<", "<");
            str = str.Replace(">", ">");
            str = str.Replace("'", "''");
            str = str.Replace("*", "");
            str = str.Replace("\n", "<br/>");
            str = str.Replace("\r\n", "<br/>");
            str = str.Replace("?","");*/
            str = str.Replace("'", "''");
            str = str.Replace("select", "");
            str = str.Replace("insert", "");
            str = str.Replace("update", "");
            str = str.Replace("delete", "");
            str = str.Replace("create", "");
            str = str.Replace("drop", "");
            str = str.Replace("delcare", "");
            if (str.Trim().ToString() == "") { str = "无"; }
            return str.Trim();
        }
--------------------编程问答-------------------- 这样是根据什么原理来防止sql注入的?
何不直接Relace("'","''")? --------------------编程问答-------------------- 能防一点点吧,但是估计不全 --------------------编程问答--------------------                不能有效的防止....   照样能注入.  --------------------编程问答-------------------- 以前用Relace做了个玩玩,可以防止自己想到的字符。 --------------------编程问答--------------------
引用 5 楼 hj_daxian 的回复:
不能有效的防止.... 照样能注入.


我是新手,请问题如果把“空格”都替换掉了,按道理是不能形成SQL语句了吗?为什么还能注入呢? --------------------编程问答--------------------
引用 2 楼 xiaoyuan245437 的回复:
使用存储过程 可以防止注入  
  另外可以如此
 

C# code


 public static string StrFilter(string str)
        {
            /*str = str.Replace("&", "&amp;");
            str = str.Replace("<", "&lt……

因为还有很多的关键字是可以注入的 


 /// </summary>
   /// <param name=strInput">要过滤SQL字符的字符串。</param>
   /// <param name="ReplaceSQLAndOr">是否过滤掉SQL字符串中的And和Or的关键字.其中true为过滤,false不过滤!</param>
   /// <returns>已过滤掉SQL字符的字符串。</returns>
   public string ReplaceSQLChar(string strInput,bool ReplaceSQLAndOr)
   {
    if (strInput == String.Empty)
    {
     return String.Empty;
    }
    else
    {
     if(ReplaceSQLAndOr)
     {
      strInput = strInput.Replace("and","");
      strInput = strInput.Replace("AND","");
      strInput = strInput.Replace("And","");
      strInput = strInput.Replace("or","");
      strInput = strInput.Replace("OR","");
      strInput = strInput.Replace("Or","");
     }
     strInput = strInput.Replace("‘", "‘");
     strInput = strInput.Replace(";", ";");
     strInput = strInput.Replace(",", ",");
     strInput = strInput.Replace("?", "?");
     strInput = strInput.Replace("<", "<");
     strInput = strInput.Replace(">", ">");
     strInput = strInput.Replace("(", "(");
     strInput = strInput.Replace(")", ")");
     strInput = strInput.Replace("@", "@");
     strInput = strInput.Replace("=", "=");
     strInput = strInput.Replace("+", "+");
     strInput = strInput.Replace("*", "*");
     strInput = strInput.Replace("&", "&");
     strInput = strInput.Replace("#", "#");
     strInput = strInput.Replace("%", "%");
     strInput = strInput.Replace("$", "¥");
     //返回已过滤掉SQL字符的字符串
     return strInput;
    }
   } 
--------------------编程问答-------------------- 防止不了!建议写个存储过程!!! --------------------编程问答-------------------- 能,但不是全部有效。建议写存储过程。。。 --------------------编程问答-------------------- 能,但是不全。 --------------------编程问答-------------------- 不能完全 --------------------编程问答-------------------- 参数化可以防止SQL注入 --------------------编程问答-------------------- 防止sql注入性攻击

http://wenku.baidu.com/view/97b0a200b52acfc789ebc972.html  --------------------编程问答-------------------- 改用存储过程吧 --------------------编程问答-------------------- 光去掉这些是不行的

建议看看SQL注入原理

百度上有很多这些文章

http://baike.baidu.com/view/3896.htm?fr=ala0_1_1 --------------------编程问答--------------------
开发不可能没漏洞
没有没漏洞的软件和网站
只是说尽量把漏洞减到最少 --------------------编程问答-------------------- 有些 道理 但还是有问题的  这也没办法 --------------------编程问答-------------------- 非常小用处。。。而且影响其他用户操作。。 --------------------编程问答-------------------- 能起点作用。。。。 --------------------编程问答-------------------- Relace("'","''")这样替换后可以过滤掉大部分的注入。
不过类似这条语句 sql="select * from users where name='"+name+"'";替换单引号后怎么注入? 这个问题网上也看过讨论,说是可以注入,但貌似都没给出具体的注入参数name的值。
自己试过也没找到如何注入这条语句,有人有答案否? --------------------编程问答-------------------- 1。参数化查询
2。不显示详细错误信息

这样应该可防sql注入 --------------------编程问答-------------------- 储存过程 --------------------编程问答--------------------
引用 23 楼 heikejinyao 的回复:
储存过程


这是什么东东  --------------------编程问答-------------------- 最好使用存储过程,相对于安全点 --------------------编程问答--------------------
友情帮顶下!顺便学习学习!
--------------------编程问答-------------------- 试试 Linq 呵呵 --------------------编程问答-------------------- 在前台输入时做限制,用脚本写个方法,不让输入特殊符号 --------------------编程问答-------------------- 建议用存储过程 --------------------编程问答-------------------- 你替换了,别人有些内容本来就应该有空格的怎么办?一般都不建议处理,因为不应该修改用户的输入。所以一般为了防止注入可以采用添加PARAMETER参数的方式。(PS:这个其实也不是100%的防止注入,还要看你的SQL语句怎么写,存储过程也一样) --------------------编程问答--------------------    没有效   SQL 注入不是只是说在 你的网站后面加些破效SQL语句的字符.

   有可能还有些一潜在的注入,包括木马等,这些东西让你防不胜防.

   你还不如直接用存储过程.用它不仅可以有效的保护程序不受SQL注入试攻击,而且还可以很好的提升

   程序性能,不仅仅是大量的SQL在网络上传输会慢,也会受损,会不安全.就算是把T-SQL传到了
  
   SQL Server,SQL Server执行一个过程也要比执行一串T-SQL快啊 --------------------编程问答-------------------- 不能有效防止,除楼上朋友们所说的方法之外还建议楼主把非组件上传也同时屏蔽 --------------------编程问答-------------------- 如果你觉得字符串有问题的话,你可以在网上下载一个操作字符串的类!StringUtil.cs  StringHelper.cs --------------------编程问答-------------------- 改用存储过程吧 

   SqlParameter []param ={
                new SqlParameter("@studentName",studentName),
                new SqlParameter("@studentSex",studentSex),
                new SqlParameter("@studentBirth",studentBirth)
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,