SQL注入攻击大体上我了解,就是不知道如何运动到实际去
哪个大哥能否给点实际的防范程序给我参考下,谢谢~

解决方案 »

  1.   

    小弟不才,因为研究过HACKER技术,这里简单说一下,还望高手指点,关于SQL注射,就WEB方面目前已知的有两种注入方式,一个是通过地址栏提交SQL查询语句,另一种是通过登陆窗口提交构造语句。
    就前一种原理大体就是地址栏提交语句被后台一并当参数传递到数据库中进行查询,结果造成地址栏提交的SQL语句被数据库正常执行,但因此方式多少带有一定的爆破方式(不包括提交其他SQL语句,因为有时提交到数据库的是可能执行某些危险操作的语句,尤其对于大型数据库是相当危险的),如果利用的属于猜解数据库内容的话,那么查询结果会有2种,成功和不成功,查询成功的话,页面无明显变化,如不成功,页面将出现错误。根据页面变化采用ASCII拆半法等方法最终将数据库内容猜解出来的,对于这种方法的防御,个人采用的方法一个是在取地址栏参数后,利用C#对此参数进行数据类型转换,因基本作为地址栏参数的全是数字,而要提交的SQL语句含有字符,所以,如果进行数据类型转换字符串用int.Parse()的方法将产生错误而使其他代码无法运行,这里可用TRY   CATCH  进行下处理,如出现转换错误就跳转到指定页面等,还有另一种方式就是不要让你写的SQL语句尾部可以利用AND或嵌套语句接入新的查询语句。
    对于通过登陆窗口提交构造语句基本就是将OR语句写到登陆窗口的密码或用户对话框里提交造成SQL语句错误执行进而导致绕过验证环节,不需要任何登陆帐户就可直接登陆后台,这个的处理办法也是,一个从SQL语句下手,另一个方法是在登陆框内不允许输入如‘ = ’这类特殊字符。如果还不明白,建议去国内的各大黑客站点看看,不如华黑,黑白,黑吧,邪恶八进制等
      

  2.   

    主要是通过对'还有=等等特殊条件字符的输入值进行特殊转换来防止注入.
    另外最好是在代码中不要直接使用从WEB页的值(比如用户输入的用户名),用变量转一下.
    还有不要在URL里直接传值,通过SESSION来通信.
      

  3.   

    如果你的Sql语句是这样的,而且没有进行过滤用下列字符可以直接登陆string strsql="select count(*) from userinfo where username='"+this.TextBox1.Text+"' and pwd='"+this.TextBox2.Text+"'";'or 1=1 --
      

  4.   

    拼接字符串的方式会导致sql注入式攻击
    例如  select * from tablename where id='"+ textBox1.Text +"'
    可以改成参数的方法
    例如  select * from tablename where id=@ID,在程序里利用SqlParameter来做
    要不然就全写成存储过程
      

  5.   

    以前在哪儿见过一片实例的,说不定就在论坛里面,只是当时没有细看
    你可以搜搜看先,应该可以搜到
    http://community.csdn.net/Expert/TopicView3.asp?id=5499401
    不一定有用,可以参考一下
      

  6.   

    最常用的'最早的asp中如果不过滤掉' 那么回把sql语句的后半句都显示出来,然后加以利用
    for example: 'or 1=1 --或者也可以利用url进行注入总之,方法有很多,但愿lz不是为了注入去注入
      

  7.   

    偶不喜欢拼接sql语句,而且会对字符进行限制的。
      

  8.   

    用参数类,不要拼接SQL代码。就可以搞定了!
      

  9.   

    SQLParamter参数实现就可以了呀, 而且不会出现特殊字符比如 ‘ 之类造成的问题
      

  10.   

    实在要接SQL语句的话,用正则过滤吧
      

  11.   

    SQL Injection比較根本的解決之道,是用SQLParameter物件承接使用傳入的參數,避免直接用外部輸入值拼湊SQL指令,若非要組合SQL字串不可,也請記得用Replace將使用者輸入內容中的單引號置換成兩個單引號(數字型態時則要檢查是否為數字)。使用SQLParameter傳遞參數,比DIY檢核周全,除了可免除SQL Injection風險外,還可以享受反復執行時的效能提升,應多加利用。
    另外,在正式環境中,請記得開啟Web.config的CustomError設定,避免程式出錯時,錯誤信息及Debug資訊供駭客更多入侵的指引。
      

  12.   

    采用参数式来执行SQL语句或用存储过程,就不会出现这种事情了
      

  13.   

    範例1:
    strSQL = "SELECT UserName FROM tblAccount WHERE Account='" & Request("Account") & "' AND Password='" & Request("Password") & "'
    如此,駭客只要在密碼欄位中輸入一個單引號,測試是否傳回錯誤信息,就可讓具有SQL Injection漏洞的程式現形。
    上述程式應改為:
    範例2:
    strSQL = "SELECT UserName FROM tblAccount WHERE Account=@Account AND Password=@Password"
    Dim cmd As SqlCommand = New SqlCommand(strSQL,strCnn)
    cmd.Parameters.Add("@Account",SqlDbType.Varchar).Value=Request("Account")
    cmd.Parameters.Add("@Password",SqlDbType.Varchar).Value=Request("Password")
      

  14.   

    SQL Injection比較根本的解決之道,是用SQLParameter物件承接使用傳入的參數,避免直接用外部輸入值拼湊SQL指令,若非要組合SQL字串不可,也請記得用Replace將使用者輸入內容中的單引號置換成兩個單引號(數字型態時則要檢查是否為數字)。使用SQLParameter傳遞參數,比DIY檢核周全,除了可免除SQL Injection風險外,還可以享受反復執行時的效能提升,應多加利用。
    另外,在正式環境中,請記得開啟Web.config的CustomError設定,避免程式出錯時,錯誤信息及Debug資訊供駭客更多入侵的指引。
      

  15.   

    拼sql时过滤掉输入的非法字符。
      

  16.   

    最简单的办法 就是限制输入的长度
    比如 textBoxID 的长度 你写成最大10  10个字符还能注入啊?
      

  17.   

    最后一个问题(搞定就结贴了)
    请问RSA加密可以 防止SQL注入攻击么?
      

  18.   

    最后一个问题(搞定就结贴了)
    请问RSA加密可以 防止SQL注入攻击么?
      

  19.   

    为什么大家都只是说防的办法,哪位牛人能把注入的办法统计出来.知道了别人怎么注入,写出防的办法才会全面吧.-----------------------
          CSDN 论坛助手 
      http://china-csdn.cn
      

  20.   

    select * from tablename where id='"+ password+"'写成一个存储过程上面SQL就可以解决。
    同时你在页面中加密这样安全性就会大提高