java代碼安全排查 java排查問題

JAVA開發(fā)過程中需要注意那些問題?

開發(fā)過程需要注意的問題有下面這些:\x0d\x0a\x0d\x0a1. 服務(wù)器端必須提供輸入數(shù)據(jù)正確性的驗證,客戶端的Javascript驗證可以沒有。這是基于安全性的考慮,因為Javascript是很容易被繞過的,增加客戶端驗證只是為了減少服務(wù)器壓力、界面更加容易使用。 \x0d\x0a\x0d\x0a2. 適度使用Session,盡量不要在Session里放很大的集合對象,以免內(nèi)存消耗過大,因為很多用戶訪問的時候會產(chǎn)生很多的Session。參數(shù)傳遞應(yīng)該盡量通過Request。熟悉HTTP有助于更好的理解Session、Cookie、Request等的機(jī)制。\x0d\x0a\x0d\x0a3. 在帶有分頁的查詢界面,盡量不要使用POST方法來傳遞參數(shù),POST傳遞的參數(shù)在地址欄里是看不到的,刷新后會有重新提交表單的提示。使用GET方法傳遞參數(shù)要注意URL的長度不能超過1K。 \x0d\x0a\x0d\x0a4. 分層應(yīng)該清晰,一般目前我們分為View(Jsp或FreeMarker加上Action)、Bean(Service)、DAO這么三層,即顯示層、業(yè)務(wù)層、數(shù)據(jù)層。記錄集ResultSet這種只能出現(xiàn)在DAO層中的對象不能出現(xiàn)在Bean(Service)層中,同樣HttpServletRequest這種只能出現(xiàn)在View層的對象也不應(yīng)出現(xiàn)在Bean(Service)層中。這并不是絕對的。 \x0d\x0a\x0d\x0a5. 盡量使用簡單SQL,避免兩表以及多表聯(lián)查。多表聯(lián)查會導(dǎo)致數(shù)據(jù)庫壓力大幅增加,而且不利于在內(nèi)存中對部分記錄進(jìn)行緩存,代碼的重用性也難以提高。 \x0d\x0a\x0d\x0a6. 避免在循環(huán)里執(zhí)行findXXById這樣的方法,不如執(zhí)行一個findXXByIds這樣的方法一次性把記錄取到Map里。大部分有實際對象對應(yīng)的表應(yīng)該提供這樣一個方法。 \x0d\x0a\x0d\x0a7. 如果使用最原始的jdbc編程的話需要注意資源的正確釋放,在循環(huán)里new出來的Statement或者ResultSet就要在循環(huán)里關(guān)閉。 \x0d\x0a\x0d\x0a8. 在編寫SQL進(jìn)行查詢的時候,需要能夠判斷這個SQL是否已經(jīng)使用了索引,避免全表掃描,必要的時候增加索引。 \x0d\x0a\x0d\x0a9. 在寫一個方法前,首先查看有沒有相同功能或者很類似功能的方法已經(jīng)有了,尤其是工具類方法,往往已經(jīng)寫過了,避免重復(fù)代碼的產(chǎn)生,發(fā)現(xiàn)重復(fù)代碼及時進(jìn)行處理。如果一段代碼被重復(fù)使用兩遍或以上,那么可以考慮專門寫個方法來放這段代碼,同樣多次使用的常量也應(yīng)該專門定義出來。 \x0d\x0a\x0d\x0a10. 在一個方法里并不一定只能有一個return,如果已經(jīng)有結(jié)果了盡早return,沒必要增加嵌套的層次,那樣會導(dǎo)致代碼可讀性不佳,但也不能return太多,代碼看起來比較舒服就可以了。 \x0d\x0a\x0d\x0a11. 不要滿足于能夠熟練的編寫DAO和Bean(Service)的代碼,相比較而言,后臺如果在成熟框架的支持下,編碼是沒有太大難度的,也不值得沾沾自喜,因為這是對Java研發(fā)工程師基本的要求。適當(dāng)?shù)呐囵B(yǎng)一下前臺的編碼能力,學(xué)會使用Dreamweaver。不要輕視界面,也別認(rèn)為這是界面設(shè)計的事情,界面對用戶來說就是軟件,學(xué)會編寫CSS和調(diào)整界面對你沒有壞處。 \x0d\x0a\x0d\x0a12. 非常明確Java和javascript作用的范圍,明確它們能做的事情。 \x0d\x0a\x0d\x0a13. 一般很奇怪的現(xiàn)象都是由一些低級錯誤引起的,如果你查了一段時間也沒有結(jié)果,那么讓別人來查吧。 \x0d\x0a\x0d\x0a14. 不要用可能被修改的字段來做主鍵,那樣會讓相關(guān)記錄的更新成為一個大麻煩。 \x0d\x0a\x0d\x0a15. 如果被迫使用Hibernate和jdbc混合操作數(shù)據(jù)庫的話,不要用Hibernate來做復(fù)雜查詢和統(tǒng)計。Hibernate用的不好的話,帶來的便利是非常有限的。 \x0d\x0a\x0d\x0a16. 數(shù)據(jù)庫中經(jīng)常被讀取,但是很少修改的話,應(yīng)該把這樣的數(shù)據(jù)讀到內(nèi)存中用OSCache之類的緩存起來,然后定期或者觸發(fā)的去更新,有助于減少讀數(shù)據(jù)庫次數(shù),提升性能。 \x0d\x0a\x0d\x0a17. 編碼的時候應(yīng)該注意部署環(huán)境帶來的影響,這種影響包括操作系統(tǒng)不同帶來路徑的差異;應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器之間時間的差異;外網(wǎng)可能部署在多臺服務(wù)器上,放到Session里的對象因為需要復(fù)制所以要實現(xiàn)java.io.Serializable接口等。 \x0d\x0a\x0d\x0a18. 盡量不要在jsp上編寫太多代碼,保持jsp的整潔很重要,用Dreamweaver打開不至于一塌糊涂,根本看不出來這是個什么界面。 \x0d\x0a\x0d\x0a19. 目前我們的項目一般都使用Spring來管理數(shù)據(jù)庫事務(wù),而且一般都配置在Bean(Service)即業(yè)務(wù)層這一層,應(yīng)該注意要保持事務(wù)的完整性,不要把一些應(yīng)該放在一起的操作分散在Action這一層。相關(guān)的更新操作可以認(rèn)為是一個事務(wù),比如:增加一個家長,同時更新學(xué)生是否有家長的字段。 \x0d\x0a\x0d\x0a20. 在Spring的配置中,對于有些需要保持獨(dú)立事務(wù)的方法操作,比如生成主鍵等,應(yīng)該聲明該方法為獨(dú)立事務(wù)ROPAGATION_REQUIRES_NEW。Bean(Service)里如果拋出checked exception,事務(wù)默認(rèn)是不會回滾的,需要加以聲明,比如PROPAGATION_REQUIRED,-PassportException。 \x0d\x0a\x0d\x0a21. 在一個Bean(Service)中引用其他Bean(Service)的時候盡量引用Bean(Service),而不是DAO。因為其他的Bean(Service)往往封裝DAO的操作后,又做了進(jìn)一步的完善,比如增加校驗等,所以應(yīng)該重用這些方法,而不必要去引用DAO的方法來重寫這些操作。 \x0d\x0a\x0d\x0a22. 至少在Bean(Service)的接口定義上增加注釋,方便他人引用你寫的方法。 \x0d\x0a\x0d\x0a23. 好好利用集合框架里的Map、List、Set。尤其是HashMap、ArrayList、HashSet用的最多,這些類是多條數(shù)據(jù)操作的基礎(chǔ),它們都不是線程安全的。 \x0d\x0a\x0d\x0a24. 現(xiàn)在跑的快的頁面,隨著數(shù)據(jù)量的增加,可能會變的很慢,所以應(yīng)該意識到頁面可能變慢的原因,而不是現(xiàn)在看起來很快。影響速度的大部分原因是對數(shù)據(jù)庫的壓力太大了,在java代碼執(zhí)行上花費(fèi)很多時間的情況是不常見的。 \x0d\x0a\x0d\x0a25. 避免不必要的跳轉(zhuǎn),如果頁面執(zhí)行的足夠快,那么中間的載入進(jìn)度提示頁是不必要的,那樣會讓用戶覺得閃爍。 \x0d\x0a\x0d\x0a26. 注意頁面的文件大小,并不是每個用戶的帶寬都是非常理想的,文件小一點,速度快一點,總是感覺更好一點。 \x0d\x0a\x0d\x0a27. 不要去修改用戶的瀏覽器,比如隱藏他們的地址欄、菜單、右鍵菜單等,這可能會引起部分用戶的反感。盡量不要使用彈出窗口,可能會被攔截。 \x0d\x0a\x0d\x0a28. 網(wǎng)站的權(quán)限控制至少應(yīng)該保證有訪問權(quán)限的用戶才能訪問頁面,通過隱藏鏈接之類的方法是很不安全的,用戶看不見了并不表示安全了。權(quán)限的控制盡量使用框架里的攔截器這樣的機(jī)制,而不是把權(quán)限控制代碼寫的到處都是。過濾器不宜過多的使用,不僅因為過濾器的作用范圍很難控制,而且容易引起頁面執(zhí)行效果的混亂,錯誤不易排查。 \x0d\x0a\x0d\x0a29. 頁面里大部分情況使用相對路徑,保持Action路徑層次和頁面一致,這樣應(yīng)用就可以發(fā)布在各種目錄下。

