阿里巴巴Java開發手冊之安全規約(五)——-我的經驗

銘銘erom發表於2017-06-01

五、安全規約

1. 【強制】隸屬於使用者個人的頁面或者功能必須進行許可權控制校驗。 說明:防止沒有做水平許可權校驗就可隨意訪問、修改、刪除別人的資料,比如檢視他人的私信 內容、修改他人的訂單。

2. 【強制】使用者敏感資料禁止直接展示,必須對展示資料脫敏。 說明:檢視個人手機號碼會顯示成:158**9119,隱藏中間 4 位,防止隱私洩露。

3. 【強制】使用者輸入的 SQL 引數嚴格使用引數繫結或者 METADATA 欄位值限定,防止 SQL 注入, 禁止字串拼接 SQL 訪問資料庫。

4. 【強制】使用者請求傳入的任何引數必須做有效性驗證。 說明:忽略引數校驗可能導致:

  page size過大導致記憶體溢位
  惡意order by導致資料庫慢查詢
  任意重定向
  SQL隱碼攻擊
  反序列化注入
  正則輸入源串拒絕服務ReDoS

說明:Java 程式碼用正則來驗證客戶端的輸入,有些正則寫法驗證普通使用者輸入沒有問題, 但是如果攻擊人員使用的是特殊構造的字串來驗證,有可能導致死迴圈的結果。

5. 【強制】禁止向 HTML 頁面輸出未經安全過濾或未正確轉義的使用者資料。

6. 【強制】表單、AJAX 交必須執行 CSRF 安全過濾。

說明:CSRF(Cross-site request forgery)跨站請求偽造是一類常見程式設計漏洞。對於存在 CSRF 漏洞的應用/網站,攻擊者可以事先構造好 URL,只要受害者使用者一訪問,後臺便在使用者 不知情情況下對資料庫中使用者引數進行相應修改。

7. 【強制】在使用平臺資源,譬如簡訊、郵件、電話、下單、支付,必須實現正確的防重放限制, 如數量限制、疲勞度控制、驗證碼校驗,避免被濫刷、資損。

說明:如註冊時傳送驗證碼到手機,如果沒有限制次數和頻率,那麼可以利用此功能騷擾到其它使用者,並造成簡訊平臺資源浪費。

  1. 【推薦】發貼、評論、傳送即時訊息等使用者生成內容的場景必須實現防刷、文字內容違禁詞過 濾等風控策略。

附 2:本規約專有名詞

  1. POJO(Plain Ordinary Java Object):在本規約中,POJO 專指只有 setter/getter/toString 的簡單類,包括 DO/DTO/BO/VO 等。
  2. DO(Data Object):本手冊指資料庫表一一對應的 POJO 類。
  3. GAV(GroupId、ArtifactctId、Version):Maven 座標,是用來唯一標識 jar 包。
  4. OOP(Object Oriented Programming): 本手冊泛指類、物件的程式設計處理方式。
  5. ORM(Object Relation Mapping): 物件關係對映,物件領域模型與底層資料之間的轉換, 本文泛指 iBATIS, mybatis 等框架。
  6. NPE(java.lang.NullPointerException): 空指標異常。
  7. 一方庫:本工程內部子專案模組依賴的庫(jar 包)。
  8. 二方庫:公司內部發布到中央倉庫,可供公司內部依賴的庫(jar 包)。
  9. 三方庫:公司之外的開源的依賴庫(jar 包)。


相關文章