• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    不當編寫SQL語句導致系統不安全

    發布: 2007-5-25 09:21 | 作者: netmuse | 來源: 互聯網 | 查看: 29次 | 進入軟件測試論壇討論

    領測軟件測試網 安全源于正確
    不當編寫SQL語句導致系統不安全
    丁國勇

      在一般的多用戶應用系統中,只有擁有正確的用戶名和密碼的用戶才能進入該系統。我們通常需要編寫用戶登錄窗口來控制用戶使用該系統,這里以Visual Basic+ADO為例:


      一、漏洞的產生


      用于登錄的表

      Users(name,pwd)

      建立一個窗體Frmlogin,其上有兩個文本框Text1,Text2和兩個命令按鈕cmdok,cmdexit。兩個文本框分別用于讓用戶輸入用戶名和密碼,兩個命令按鈕用于“登錄”和“退出”。

      1、定義Ado Connection對象和ADO RecordSet對象:

      Option Explicit

      Dim Adocon As ADODB.Connection

      Dim Adors As ADODB.Recordset

      2、在Form_Load中進行數據庫連接:

      Set Adocon = New ADODB.Connection

      Adocon.CursorLocation = adUseClient

      adocon.Open "Provider=Microsoft.jet.OLeDB.4.0.1;Data Source=" && _

      App.Path && "\test.mdb;"

      cmdok中的代碼

      Dim sqlstr As String

      sqlstr = "select * from users where name='" && Text1.Text && _

      "' and pwd='" && Text2.Text && "'"

      Set adors = New ADODB.Recordset

      Set Adors=Adocon.Execute(sqlstr)

      If Adors.Recordcount>0 Then //或 If Not Adors.EOF then

      ....

      MsgBox "Pass" //通過驗證

      Else

      ...

      MsgBox "Fail" //未通過驗證

      End if

      運行該程序,看起來這樣做沒有什么問題,但是當在Text1中輸入任意字符串(如123),在Text2中輸入a' or 'a'='a時,我們來看sqlstr此時的值:

      select * from users where name='123' and pwd='a' or 'a'='a'

      執行這樣一個SQL語句,由于or 之后的'a'='a'為真值,只要users表中有記錄,則它的返回的 eof值一定為False,這樣就輕易地繞過了系統對于用戶和密碼的驗證。

      這樣的問題將會出現在所有使用select * from users where name='" && name && "' and pwd='" && password &&"'的各種系統中,無論你是使用那種編程語言。


      二、漏洞的特點


      在網絡上,以上問題尤其明顯,筆者在許多網站中都發現能使用這種方式進入需要進行用戶名和密碼驗證的系統。這樣的一個SQL漏洞具有如下的特點:

      1、與編程語言或技術無關

      無論是使用VB、Delphi還是ASP、JSP。

      2、隱蔽性

      現有的系統中有相當一部分存在著這個漏洞,而且不易覺察。

      3、危害性

      不需要進行用戶名或密碼的猜測即可輕易進入系統。


      三、解決漏洞的方法


      1、控制密碼中不能出現空格。

      2、對密碼采用加密方式。

      這里要提及一點,加密不能采用過于簡單的算法,因為過于簡單的算法會讓人能夠構造出形如a' or 'a'='a的密文,從而進入系統。

      3、將用戶驗證和密碼驗證分開來做,先進行用戶驗證,如果用戶存在,再進行密碼驗證,這樣一來也能解決問題。


    (發表于中國電腦教育報2002年第7期)

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>