在淄博等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作定制設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,營銷型網(wǎng)站建設(shè),外貿(mào)營銷網(wǎng)站建設(shè),淄博網(wǎng)站建設(shè)費(fèi)用合理。

java 錯誤排查

倒數(shù)第四行,編譯錯誤,你的對象在try中定義,但是在try外關(guān)閉

另外,關(guān)于提問題的建議,最好說明了問題在哪兒,不要嘗試讓別人猜測你的問題

java內(nèi)存溢出的問題如何排查

java程序大家都知道,內(nèi)存溢出是經(jīng)常見的錯誤,下面從基本的開始分析!

內(nèi)存溢出是由于沒被引用的對象(垃圾)過多造成JVM沒有及時回收,造成的內(nèi)存溢出。如果出現(xiàn)這種現(xiàn)象可行代碼排查:

一)是否App中的類中和引用變量過多使用了Static修飾 如public staitc Student s;在類中的屬性中使用 static修飾的最好只用基本類型或字符串。如public static int i = 0; //public static String str;

二)是否App中使用了大量的遞歸或無限遞歸(遞歸中用到了大量的建新的對象)

三)是否App中使用了大量循環(huán)或死循環(huán)(循環(huán)中用到了大量的新建的對象)

四)檢查App中是否使用了向數(shù)據(jù)庫查詢所有記錄的方法。即一次性全部查詢的方法,如果數(shù)據(jù)量超過10萬多條了,就可能會造成內(nèi)存溢出。所以在查詢時應(yīng)采用“分頁查詢”。

