java在web開發安全性方面的總結

1.       客戶輸入的原始數據進行校驗不依賴於Script。雖然JavaScript等等的客戶端的輸入數據的校驗即使比較方便也不能使用因爲安全性方面的原因。腳本是不安全的,用戶可能屏蔽腳本,我們可以將用戶數據送入服務器端,在服務器上驗證字符串的合法性。

2.       HTML的輸入標識符中去除所有輸入的尖括號'<' ' >'

3.       HTML埋進數據的時候有一定HTML編碼('<' '>' '' '"' ' ' ' '<' '>' '是μ"' ' &39'的換每隔)了。(2)(3)由cross-site scriptingcss)引起的,解決方法是避免腳本符號的出現。

 URLで許可される文字

 英數字「;」「/」「?」「:」「@」「&」「=」「+」「$」「,」「-」「_」「.」「!」「~」「*」「'」「(」「)」「%

4.       需要保護的全部的網頁要有用戶認證機構。

登入後,把userID保存下來在SESSION中,在每個需要保護的頁面追加腳本進行驗證,如果session空,則驗證失敗,從新登陸。

<%

If Len(Session("ID")) = 0 Then

Response.Redirect "index.html"

End If

%>

下列信息做特殊處理:

*密碼

*Web郵件的郵件內容等等的個人用數據

*名字 年齡、住所的個人信息

*Web應用系統內部的數據構造

*Web服務器內部的最大限度定期票等等的各種系統信息   

[1-3.]

5.       事前可以推斷的sessionID不能定義, [1-3.]

6.       關鍵的重要的數據參數發送時不要出現在URL

利用post傳遞參數。並且對策:

*根據SSL的密碼化通信

*干擾策略。

*對話期間劫機對策

7.       hidden字段的數據不能修改傳遞(hidden的值不能被顯示,但是會被傳遞並且在html源文件中可以查看值,防止其值被修改並傳遞)不要用hidden去取數據,改善方法是可以利用session來保存hidden數據 [1-5.]

8.       WWW 瀏覽器被髮送了的<SELECT> <OPTION>項的值,radio項的值,checkbox項的值都要進行校驗,對於上述控件提交上來的數據開數據庫查詢是否合法。 [1-6.]

9.       SQL的時候與變量結合寫。要先check再提交(對用戶提交的變量在放入SQL文之前先過濾) →[2-1.

10.   組裝SQL的時候輸入數據的 (')和分號 ( ; ) 要進行處理。原因同9 →[2-1.

11.   不要在腳本中嵌入數據庫的密碼。關於敏感數據的設置,可以設置在配置文件中,windows可以設置在註冊表中。 →[2-2.

12.   存取數據庫時用戶的權限分開設置。不同的用戶權限是不同的,可以藉助數據庫的權限設置來實現,這樣有利於安全性的提高。 →[2-3.

13.   JAVA類包的導入。只導入需要的類,不使用的包和類不要導入,這樣做有利於提高安全性,防止他人利用多餘的類取得信息,尤其是幾個敏感的類包 →[3-1.

14.   利用安全政策文件(policy)設定來控制文件的運行權限。

文件路徑:${java.home}/lib/security/java.policy

package org.penglee.policy.test;

//permission java.io.FilePermission "c://winnt//system32//notepad.exe", "execute";

import java.io.IOException;

 

public class NoSecurityManager {

         public static void main(String[] args) {

//                     SecurityManager mySecurityManager = new SecurityManager ();

//                     System.setSecurityManager (mySecurityManager);

                       try {

                                     Runtime myRuntime = Runtime.getRuntime ();

                                     myRuntime.exec ("c://winnt//system32//notepad.exe");

                       } catch (IOException e) {

                                     e.printStackTrace();

                       }

         }

}

→[3-1.

15.   設置爲私有類(private)來加以限制類中數據的修改,或者定義接口來實現。 →[3-2.

16.   程序序列化後的數據是沒有加密的,防止利用序列化後的數據讀取敏感數據,可以利用transient來處理序列化的數據。→[3-3.

17.   除明顯地需要繼承的類之外一律使用final類。這樣可以防止利用繼承來獲取敏感信息。→[3-4.

18.   利用AssertionError來拋錯。詳細參考該類的api文檔→[3-5.

19.   注意線程同步產生的數據不一致問題,增加數據的安全性。→[3-6.

20.   輸入中避免含有相對相對路徑。含有相對路徑時報錯。原因可能導致兄弟文件夾被訪問。→[4-1.

 

26. 極力避免明文密碼。敏感數據最好要加密,建議使用sha加密→[9-1.

27. 用sha加密。→[9-1.

28.29.利用程序檢驗路徑(防止相對路徑)檢查文件名以及數據的安全性,含有特殊字符報錯。→[9-2.

30.31 爲了不讓教多了十分小心地正在做登錄時的錯誤信息弄錯什麼了。面向用戶的錯誤信息不應該給的太足,以免用戶由此推斷出程序的內部結構的相關信息。→[9-3.

32. 儘量小做需要特權的使用的數據處理的部分、 極力避開一般的數據處理用特權流行被實行了。使用權限較小的用戶名來登錄,儘量避開用特殊權限來處理一般數據。→[9-4.

 

CSS—“cross-site scripting”

 

有不解的地方可以回電郵給我:[email protected]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章