系統加密服務
需求背景
我們公司因爲要緊急對系統進行安全加密,以前系統都是參數暴漏的,能夠直接獲取操作鏈接等數據,爲防止系統關鍵數據被竊取,系統要進行全面加密,時間只有一個月,上級部門要來進行檢查,因涉及到多個系統,上萬個頁面不能一個一個頁面進行加密,特需要一套框架來支持。
需要實現的功能
- 對後端透明 後端不需要該任何代碼
- 對前端透明 前端不需要或者最好不改代碼
- 實現表單放重複提交
- 實現重放攻擊攔截
- 實現XSS 腳本跨站攻擊
實現方案
我們系統的討論了一週時間實現方案如下
* 通過JS 監聽ajax 請求和form表單請求 並對請求的數據進行加密
* 通過繼承HttpServletRequestWrapper 實現參數解析以及XSS防注入
* 使用攔截器搭配註解實現表單放重複提交
* 在提交的JS中加入時間戳的方式配合攔截器和註解實現防重放攻擊
總體實現方案
加密方式
- 前臺數據通過JS對form表單以及AJAX數據進行加密
- 要兼容一些校驗框架
- 加密數據需要加入時間戳用於後臺檢查是否解密成功以及其他用處
- 後臺得到加密的數據進行解密
- 通過重寫HttpServletRequestWrapper 和OncePerRequestFilter 來實現
- 如果是AJAX提交可能需要PYLOAD形式通過流的形式進行解析
表單防重
- 通過TOKEN形式來實現,網上很多實現,這裏不多說了
XXS防跨站腳本攻擊
- 通過將參數中的html代碼轉義來實現
對應的JS加密和Java解密的資源可以查看下載