熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL語言 >> 正文

Sql語句密碼驗證的安全漏洞

2013-11-13 12:39:31  來源: SQL語言 

  Sql語句作為國際標准的數據庫查詢語句在各種編程環境中得到了廣泛的應用作為一個成熟穩定的系統用戶登陸和密碼驗證是必不可少的筆者在平時的編程工作中發現許多程序員在用sql語句進行用戶密碼驗證時是通過一個類似這樣的語句來實現的

  Sql=Select * from 用戶表 where 姓名=+name+ and 密碼=+password+

  其中name和password是存放用戶輸入的用戶名和口令通過執行上述語句來驗證用戶和密碼是否合法有效但是通過分析可以發現上述語句卻存在著致命的漏洞當我們在用戶名稱中輸入下面的字符串時or=然後口令隨便輸入我們設為aaaa變量代換後sql語句就變成了下面的字符串

  Sql=Select * from 用戶表 where 姓名=or= and 密碼=aaaa

  我們都知道select語句在判斷查詢條件時遇到或(or)操作就會忽略下面的與(and)操作而在上面的語句中=的值永遠為true這意味著無論在密碼中輸入什麼值均能通過上述的密碼驗證!這個問題的解決很簡單方法也很多最常用的是在執行驗證之前對用戶輸入的用戶和密碼進行合法性判斷不允許輸入單引號等號等特殊字符

  上述問題雖然看起來簡單但確實是存在的例如在互聯網上很有名氣的網絡游戲笑傲江湖的早期版本就存在著這樣的問題筆者也是在看了有關此游戲的漏洞報告後才仔細分析了自己以前編寫的一些程序竟然有不少也存在著這樣的漏洞這確實應該引起我們的注意這也暴露出包括筆者在內的年輕程序員在編程經驗和安全意識上的不足同時也提醒我們編程工作者在程序設計時應當充分考慮程序的安全性不可有半點馬虎一個看似很小的疏漏可能就會造成很嚴重的後果


From:http://tw.wingwit.com/Article/program/SQL/201311/16325.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.