《阿里Java開發手冊》 | 安全規約
【強制】隸屬於用戶個人的頁面或者功能必須進行權限控制校驗。
說明:防止沒有做水平權限校驗就可隨意訪問、修改、刪除別人的資料,比如查看他人的私信內容。
【強制】用戶敏感資料禁止直接展示,必須對展示資料進行脫敏。
說明:中國大陸個人手機號碼顯示為:137****0969,隱藏中間 4 位,防止隱私洩露。
【強制】用戶輸入的 SQL 參數嚴格使用參數綁定或者 METADATA 欄位值限定,防止 SQL 注入,禁止字符串拼接 SQL 訪問資料庫。
反例:某系統簽名大量被惡意修改,即是因為對於危險字符## --
沒有進行轉義,導致資料庫更新時,where 後邊的訊息被註解掉,對全庫進行更新。
【強制】用戶請求傳入的任何參數必須做有效性驗證。
說明:忽略參數校驗可能導致:
- page size 過大導致內存溢出
- 惡意 order by 導致資料庫慢查詢
- 緩存擊穿
- SSRF
- 任意重定向
- SQL 注入,Shell 注入,反序列化注入 - 正則輸入源串拒絕服務 ReDoS
Java 程式碼用正則來驗證客戶端的輸入,有些正則寫法驗證普通用戶輸入沒有問題,但是如果攻擊人員使用的是特殊構造的字符串來驗證,有可能導致死循環的結果。
【強制】禁止向 HTML 頁面輸出未經安全過濾或未正確轉義的用戶資料。
【強制】表單、 AJAX 提交必須執行 CSRF 安全驗證。
說明:CSRF(Cross-site request forgery)跨站請求偽造是一類常見編程漏洞。對於存在 CSRF 漏洞的應用 / 網站,攻擊者可以事先構造好 URL,只要受害者用戶一訪問,後台便在用戶不知情的情況下對資料庫中用戶參數進行相應修改。
【強制】URL 外部重定向傳入的目標地址必須執行白名單過濾。
【強制】在使用平台資源,譬如短信、郵件、電話、下單、支付,必須實作正確的防重放的機制,如數量限制、疲勞度控制、驗證碼校驗,避免被濫刷而導致資損。
說明:如註冊時發送驗證碼到手機,如果沒有限制次數和頻率,那麼可以利用此功能騷擾到其它用戶,並 造成短信平台資源浪費。
【推薦】發貼、評論、發送即時消息等用戶生成內容的場景必須實作防刷、文本內容違禁詞過濾等風控策略。
心得
看完這篇「安全規約」後,其一是個資法的問題,需要將敏感訊息做隱碼,其二是權限安全的配置和控管,最後就是惡意的使用,最常見的就是所謂的郵件炸彈、簡訊炸彈,透過程式的撰寫對特定的信箱或是手機做重複動作;另外在運維這塊也有特別提到一些防火牆設定、白名單設定⋯等等,都是需要注意的。
結語
文章越看越多,技術越學越多,就會發現自己的不足;技術學到後面都會想要將基礎再重新在打得更加扎實。
以前在開發覺得理所當然的事情,例如:命名規則、命名規範,照著別人怎麼說就怎麼做的想法,並沒有好好去想為什麼要這樣設計和規範。
於是乎同事們推薦《阿里巴巴Java開發手冊》來做閱讀,書中提到種種規範《正確範例》、《錯誤範例》還有解釋定義說明;我相信在閱讀完這一系列後,一定會更加扎實且實在。
如對此書有興趣,建議去購買官方認證的書籍,給予官方支持。
註:如有侵權,通知即刪。
註:以上參考了
Alibaba-Java-Coding-Guidelines Github
Alibaba-Java-Coding-Guidelines English Version