PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   SQL 的問題 (https://www.pcdvd.com.tw/showthread.php?t=793595)

darkangel 2008-05-18 05:36 PM

引用:
作者dabochi
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整個刪除


非也非也!

小弟不才雖然數年沒碰資料庫,然竊以為,此題用 procedure 或 transcation 來解,不免讓人有用牛刀殺雞之譏。
此題語法將 username 與 password 放一起做判斷,很明顯的會發生 SQL Injection 的問題,最簡單的解決方式,就是把 username 與 password 的判斷分開來做處理。
此題開頭以 dim 宣告 sql 變數,很明顯的是類 VB 式語言,所以出題老師應該有寫過 ASP。
如果您不清楚為什麼 username & password 放在一起判斷會有 SQL Injection 的問題,請找孤狗大神請教,這已經是老掉牙的基本觀念了。

這是個人五六年前寫 SQL 的經驗,不過我想這種基本觀念應該不會變化太多。

darkangel 2008-05-18 05:43 PM

引用:
作者Devil
1.就是很單純的[隱碼攻擊],你可以試著將Aa’ OR TRUE OR’帶入整個SQL Command看看會組合成什麼樣子的句子,結果可以解讀為,它將會使WHERE的條件式為true
可以上網找找看[隱碼攻擊],[SQL Injection]的資料
他的原理是,許多網頁程式設計師,喜歡使用連接字串的方式來撰寫SQL Command
這樣就給了攻擊者一個機會,讓他們可以在網頁上的文字方塊內輸入SQL Command並且執行
所以,千萬不要使用連接字串的方式撰寫SQL Command,而採用Parameter帶入參數的方法
2.Drop是屬於SQL DDL,作用在於刪除,分號是在於它要分段SQL Command,所以,分號之前是一段SQL Command,分號之後又是另一段SQL Command了


正解,整個討論串看下來,感覺 Devil 兄是有真才實料的。


所有的時間均為GMT +8。 現在的時間是11:55 PM.

vBulletin Version 3.0.1
powered_by_vbulletin 2025。