五)檢查是否有數(shù)組,List,Map中存放的是對象的引用而不是對象,因為這些引用會讓對應(yīng)的對象不能被釋放。會大量存儲在內(nèi)存中。

六)檢查是否使用了“非字面量字符串進(jìn)行+”的操作。因為String類的內(nèi)容是不可變的,每次運(yùn)行"+"就會產(chǎn)生新的對象,如果過多會造成新String對象過多,從而導(dǎo)致JVM沒有及時回收而出現(xiàn)內(nèi)存溢出。

如String s1 = "My name";

String s2 = "is";

String s3 = "xuwei";

String str = s1 + s2 + s3 +.........;這是會容易造成內(nèi)存溢出的

但是String str = "My name" + " is " + " xuwei" + " nice " + " to " + " meet you"; //但是這種就不會造成內(nèi)存溢出。因為這是”字面量字符串“,在運(yùn)行"+"時就會在編譯期間運(yùn)行好。不會按照J(rèn)VM來執(zhí)行的。

在使用String,StringBuffer,StringBuilder時,如果是字面量字符串進(jìn)行"+"時,應(yīng)選用String性能更好;如果是String類進(jìn)行"+"時,在不考慮線程安全時,應(yīng)選用StringBuilder性能更好。

知道原因了,解決起來就非常簡單了。

如何排查Java內(nèi)存泄露

安裝jdk后,bin目錄下面會有個工具叫jvisualvm可以用來監(jiān)控內(nèi)存,也可以安裝插件擴(kuò)展功能

我的目錄是c:/Program Files/Java/jdk1.7.0/bin

文章名稱:java代碼安全排查 java排查問題
網(wǎng)頁地址:http://bm7419.com/article6/ddegiig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)微信公眾號、軟件開發(fā)網(wǎng)站導(dǎo)航、做網(wǎng)站用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)