主題: SQL 的問題
瀏覽單個文章
dabochi
*停權中*
 
dabochi的大頭照
 

加入日期: Nov 2002
您的住址: 東湖
文章: 1,688
引用:
作者s0510510
小弟另外又有問題了,要再次麻煩版上熱心大大

----以下是題目-----
請舉例說明下列程式有何安全上之漏洞?並說明如何修補該安全漏洞。
Dim sql
Sql=”SELECT *
FROM WebUsers
WHERE Username = = ’’’& username &’’’ AND
Password = = ’’’ & password &’’’’’
Set rs=Conn.OpenRecordset(sql)
If not rs.eof() then ‘user connected successfully’
end if

----以下是解答------
(1)攻擊者在密碼檔部分輸入Aa’ OR TRUE OR’,而程序如不過輸入做任何檢查和過濾,將會導致密碼失去效用。所以當攻擊者只要知道用戶帳號,就可以任何用戶登錄,進行違法行為。
SELECT *
FROM WebUsers
WHERE Username = = ’Bob’ AND
Password = = ’ Aa’ OR TRUE OR’
(2)攻擊者把帳戶名設為’;DROP TABLE WebUsers--,將會刪除WebUser表均被刪除。
SELECT *
FR...


1.這個安全漏洞如果以在下寫程式的經驗 要根治建議是直接掛Stored Procedure或是掛Transaction上去 不在程式下定義sql條件式-不過這個方式100%不會是考試的解答就是xp
2.'"&~&"'是sql下表示變數的方式 但是sql很蠢 解讀變數的方式是把變數代表的東西填進去之後再解讀整個字串.所以當填Aa’ OR TRUE OR’進去之後 sql在解讀時會把後面的Password = = ’ Aa’ OR TRUE OR’解讀為不管對錯都會回傳eof;另外一個;DROP TABLE WebUsers--也是因為同一個問題 sql會以";"為分界將sql切成兩個條件式,並在"If not rs.eof() then ‘user connected successfully’ end if"進行驗證前就將Table WebUsers整個刪除
舊 2008-05-18, 04:35 PM #27
回應時引用此文章
dabochi離線中