Java 安全開發(fā)

Java Security Develop

1. 拒絕服務(wù) DDOS


xml外部實體攻擊(阻塞)

  1. 定義白名單
  2. 自定義 EntityResolver 接口
  3. 過濾 systemID

文件資源釋放:

final InputStream in = new FileInputStream(file);
try {
    use (in);
} finally {
    {} in.close();
}

數(shù)據(jù)庫資源釋放

connection给涕,statement相种,resultset
注意實現(xiàn)方法:配置實現(xiàn)/編碼實現(xiàn)

2. 敏感信息


  1. 避免直接輸出異常信息

     try {
         excute(Exception e) {
             e.printStackTrace();
         }
     }
    
  2. 避免日志輸出 sensitive info

     if (loginSuccessful) {
         logger.save("User.."+name+...)
     }
    

3. 注入問題


  1. 使用函數(shù)對外部輸入標(biāo)準(zhǔn)化

     // Nomalize
     s = Normalizer.normalize(s, Form.NFKC);
    
     // Validate (declare or make legally valid)
     Pattern pattern = Pattern.compile("[<>]");
     Matcher matcher = pattern.mattcher(s);
     if (matcher.find()) {
         // Found black listed tag
         throw new IllegalStateException();
     }
    
  2. 動態(tài)SQL

參數(shù)化查詢
PreparedStatement prep = conn.prepareStatement("SELECT * FROM USERS WHERE PASSWORD = ?");
prep.setString(1, pwd);
過濾敏感字符

前端過濾 服務(wù)器端過濾
'|and|exec|insert|select|delete|upadte|count|* |'

  1. XML 注入問題

XSD約束,過濾敏感字符

  1. Xpath注入

  2. 命令行注入

Runtime.exec() 過濾凳宙,白名單 繞過不使用runtime.exec(),使用api來 ls/dir

  1. 正則表達(dá)式注入

4. 可訪問性和擴(kuò)展性


  1. 限制類狂巢,接口阎曹,方法和字段的可訪問
  2. 包的訪問權(quán)限昙衅,防止反射
  3. Final類和方法度帮。不允許擴(kuò)展類和方法聲明final

5. 序列化和反序列化 Transient


在包含系統(tǒng)資源的直接句柄和相對地址空間信息的字段前使用 transient 關(guān)鍵字歼捏。
如果資源,如文件句柄不聲明為transient笨篷,該對象在序列化狀態(tài)下可能被修改瞳秽,從而使反序列化獲取對資源的不當(dāng)訪問。
敏感資源加密后再序列化率翅。

6. 編碼問題


  1. 調(diào)用方法的返回值(錯誤示范)
    public void deleteFile() {
    File someFile = new File("someFileName.txt")
    // do something with some File
    someFile.delete();
    }
    正確示范:

         public void deleteFile() {
             File some...;
             if (!someFile.delete()){
             // handle faiure to delete the file
             }
         }
    
  2. 空指針引用

NullPointerException 判斷是否為空

  1. 整數(shù)溢出

向上類型轉(zhuǎn)換练俐,使用BigInteger

  1. == 與 equals

類型,地址的比較的不同
在比較對象時冕臭,未明確實現(xiàn)equals的類會導(dǎo)致繼承java.lang.Object的equal
而Object.equals()將比較兩個對象實例而不是對象成員腺晾,所以equals方法要盡量重寫

  1. 返回數(shù)組問題

安全代碼

    public class XXX {
        private String[] xxx;
        public String[] getXXX() {
            String temp[] = Arrays.copyof(...);
            return temp;
        }
    }
  1. 讀取字節(jié)/符流

使用int類型的返回值燕锥,防止byte中255補(bǔ)碼為-1中止

安全代碼

     FileInputStream in;
     // initialize stream
     int inbuff;
     byte data;
     while((inbuff=in.read()) !=-1) {
         data=(byte)inbuff;
         // ...
     }

     FileReader in;
     //initialize stream
     int inbuff;
     char data;
     while((inbuff=in.read() !=-1)) {
         data=(char)inbuff;
         // ...
     }
  1. 本地方法調(diào)用安全

載入時傳入?yún)?shù)檢查,防止java平臺之外的問題

  1. Double解析問題

java.lang.Double.parseDouble() 6.0版本以下的漏洞

7. 第三方組件安全問題


測試 加固 更新

8. 程序設(shè)計與檢測


  1. 程序僅僅實現(xiàn)指定功能
  2. 永不信任用戶輸入
  3. 必須考慮異常情況并處理
  4. 不在error之后繼續(xù)執(zhí)行
  5. 盡可能的使用安全函數(shù)
  6. 使用源碼檢測產(chǎn)品
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悯蝉,一起剝皮案震驚了整個濱河市归形,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泉粉,老刑警劉巖连霉,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嗡靡,居然都是意外死亡跺撼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門讨彼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歉井,“玉大人,你說我怎么就攤上這事哈误×ㄖ粒” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵蜜自,是天一觀的道長菩貌。 經(jīng)常有香客問我,道長重荠,這世上最難降的妖魔是什么箭阶? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮戈鲁,結(jié)果婚禮上仇参,老公的妹妹穿的比我還像新娘。我一直安慰自己婆殿,他們只是感情好诈乒,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著婆芦,像睡著了一般怕磨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上消约,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天癌压,我揣著相機(jī)與錄音,去河邊找鬼荆陆。 笑死滩届,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播帜消,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼棠枉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了泡挺?” 一聲冷哼從身側(cè)響起辈讶,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娄猫,沒想到半個月后贱除,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡媳溺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年月幌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悬蔽。...
    茶點(diǎn)故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡扯躺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝎困,到底是詐尸還是另有隱情录语,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布禾乘,位于F島的核電站澎埠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏始藕。R本人自食惡果不足惜蒲稳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鳄虱。 院中可真熱鬧,春花似錦凭峡、人聲如沸拙已。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽倍踪。三九已至,卻和暖如春索昂,著一層夾襖步出監(jiān)牢的瞬間建车,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工椒惨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缤至,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓康谆,卻偏偏與公主長得像领斥,于是被迫代替她去往敵國和親嫉到。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理月洛,服務(wù)發(fā)現(xiàn)何恶,斷路器,智...
    卡卡羅2017閱讀 134,695評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法嚼黔,類相關(guān)的語法细层,內(nèi)部類的語法,繼承相關(guān)的語法唬涧,異常的語法疫赎,線程的語...
    子非魚_t_閱讀 31,660評論 18 399
  • Java 語言支持的類型分為兩類:基本類型和引用類型。整型(byte 1, short 2, int 4, lon...
    xiaogmail閱讀 1,349評論 0 10
  • 一爵卒、 1虚缎、請用Java寫一個冒泡排序方法 【參考答案】 public static void Bubble(int...
    獨(dú)云閱讀 1,380評論 0 6
  • 是不是每個人身邊都會有一個這樣的人实牡,明明是學(xué)霸,卻裝的很學(xué)渣轴合,明明可以過得很好创坞,卻混入一群人吃吃喝喝。我不是在諷刺...
    我吃西蘭花閱讀 346評論 12 2