資料隱碼(SQL Injection),這早該絕跡的古董級 bug ,到現在我還是很容易在一些網頁程式上看到(默~
或許那位 Programer 覺得人性本善,所以不會有人去找這種小漏洞
但事實是,現在還是有人看到網頁會不自禁的用個 ' 去測試一下那個的程式有沒有這古董級的 Bug 存在
都已經到了 .Net 設計時代了,遇到資料庫有關的就乖乖用 OleDbParameter 或 SqlParameter 不是很好
為了省這幾個字,然後用字串串接的方式,開發效率沒快到哪去,但 bug 卻大把大把的留下...
就算真的愛用字串串接,想把一切掌握在手裡,那也把危險字元取代掉吧(沒錯,就像 php 使用的 addslashes 函數一樣)
以下舉些 SQL Injection 的例子
ASP.Net 的驗證程式
這時如果使用者在 Account 輸入
' or 1=1 --
組出來的 SQL 式可能就變
Select * From Users Where Account='' or 1=1 -- and Password=''
因為 -- 是 SQL Server 的註解符號,所以會跳過後面 Password 的驗證
但實際測試則是 -- 在 Access 資料庫並不適用,所以我改利用
Account 輸入隨便
Password 輸入 ' or ''='
SQL 式組出來如下
Select * From Users Where Account='' and Password='' or ''
類似這樣能取出一些資料,當然,組合方式很多,但簡單來說就是一種 SQL 的填空遊戲
留言列表