系統(tǒng)越做越大,問題越來越多,有些徹底解決了,有些湊合解決了,有些還沒有辦法,現(xiàn)在把碰到的主要問題列出來,給大家前車之覆:
1? 跨瀏覽器布局的問題: 由于瀏覽器之間的微小差距,在布局復雜的頁面時將會碰到麻煩
?? 我現(xiàn)在的項目就要求firefox 和ie. 由于ie一些著名的bug,有時候不小心就踩到地雷。
2? 日期控件
?? 如何實現(xiàn)跨瀏覽器的日期控件,如何設定缺省值,如何實現(xiàn)大范圍的日期直接定位?如何自適應多區(qū)域格式問題?
?我也用過不少現(xiàn)成的東西,比如 http://www.mattkruse.com/javascript/calendarpopup/
? 但都有或多或少的問題
3、分辨率
? 如何支持常見分辨率,例如800*600 ,1024*768,1280*1024?表格和層如何自適應?
? 有些客戶喜歡居左居中,有些內(nèi)容超寬,有些超寬內(nèi)容還在容器里,有些還要疊加,把這些混在一起麻煩就來了
4、防止SQL注入式攻擊
? 參數(shù)使用占位符,這個算是基本解決了,只是有些擔心數(shù)據(jù)庫的效率。
5.防止腳本攻擊。? 有時候需要在頁面允許部分html或javascript代碼, 如顯示多行文本。
? html 轉(zhuǎn)義我知道,但我要允許部分html代碼起作用,比如我要讓
起作用,其他不起作用,以實現(xiàn)多行文本
6、用戶非授權(quán)頁面訪問
? 如何實現(xiàn)每個頁面的安全驗證,如何防止用戶通過直接拷貝具體頁面地址等方式,訪問系統(tǒng);? 包括沒有鏈接的某些頁面和jsp 頁面。 如何控制部分權(quán)限,最小控制單元是什么?
?看上去很簡單,但一深思問題就來了,
每個頁面的安全驗證:動態(tài)頁面一般是 URL + Query String
URL數(shù)量有限,但Query String一般以id為參數(shù),有許多,所以如以URL為基礎驗證,則有時候
粒度不夠細,如加上Query String,則不能再以配置表為基礎校驗,因為Query String乘以
用戶數(shù)量(或角色數(shù)量,將是一個天文數(shù)字),所以如何建立安全驗證規(guī)則表又是一個頭疼的
問題,每個系統(tǒng)的安全驗證規(guī)則都不一樣。
再深入,你會發(fā)現(xiàn)如果一個操作被分成幾個步驟,此時,這幾個步驟的頁面必須是相同的權(quán)限
設置,否則用戶操作到一半,告訴他沒有權(quán)限,他會被氣死的。
如果再細化粒度,頁面某些元素能夠被部分用戶修改和看見,你的頭開始疼了嗎?
7、重復提交問題
?功能操作完成后,鼠標右鍵點擊所在頁面,選擇彈出菜單的刷新功能,容易出現(xiàn)重復提交問題。功能操作完成后,通過瀏覽器的后退鍵進行重復操作,容易出現(xiàn)重復提交問題。? URL沒有重定向,刷新頁面出現(xiàn)重復提交問題。某功能鍵反應時間延遲時,在短時間內(nèi)重復點擊該功能鍵,容易出現(xiàn)重復提交問題;
?某些用戶習慣雙擊按鈕,某些用戶錯誤地點了兩次按鈕,某些鼠標出現(xiàn)故障,導致單擊變成雙擊,結(jié)果發(fā)生重復提交。
如果不加處理,這些請求都會被服務器處理,從而導致錯誤的結(jié)果。
struts的token確實能解決問題,但用戶老是向我抱怨,為什么我不
能用瀏覽器的回退按鈕重新提交,我在其他網(wǎng)站上從沒有這個問題,你如何解釋?
然后你還會發(fā)現(xiàn)部分操作是能夠允許重復提交的。
8.如何鎖定資源如記錄:這是一個老大難問題了,為此還搞了不少東西出來。用 關鍵詞 隔離級別 臟 鎖定 去搜搜,就會發(fā)現(xiàn),要解決這個問題是有方法的,但代價你愿意承擔嗎?開發(fā)代價,性能代價,可用性代價
9,如何防止瀏覽器記住數(shù)據(jù),某些瀏覽器能夠為每一個URL記住用戶輸入的數(shù)據(jù),在某些情況下是危險的。比如我修改了某些數(shù)據(jù),但由于某些原因我想刷新,此時數(shù)據(jù)已經(jīng)被其他用戶修改,但在瀏覽器里面你看到的是你修改的數(shù)據(jù)(你用刷新按鈕也不能看到新數(shù)據(jù))。如果你再次保存,你認為你沒有修改數(shù)據(jù),但數(shù)據(jù)已經(jīng)被修改了。當頁面是腳本動態(tài)生成的時候,這個問題更嚴重。常發(fā)生在firefox等瀏覽器上。
10,如何防止或偵測客戶修改瀏覽器設置,比如客戶在打開頁面之后關閉腳本功能。
有時候甚至不是用戶禁止腳本,而是么某些軟件和插件,病毒甚至企業(yè)文化影響到用戶設置。
11,回退問題,對于工作流熟悉的人對這個問題很清楚,某個操作節(jié)點如何回到啟動點,如何回到上一節(jié)點,如何避免硬編碼? 比如一個頁面被兩個操作流所共享,此時安全驗證是個問題,回退也許要仔細考慮。
12,校驗問題,如何同時實現(xiàn)客戶端和服務器端校驗,客戶端調(diào)用服務器端的校驗功能。
我已經(jīng)在使用struts自帶的apache commons validator,可是我不得不修改許多地方才能
用起來。比如我有些隱藏字段需要校驗。但commons validator居然使用focus語句,導致出錯。
這是小的bug,但更麻煩的是部分服務器端的校驗沒有辦法在客戶端實現(xiàn)。比如validwhen
又如,某些校驗需要查詢數(shù)據(jù)庫,所以我想要的校驗應該是能夠被ajax 調(diào)用,這樣
校驗在客戶端和服務器端完全一樣,但這樣客戶端校驗還有必要嗎,我們原來用客戶端校驗
是看中他的校驗響應快,不給服務器加負擔。所以我又迷茫了。
13,如何防止數(shù)據(jù)偽造,如何防止客戶使用特殊工具和技術(shù)偽造數(shù)據(jù)提交到服務器。
瀏覽器發(fā)送的數(shù)據(jù)都是遵循公開的標準,嗅探器等黑客工具可以隨便地修改你的數(shù)據(jù),
還有一些神奇的瀏覽器插件可以任意修改數(shù)據(jù)。就算ssl也只能保障中間傳輸,客戶端無法控制。你還認為你的隱藏字段是安全的嗎?你還認為你的select只有那幾個選項嗎?
14, 如何追蹤定位錯誤,如何處理異常?
?? 在一個運行的系統(tǒng)里,你如何知道哪個數(shù)據(jù)產(chǎn)生了這個錯誤?多個用戶的日志絞纏在一起如何組織?
15,如何在兩個操作之間傳遞大量數(shù)據(jù),尤其是非存儲數(shù)據(jù)。比如分頁數(shù)據(jù)(按什么列排序的第幾頁,過濾條件)一般是不存儲到數(shù)據(jù)庫的,但在某些時候必須傳遞到下一個頁面,session 也不是最終解決方案。
16, 帶安全控制的斷點續(xù)傳的上載 和下載甚至服務器端恐怕也要裝點什么,這個可是許多企業(yè)的忌諱
17,分布式環(huán)境的特殊處理,
18,如何提高開發(fā)效率?