0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

2020年用Java安全編程的五個原則

汽車玩家 ? 來源:開源中國 ? 作者:白開水不加糖 ? 2020-03-05 14:31 ? 次閱讀

一位名為Sam Bocetta的作者發(fā)表了一篇文章,針對在2020年使用Java進(jìn)行編碼時應(yīng)遵循的五個原則進(jìn)行了研究。他在文中表示,盡管目前Java的安全性相較于一些舊的語言(特別是C和C ++)而言有所長進(jìn),但是使用Java編寫的代碼的漏洞級別還是取決于程序員遵循的最佳實(shí)踐。

在當(dāng)今的開發(fā)環(huán)境中更是如此,各種新的安全性技術(shù)、黑客技術(shù)以及新穎的存儲和加密形式,意味著許多人都在質(zhì)疑著Java的安全性。Java開發(fā)人員還面臨著包括云遷移的安全性問題在內(nèi)的諸多挑戰(zhàn)。另一方面,新的安全審核技術(shù)(如混沌工程)也為開發(fā)人員提供了許多提高代碼安全性的機(jī)會。

五個原則的具體內(nèi)容如下:

1. Audit your libraries

首先從基于Java的軟件最明顯的漏洞源開始:外部庫。

使用外部庫本身不是問題。在2020年,大多數(shù)開發(fā)人員的大部分時間確實(shí)都花在了與第三方庫的合作上。未來隨著客戶需求的發(fā)展,庫的類型也會也來越多。因此,重要的是在每次添加新的庫的時候,開發(fā)人員都要去仔細(xì)檢查其中的已知漏洞,不能掉以輕心。

審計您的庫不僅對安全性有好處。在審核的同時,您可能還會發(fā)現(xiàn)其他對性能產(chǎn)生不利影響的問題。并且,如果您要審核的庫是開源的,則可以借此機(jī)會報告錯誤并在整個開源社區(qū)中建立團(tuán)隊(duì)的聲譽(yù)。

2. Manage Application Secrets

在管理應(yīng)用程序的secrets時,Java開發(fā)人員也養(yǎng)成了一些壞習(xí)慣。基本上,社區(qū)可以分為兩個陣營:那些犧牲安全性以便為用戶提供盡可能流暢的軟件體驗(yàn)的人,以及那些希望用戶花費(fèi)4個小時為自己的利益輸入憑據(jù)的人。

實(shí)際上,2020年的編碼意味著要在安全性和可用性之間取得平衡。對可用性的過多關(guān)注通常會導(dǎo)致代碼不安全,對安全性的過多關(guān)注則意味著用戶將會花費(fèi)大部分時間來嘗試規(guī)避你采取的安全措施,且他們最終也會成功找到方法。

而在管理應(yīng)用程序的secrets時,Java開發(fā)人員可以從了解CMS平臺之間的差異中學(xué)到很多東西。因?yàn)榇蠖鄶?shù)的CMS平臺都具有龐大的用戶基礎(chǔ),這意味著其開發(fā)人員必須仔細(xì)考慮如何管理應(yīng)用程序的secrets,同時還要保持普通用戶的可用性。

3. Use Mature Encryption Libraries

用于加密的庫應(yīng)該比其他類型的庫進(jìn)行審計和分析的頻率更高。過去,用于加密的Java庫極難使用,其API對普通開發(fā)人員的幫助不足。這也就導(dǎo)致了許多Java開發(fā)人員開始自己編寫加密庫。

在此過程中,一些人開始錯誤地對自己的加密技術(shù)產(chǎn)生濃重的自豪感,并對他人編寫的代碼產(chǎn)生懷疑。而此舉并不可取,畢竟一些開發(fā)人員一生都在致力于制作不可破解的加密庫,他們編寫的加密庫性能勢必要強(qiáng)于大部分人。

用Java進(jìn)行加密的最好方法則是使用該語言提供的內(nèi)置工具,重新發(fā)明輪子沒有任何意義(也存在重大弊端)。

4. Validate Your Inputs

如上所述,2020年的編程很大一部分是確保您的用戶不會破壞您精心設(shè)計的軟件。最簡單的方法之一是花費(fèi)一些時間來驗(yàn)證用戶輸入。此舉不僅能使您的應(yīng)用程序更安全,也會使得它們更易于使用。

5. Don’t Reinvent the Wheel

最后,一種萬能的原則適用于所有語言的所有開發(fā)人員:不要自己制作易于使用的版本。

自己制作庫的問題在于,晦澀的代碼本質(zhì)上并沒有比公開可用的代碼更安全。主要原因是開源庫在被眾人使用的同時,也在被成千上萬人檢查。因此,其中所存在的漏洞也會很快被發(fā)現(xiàn)。

總結(jié)

100%的安全是不可能的。確保Java開發(fā)中的安全性的關(guān)鍵是,擁有一個用于檢查安全漏洞并將其關(guān)閉的系統(tǒng)。最重要的是,Java開發(fā)人員應(yīng)該意識到,確保代碼安全是一個過程,而不是一個事件。并且,所有地這些問題都需要通過在程序的整個生命周期中進(jìn)行仔細(xì)的審核來解決。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2946

    瀏覽量

    104370
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1465

    瀏覽量

    61680
