Java編碼指南 編寫安全可靠程式的75條建議 Java编码指南:编写安全可靠程序的75条建议(异步图书)

弗雷德·朗(Fred Long)德魯·莫欣達(Dhruv Mohindra)羅伯特 C.西科德(Robert C. Seacord)迪恩 F.薩瑟蘭(Dean F. Sutherland)

買這商品的人也買了...

商品描述

<內容簡介>

 

《Java編碼指南編寫安全可靠程序的75條建議》是《Java安全編碼標準》一書的擴展,書中把那些不必列入Java安全編碼標準但是同樣會導致系統不可靠或不安全的Java編碼實踐整理了出來,並為這些糟糕的實踐提供了相應的文檔和警告,以及合規解決方案。讀者可以將本書作為Java安全方面的工具書,根據自己的需要,找到自己感興趣的規則進行閱讀和理解,或者在實際開發中遇到安全問題時,根據書中列出的大致分類對規則進行索引和閱讀,也可以通讀全書的所有規則,系統地瞭解Java安全規則,增強對Java安全特性、語言使用、運行環境特性的理解。

 

<作者簡介>

 

Fred Long英國Aberystwyth大學計算機科學系的高級講師,自1992年起一直擔任軟件工程研究所(Software Engineering Institute)的客座科學家。Dhruv Mohindra印度Persistent Systems有限公司安全實踐小組的技術領導,為金融、電信、健康領域的很多公司提供諮詢服務。Robert C. Seacord出版過多本軟件安全與軟件工程方面的書籍,是CERT安全編碼倡議小組的技術經理,另外他還在卡內基-梅隆大學教計算機科學。Dean F. Sutherland CERT高級軟件安全工程師,之前是Tartan公司技術組的高級成員,他在Tartan公司主要負責開發優化編譯器。David Svoboda CERT軟件安全工程師,是多個CMU項目的主要開發者。譯者簡介譯者簡介劉先寧ThoughtWorks高級諮詢師,長期從事一線軟件開發工作,對Java、面向對象、敏捷方法論都有較深理解。其譯作還包括《HTML5移動Web開發實戰》。尤青松ThoughtWorks諮詢師,在敏捷軟件交付團隊中擔任技術領導人,尤其對Java企業軟件開發及其安全編程有較深理解。

 

<目錄>

 

目錄

第1章安全1 

指南1:限制敏感數據的生命週期1 

指南2:不要在客戶端存儲未經加密的敏感數據5 

指南3:為敏感可變類提供不可修改的包裝器10 

指南4:確保安全敏感方法被調用時參數經過驗證12 

指南5:防止任意文件上傳14 

指南6:正確地編碼或轉義輸出17 

指南7:防止代碼註入22 

指南8:防止XPath註入25 

指南9:防止LDAP註入30 

指南10:不要使用clone()方法來複製不可信的方法參數34 

指南11:不要使用Object.equals()來比較密鑰37 

指南12:不要使用不安全的弱加密算法39 

指南13:使用散列函數存儲密碼41 

指南14:確保SecureRandom正確地選擇隨機數種子46 

指南15:不要依賴可以被不可信代碼覆蓋的方法47 

指南16:避免授予過多特權55 

指南17:最小化特權代碼59 

指南18:不要將使用降低安全性檢查的方法暴露給不可信代碼61 

指南19:對細粒度的安全定義自定義安全權限70 

指南20:使用安全管理器創建一個安全的沙盒74 

指南21:不要讓不可信代碼誤用回調方法的特權78 

第2章防禦式編程85 

指南22:最小化變量的作用域85 

指南23:最小化@SuppressWarnings註解的作用域88 

指南24:最小化類及其成員的可訪問性91 

指南25:文檔化代碼的線程安全性96 

指南26:為方法的結果值提供反饋103 

指南27:使用多個文件屬性識別文件106 

指南28:不要賦予枚舉常量的序號任何特殊意義114 

指南29:註意數字提升行為116 

指南30:對可變參數的類型做編譯時類型檢查121 

指南31:不要把其值在以後版本里可能會發生變化的常量設置為public final 124 

指南32:避免包之間的循環依賴127 

指南33:使用用戶自定義的異常而非寬泛的異常類型130 

指南34:盡量從系統錯誤中優雅恢復133 

指南35:發布接口前請謹慎設計135 

指南36:編寫對垃圾收集機制友好的代碼138 

第3章可靠性142 

指南37:不要在子作用域裡遮蔽或者掩蓋標識符142 

指南38:不要在一個聲明裡聲明多個變量145 

指南39:在程序邏輯中用有意義的符號常量代表文字值148 

指南40:在常量定義中恰當地表示相互之間的關係153 

指南41:對於返回數組或者集合的方法,用返回一個空數組或者集合來替代返回一個空值154 

指南42:只在異常的情況下使用異常157 

指南43:轉義245 

指南72:不要使用重載的方法來區分運行時類型248 

指南73:不要弄混引用的不可變性和對象的不可變性251 

指南74:謹慎使用序列化方法writeUnshared()和readUnshared() 257 

指南75:不要試圖通過把