有效提升java編程安全性的12條黃金法則

安全性是軟件開發中最複雜,最普遍和最重要的考量之一。Java是具備許多內置安全性功能的開發平臺,java在長期的發展過程當中,已經通過了不少高強度的安全測試,並常常更新安全漏洞。而且Java生態系統還包括用於分析和報告安全性問題的各類工具。 vue

可是,即便有了可靠的開發平臺,也一樣要保持警戒。應用程序開發是一項複雜的工做,漏洞會隱藏起來不易發現。程序員應該在應用程序開發的每一個階段都考慮安全性,從類級別的代碼編程到API端點受權都應該被考慮在內。java

如下爲你們介紹的基本規則,能夠爲構建更安全的Java應用程序奠基良好的基礎。供參考學習!程序員

Java安全規則1:編寫簡單而強大的Java代碼

漏洞喜歡隱藏在複雜代碼中,所以在不犧牲功能的狀況下使代碼儘量簡單。在代碼中公開儘量少的信息,隱藏實施細節,支持可維護和安全的代碼。下面三個技巧將大大有助於編寫安全的Java代碼:web

  • 充分利用 Java的訪問修飾符。爲類,方法及其屬性聲明訪問級別,能夠設爲private的全部內容都應該爲private。 
  • 避免過分使用反射和內省。在某些狀況下,應該使用這種高級技術,可是在大多數狀況下,您應該避免使用它們。使用反射消除了強類型化,可能會給代碼引入漏洞和不穩定性。將類名與字符串進行比較容易出錯,而且很容易致使名稱空間衝突。
  • 始終定義儘量小的API和接口。解耦組件並使它們在儘量小的區域內交互。即便您的應用程序的某個區域出現漏洞,其餘區域也將是安全的。 

Java安全規則2:避免使用Java自帶的序列化

序列化接受遠程輸入,並將其轉換爲徹底賦值的對象。它省去了構造函數和訪問修飾符,並容許未知數據流成爲JVM中的運行代碼。Java序列化從根本上來講是不安全的。spring

Oracle就有長期計劃 從Java中刪除自帶的序列化功能,甲骨文公司Java平臺小組的首席架構師Mark Reinhold說,Java漏洞中的三分之一或更多都涉及到序列化的問題。sql

儘量避免在Java代碼中使用自帶的序列化/反序列化。能夠考慮使用JSON或YAML之類的序列化格式,而且永遠不要公開接收並做用於序列化流的不受保護的網絡請求端點。數據庫

Java安全規則3:永遠不要公開未加密的憑證或PII

不少的應用,當用戶在瀏覽器中輸入密碼時,密碼將以純文本格式發送到您的服務器。正確的作法是:先經過單向密碼對密碼進行加密,而後再將其持久保存到數據庫中,而後在每次與該值進行比較時再次進行加密保存。
密碼規則適用於全部我的身份信息(PII):信用卡,社會保險號等。委託給您應用程序的任何我的信息都應獲得最高程度的保護。
數據庫中未加密的憑據或PII是一個巨大的安全漏洞,正在等待攻擊者發現。一樣,切勿將原始憑據寫入日誌,或以其餘方式傳輸到文件或網絡。密碼與密鑰分開保存。編程

Java安全規則4:使用已知和通過測試的庫

儘量使用已知的可靠庫和框架。從密碼哈希到REST API受權,都要謹慎的選擇第三方庫。對於web應用程序安全性,Spring Security已是事實上的標準。它提供了普遍的選擇和靈活性,以適應任何應用程序體系結構,而且融合了多種安全方法。後端

Java安全規則5:不要對外部輸入抱有幻想

不管是來自用戶輸入表單,數據存儲區仍是遠程API,對於任何外部輸入都不要放鬆警戒。瀏覽器

SQL注入和跨站點腳本(XSS)是因爲處理外部輸入錯誤而引發的最多見攻擊。每當您收到輸入時,都應該對其進行檢查和校驗。

Java安全規則6:始終使用PreparedStatement來處理SQL參數

每當您構建一條SQL語句時,都有可能被插入一段可執行的SQL代碼。始終使用java.sql.PreparedStatement類建立SQL是一個好習慣。對於NoSQL存儲(如MongoDB)也存在相似的功能。絕大部分的ORM框架,都支持該功能。

Java安全規則7:不要向用戶展現服務異常信息

生產中的服務異常信息能夠爲攻擊者提供豐富的信息來源。堆棧跟蹤尤爲能夠揭示有關您正在使用的技術及其使用方式的信息。避免向最終用戶顯示堆棧跟蹤信息,這很是重要。

Java安全規則8:使安全性發布保持最新

經過按期檢查Oracle主頁以獲取security-alerts確保知道可用的重要補丁程序 。每一個季度,Oracle都會爲Java的當前LTS(長期支持)版本提供一個自動補丁更新。問題是,只有在您購買Java支持許可證的狀況下,該補丁纔可用。

Java安全規則9:查找依賴庫漏洞

有許多工具能夠自動掃描您的代碼庫和依賴項是否存在漏洞。OWASP(開放式Web應用程序安全性項目)是致力於改善代碼安全性的組織。OWASP的值得信賴的高質量自動代碼掃描工具列表 ,包括多個面向Java的安全檢查工具。

Java安全規則10:監視和記錄用戶活動

若是您沒有積極地監視應用程序運行狀態,那麼即便是簡單的暴力攻擊也可能會成功攻陷你的app。使用監視和日誌記錄工具來監視應用程序的運行情況。監視能夠提醒您注意到沒法被解釋的峯值,而日誌記錄能夠幫助您瞭解攻擊後出了什麼問題。

Java安全規則11:小心DoS攻擊

每當要執行消耗資源的的操做(例如將壓縮文件解壓縮)時,都應該監視資源使用量的增加。對其進行監視,並防止服務器資源過分使用,以及更多的自動化的應急響應方案。

Java安全規則12:考慮使用Java安全管理器

Java有一個安全管理器,可用於限制正在運行的進程能夠訪問的資源。它能夠根據磁盤,內存,網絡和JVM訪問來隔離程序。縮小對應用程序的這些資源的過分佔用,能夠減小攻擊可能形成的危害。

歡迎關注個人博客,裏面有不少精品合集

  • 本文轉載註明出處(必須帶鏈接,不能只轉文字):字母哥博客

以爲對您有幫助的話,幫我點贊、分享!您的支持是我不竭的創做動力! 。另外,筆者最近一段時間輸出了以下的精品內容,期待您的關注。

相關文章
相關標籤/搜索