收藏 人收藏

    評論

    相關(guān)推薦

    安全型繼電器要符合什么原則

    安全型繼電器在設(shè)計和使用過程中,必須符合的核心原則是 故障-安全原則 。這一原則的具體含義和要求可以歸納如下: 故障-
    的頭像 發(fā)表于 09-21 10:12 ?258次閱讀

    華納云:java web和java有什么區(qū)別java web和java有什么區(qū)別

    Java Web和Java是兩不同的概念,它們在功能、用途和實(shí)現(xiàn)方式上存在一些區(qū)別,下面將詳細(xì)介紹它們之間的區(qū)別。 1. 功能和用途: – Java是一種
    的頭像 發(fā)表于 07-16 13:35 ?509次閱讀
    華納云:<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么區(qū)別<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么區(qū)別

    Oracle確認(rèn)Java/JDK 11官方支持延長至20321月?

    此外,Solaris操作系統(tǒng)上的Java SE 8和Java SE 11的官方支持也同步延期至203012月及20321月,進(jìn)一步延長了該平臺上的
    的頭像 發(fā)表于 05-16 15:57 ?956次閱讀

    Oracle 2024Java發(fā)展藍(lán)圖分析

    Oracle 的 Java 開發(fā)者布道師 Nicolai Parlog 于近日發(fā)布一段視頻,介紹了 2024 Java 工作規(guī)劃。
    的頭像 發(fā)表于 01-26 14:27 ?1222次閱讀

    控制靜電放電的三基本原則

    控制靜電放電的三基本原則? 控制靜電放電是一項(xiàng)關(guān)鍵的工程問題,尤其是在現(xiàn)代工業(yè)中。靜電放電不僅可能損壞電子設(shè)備和電子元件,還可能引發(fā)火災(zāi)和爆炸等安全問題。為了有效地控制靜電放電,我們需要遵循三
    的頭像 發(fā)表于 01-03 11:00 ?1956次閱讀

    關(guān)于2023Java趨勢的內(nèi)容

    Java 17+ 被重新歸類為 Java 17,仍處于 早期采用者 階段,因?yàn)橛懈嗟目蚣軐?Java 17 作為基線。Java 21 已被列入 創(chuàng)新者 階段。
    的頭像 發(fā)表于 12-13 11:17 ?408次閱讀
    關(guān)于2023<b class='flag-5'>年</b><b class='flag-5'>Java</b>趨勢的內(nèi)容

    程序員的10條基本編程原則

    編寫代碼容易,但編寫優(yōu)秀代碼卻是一項(xiàng)挑戰(zhàn)。采納基本編程原則是確保編寫高質(zhì)量代碼的穩(wěn)妥途徑,無論軟件項(xiàng)目規(guī)模大小,都能保證代碼高效、易讀、可靠、安全且易維護(hù)。
    的頭像 發(fā)表于 12-05 11:28 ?890次閱讀
    程序員的10條基本<b class='flag-5'>編程</b><b class='flag-5'>原則</b>

    java程序必須以什么為文件擴(kuò)展名

    Java是一種高級編程語言,由Sun Microsystems(后來被Oracle收購)開發(fā)并首次發(fā)布于1995。Java編程語言的目標(biāo)是
    的頭像 發(fā)表于 11-29 14:24 ?1003次閱讀

    java源程序中允許有多個公共類

    Java是一種面向?qū)ο蟮?b class='flag-5'>編程語言,它的特點(diǎn)之一是允許一源程序中包含多個公共類。這是因?yàn)?b class='flag-5'>Java的類可以在不同的文件中定義,并且可以通過引入其他文件來使用這些類。 在
    的頭像 發(fā)表于 11-28 16:32 ?953次閱讀

    簡單了解Java的新特性

    Java 17 于 2021 發(fā)布。這兩版本之間相隔了 7 。Java17是一長期支持
    的頭像 發(fā)表于 11-23 16:38 ?979次閱讀
    簡單了解<b class='flag-5'>Java</b>的新特性

    java中常用的包有哪些

    Java是一種面向?qū)ο蟮母呒?b class='flag-5'>編程語言,它具有平臺無關(guān)性和可擴(kuò)展性。Java中有很多常用的包,這些包提供了豐富的類庫和工具,用于開發(fā)各種類型的應(yīng)用程序。下面是Java中一些常用的包
    的頭像 發(fā)表于 11-22 15:10 ?1208次閱讀

    java接口是特殊的抽象類嗎

    的區(qū)別。 首先,從語法和定義上來看,接口和抽象類是不同的。接口是interface關(guān)鍵字定義的,而抽象類是abstract關(guān)鍵字定義的。根據(jù)Java語法,一類只能繼承自一
    的頭像 發(fā)表于 11-21 10:07 ?568次閱讀

    java的equals怎么

    Java的equals()方法是Object類中的方法,用于比較對象的內(nèi)容是否相等。在默認(rèn)情況下,equals()方法比較的是對象的引用,即判斷兩對象是否是同一實(shí)例。但是在很多情況下,我們希望
    的頭像 發(fā)表于 11-17 16:56 ?613次閱讀

    java和javaweb和javascript的區(qū)別

    Java、JavaWeb和JavaScript是三相關(guān)但又有一定差異的編程語言和技術(shù)。本文將詳細(xì)介紹它們的定義、特點(diǎn)、用途和區(qū)別。 Java是一種面向?qū)ο蟮?/div>
    的頭像 發(fā)表于 11-16 10:48 ?12.8w次閱讀

    Java11和Java17使用率達(dá)48%和45%

    2018 9 月發(fā)布的 Java 11 和 2020 9 月發(fā)布的 Java 17 是使用最廣泛的
    的頭像 發(fā)表于 11-01 12:30 ?530次閱讀