百無聊賴的看完後﹐隨便點了一下左邊的"員工基本信息查詢"菜單﹐頁面的數據顯示區域顯示"您無權限查看此頁"﹐本想退出﹐但發現頁面的查詢條件輸入區域存在﹐而且查詢按鈕只是灰掉而已﹐在查看原始碼後﹐抱著試一下的心態﹐我在浏覽器的地址欄輸入一句JS腳本(Javascript:alert(document.all['querybtn'].disabled=false))使查詢按鈕啟用﹐然後單擊它﹐居然真的把資料給查了出來。隨後又打開這個系統的其它菜單﹐發現都是把動作按鈕給disable掉來管理權限(當然那天我也沒做什麼壞事﹐只是看了一下自己和同組人員的級別和工資而已﹕)﹐由於其它一些原因﹐幾天後我就換了另一家公司)
那是一家比較大的港資企業﹐用web也開發了諸如ERP等幾個大型系統﹐按道理來說﹐這樣的低級失誤應該不會出現﹐然而在我做web開發的這幾年中﹐碰到的像這樣的例子還有很多﹐例如只是通過頁面按鈕的隱藏和顯示或者通過菜單的隱藏顯示等來管理權限。這些系統對於一個有web開發經驗的人來說﹐其安全形同虛設。
當然任何安全都不是絕對的﹐尤其在開放的web上更是如此。但我認為對於一個web應用程序來說﹐其安全標准至少應該是﹕
如果讓自己(一個有經驗的web開發人員)來攻擊這個系統﹐不能做到。
關於web應用程序的安全我想提出這幾個問題﹕
1.您的web應用程序的安全模塊是否與系統本身的業務交雜在一起﹐以至於每次在開發新的系統時都要考慮安全問題。
2.您的安全管控的依據是什麼﹐是否依賴於客戶端(JS,dHtml,url隱藏,request信息)?
3.您的web應用程序安全模塊是否易於擴展﹐以便在新的情況出現時(如web service﹐AJax自動產生的URL請求)﹐依然能夠輕松應付。
對於這幾個問題﹐我的回答如下﹕
1.web應用程序的安全模塊應該獨立於系統本身﹐也就是說任何的web應用程序在開發的時候都不需要考慮安全問題。例如編寫有關用戶是否已經
認證﹐是否已經授權等代碼在程序中。它應該只是一個組件﹐經過簡單的配置就可以讓系統有靈活的安全管控機制。
2.web應用程序的安全不應該依賴於客戶端的請求信息﹐對於我們來說﹐唯一相信的只有那個request的path(因為我們是將它執行並交給客戶端)﹐
對於像浏覽器版本﹐querystring﹐body,headers等等都是不可靠的﹐不能做為認證依據。
3.web應用程序的安全模塊應該是可以被擴展的﹐即在一套統一的架構下﹐經過擴展﹐能夠應付新的情況。
接下來我會把我在web應用程序安全設計的一些經驗﹐想法和大家分享﹐希望能夠得到更多人的意見。