Sql語句密碼驗證安全漏洞(轉)
Sql語句作為國際標準的資料庫查詢語句,在各種程式設計環境中得到了廣泛的應用。作為一個成熟、穩定的系統,使用者登陸和密碼驗證是必不可少的。筆者在平時的程式設計工作中發現,許多程式設計師在用sql語句進行使用者密碼驗證時是透過一個類似這樣的語句來實現的:
Sql="Select * from 使用者表 where 姓名='"+name+"' and 密碼='"+password+"'"
其中name和password是存放使用者輸入的使用者名稱和口令,透過執行上述語句來驗證使用者和密碼是否合法有效。但是透過分析可以發現,上述語句卻存在著致命的漏洞。當我們在使用者名稱稱中輸入下面的字串時:111'or'1=1,然後口令隨便輸入,我們設為aaaa。變數代換後,sql語句就變成了下面的字串:
Sql="Select * from 使用者表 where 姓名='111'or'1=1' and 密碼='aaaa'
我們都知道select語句在判斷查詢條件時,遇到或(or)操作就會忽略下面的與(and)操作,而在上面的語句中1=1的值永遠為true,這意味著無論在密碼中輸入什麼值,均能透過上述的密碼驗證!這個問題的解決很簡單,方法也很多,最常用的是在執行驗證之前,對使用者輸入的使用者和密碼進行合法性判斷,不允許輸入單引號、等號等特殊字元。
上述問題雖然看起來簡單,但確實是存在的。例如在網際網路上很有名氣的網路遊戲"笑傲江湖"的早期版本就存在著這樣的問題,筆者也是在看了有關此遊戲的漏洞報告後才仔細分析了自己以前編寫的一些程式,竟然有不少也存在著這樣的漏洞。這確實應該引起我們的注意。這也暴露出包括筆者在內的年輕程式設計師在程式設計經驗和安全意識上的不足。同時也提醒我們程式設計工作者在程式設計時應當充分考慮程式的安全性,不可有半點馬虎,一個看似很小的疏漏可能就會造成很嚴重的後果。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-954234/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 精妙SQL語句 (轉)SQL
- Oracle 密碼驗證方式Oracle密碼
- 動態SQL語句 (轉)SQL
- 利用Dll實現通用密碼驗證框 (轉)密碼
- ORACLE 密碼驗證函式Oracle密碼函式
- ACCESS 密碼驗證/文字驗證中的小坑密碼
- Oracle SQL精妙SQL語句講解(轉)OracleSQL
- SQL語句優化(轉載)SQL優化
- TSM裡面的sql語句(轉)SQL
- SQL查詢語句使用 (轉)SQL
- SQL語句優化--十條經驗SQL優化
- SQL隱碼攻擊語句SQL
- Sybase及SQL Anywhere SQL語句小結(轉)SQL
- 無密碼驗證:客戶端密碼客戶端
- 自定義密碼驗證函式密碼函式
- orapwd建立密碼及驗證方法密碼
- Oracle 8i 密碼驗證Oracle密碼
- Oracle 行轉列的sql語句OracleSQL
- 【轉】經典SQL語句大全2SQL
- 【轉】經典SQL語句大全1SQL
- 轉:維護常用SQL語句收集!SQL
- 利用SQL語句完成位操作 (轉)SQL
- SQL查詢語句精華文章(轉)SQL
- 簡單SQL語句小結(轉)SQL
- SQL語句SQL
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- 用Perl來管理Apache驗證身份時所用的密碼(轉)Apache密碼
- 強密碼驗證正規表示式密碼
- 賬戶、密碼格式···正則驗證密碼
- oracle 開啟複雜密碼驗證Oracle密碼
- ORACLE密碼錯誤驗證延遲Oracle密碼
- oracle本地驗證和密碼檔案Oracle密碼
- 【轉】LINQ to SQL語句(1)之WhereSQL
- SQL語句優化方法30例(轉)SQL優化
- 轉貼:Oracle維護常用SQL語句OracleSQL
- oracle動態sql語句處理(轉)OracleSQL
- 用某語言API實現讓伺服器無密碼驗證API伺服器密碼
- mysql建表常用sql語句個人經驗分享MySql