很簡單就可以實作破解,而且只要是登入系統都有可能有這類問題。
但也是很簡單就可以預防的。
我就嘗試了...幾個網站,目前是除了pixnet和天空,或是自行架設的wordpress沒有這個問題,其它都有。
- W BSP的加入好友
- R BSP的 刪除文章
- X BSP的刪除部落格
- .....
(此篇文章公開發布前,已先知會上述部落格請求修正)
程式範例
一般登入的實作,是用SESSION來判斷使用者是否登入。
$_SESSION['id']='girvan'
再查看SESSION裡面是否有值
那使用者要作任何的操作時,都要先判斷是否有登入,才能執行下一步,比如說發文... (先簡稱下面這個為「頁面A」)
--
這段code有什麼樣的問題呢?想想看吧! 如果我把save_post的函數,換成delete_post,那您可以想想看,這隻程式有多重要?
這段程式有什麼漏洞呢?
這個「頁面A」的執行的必要條件是...
- 已登入
- 傳進需要的參數 (通常是form,帶著某些POST的值)
但是有可能這個頁面,未必是使用者親自執行的。 使用者有可能是透過駭客的留言「連結」,連到惡意的頁面。 然後這個惡意的頁面,「幫」使用者送出必要的參數。 雖然駭客無法知道登入的SESSION是什麼,但是駭客知道所有的參數。 實際一點的例子就是,在使用者在無名小站中如果是登入的狀態下,只要跑到我的頁面,我就自動幫他post一個form回無名小站,該使用者就會將我加入好友。
解決方案1:
在系統中,寫了一個function --
然後預防方法就這麼做...
--
解決方案2:
這是pixnet的方法,它在每一個操作中,都加了hidden的sToken,只要sToken不正確就會出錯,儘管使用者不小心把referer關掉,也不會出問題。(不過使用者把referer關掉,也不能逛很多相簿的網站吧!)
結論
這是從雞蛋裡面挑骨頭,但這就是安全性的問題。如果在使用者登入的情況下,我可以輕易的將使用者騙到我的頁面中,再對使用者做些什麼事情。只要彎彎在登入的情況下,到我設計的頁面,她就會自動加我為好友!或者是刪除使用者的部落格!或是刪除使用者的所有文章。請各BSP先行修正,謝謝。