<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    一個依賴搞定Spring Boot 配置文件脫敏

    一顆小胡椒2022-07-21 10:54:56

    經常會遇到這樣一種情況:項目的配置文件中總有一些敏感信息,比如數據源的url、用戶名、密碼....這些信息一旦被暴露那么整個數據庫都將會被泄漏,那么如何將這些配置隱藏呢?

    今天介紹一種方案,讓你在無感知的情況下實現配置文件的加密、解密。利用一款開源插件:jasypt-spring-boot。項目地址如下:

    https://github.com/ulisesbocchio/jasypt-spring-boot
    

    使用方法很簡單,整合Spring Boot 只需要添加一個starter

    1. 添加依賴

    <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>3.0.3</version>
    </dependency>  
    

    2. 配置秘鑰

    在配置文件中添加一個加密的秘鑰(任意),如下:

    jasypt:
      encryptor:
        password: Y6M9fAJQdU7jNp5MW
    

    當然將秘鑰直接放在配置文件中也是不安全的,我們可以在項目啟動的時候配置秘鑰,命令如下:

    java -jar xxx.jar  -Djasypt.encryptor.password=Y6M9fAJQdU7jNp5MW
    

    3. 生成加密后的數據

    這一步驟是將配置明文進行加密,代碼如下:

    @SpringBootTest
    @RunWith(SpringRunner.class)
    public class SpringbootJasyptApplicationTests {
        /**
         * 注入加密方法
         */
        @Autowired
        private StringEncryptor encryptor;
        /**
         * 手動生成密文,此處演示了url,user,password
         */
        @Test
        public void encrypt() {
            String url = encryptor.encrypt("jdbc\\:mysql\\://127.0.0.1\\:3306/test?useUnicode\\=true&characterEncoding\\=UTF-8&zeroDateTimeBehavior\\=convertToNull&useSSL\\=false&allowMultiQueries\\=true&serverTimezone=Asia/Shanghai");
            String name = encryptor.encrypt("root");
            String password = encryptor.encrypt("123456");
            System.out.println("database url: " + url);
            System.out.println("database name: " + name);
            System.out.println("database password: " + password);
            Assert.assertTrue(url.length() > 0);
            Assert.assertTrue(name.length() > 0);
            Assert.assertTrue(password.length() > 0);
        }
    }
    

    上述代碼對數據源的url、user、password進行了明文加密,輸出的結果如下:

    database url: szkFDG56WcAOzG2utv0m2aoAvNFH5g3DXz0o6joZjT26Y5WNA+1Z+pQFpyhFBokqOp2jsFtB+P9b3gB601rfas3dSfvS8Bgo3MyP1nojJgVp6gCVi+B/XUs0keXPn+pbX/19HrlUN1LeEweHS/LCRZslhWJCsIXTwZo1PlpXRv3Vyhf2OEzzKLm3mIAYj51CrEaN3w5cMiCESlwvKUhpAJVz/uXQJ1spLUAMuXCKKrXM/6dSRnWyTtdFRost5cChEU9uRjw5M+8HU3BLemtcK0vM8iYDjEi5zDbZtwxD3hA=
    database name: L8I2RqYPptEtQNL4x8VhRVakSUdlsTGzEND/3TOnVTYPWe0ZnWsW0/5JdUsw9ulm
    database password: EJYCSbBL8Pmf2HubIH7dHhpfDZcLyJCEGMR9jAV3apJtvFtx9TVdhUPsAxjQ2pnJ
    

    4. 將加密后的密文寫入配置

    jasypt默認使用ENC()包裹,此時的數據源配置如下:

    spring:
      datasource:
        #   數據源基本配置
        username: ENC(L8I2RqYPptEtQNL4x8VhRVakSUdlsTGzEND/3TOnVTYPWe0ZnWsW0/5JdUsw9ulm)
        password: ENC(EJYCSbBL8Pmf2HubIH7dHhpfDZcLyJCEGMR9jAV3apJtvFtx9TVdhUPsAxjQ2pnJ)
        driver-class-name: com.mysql.jdbc.Driver
        url: ENC(szkFDG56WcAOzG2utv0m2aoAvNFH5g3DXz0o6joZjT26Y5WNA+1Z+pQFpyhFBokqOp2jsFtB+P9b3gB601rfas3dSfvS8Bgo3MyP1nojJgVp6gCVi+B/XUs0keXPn+pbX/19HrlUN1LeEweHS/LCRZslhWJCsIXTwZo1PlpXRv3Vyhf2OEzzKLm3mIAYj51CrEaN3w5cMiCESlwvKUhpAJVz/uXQJ1spLUAMuXCKKrXM/6dSRnWyTtdFRost5cChEU9uRjw5M+8HU3BLemtcK0vM8iYDjEi5zDbZtwxD3hA=)
        type: com.alibaba.druid.pool.DruidDataSource
    

    上述配置是使用默認的prefix=ENC(suffix=),當然我們可以根據自己的要求更改,只需要在配置文件中更改即可,如下:

    jasypt:
      encryptor:
        ## 指定前綴、后綴
        property:
          prefix: 'PASS('
          suffix: ')'
    

    那么此時的配置就必須使用PASS()包裹才會被解密,如下:

    spring:
      datasource:
        #   數據源基本配置
        username: PASS(L8I2RqYPptEtQNL4x8VhRVakSUdlsTGzEND/3TOnVTYPWe0ZnWsW0/5JdUsw9ulm)
        password: PASS(EJYCSbBL8Pmf2HubIH7dHhpfDZcLyJCEGMR9jAV3apJtvFtx9TVdhUPsAxjQ2pnJ)
        driver-class-name: com.mysql.jdbc.Driver
        url: PASS(szkFDG56WcAOzG2utv0m2aoAvNFH5g3DXz0o6joZjT26Y5WNA+1Z+pQFpyhFBokqOp2jsFtB+P9b3gB601rfas3dSfvS8Bgo3MyP1nojJgVp6gCVi+B/XUs0keXPn+pbX/19HrlUN1LeEweHS/LCRZslhWJCsIXTwZo1PlpXRv3Vyhf2OEzzKLm3mIAYj51CrEaN3w5cMiCESlwvKUhpAJVz/uXQJ1spLUAMuXCKKrXM/6dSRnWyTtdFRost5cChEU9uRjw5M+8HU3BLemtcK0vM8iYDjEi5zDbZtwxD3hA=)
        type: com.alibaba.druid.pool.DruidDataSource
    

    5. 總結

    jasypt還有許多高級用法,比如可以自己配置加密算法,具體的操作可以參考Github上的文檔。

    數據脫敏
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    近年來,全球范圍內數據泄露事件頻頻發生,而針對數據安全的傳統解決方法大都聚焦于通過數據加密、訪問控制等來嚴格控制數據的應用范圍,以降低數據泄露的風險,這明顯不能滿足當前數字經濟發展的需求。
    隨著《數據安全法》的正式實施,數據安全再次成為關注的熱點,也再度引發了諸多行業對于未來數字安全和數字價值挖掘
    數據安全法》的頒布,讓數據安全建設進入了有法可依、依法建設的新時代。其中,卓有成效的安全技術保障是關鍵。數據一旦流動,就會面臨身份復雜的各類接觸方,如企業內部人員或外部人員。效率低下結果集改寫技術需要在脫敏設備處逐行進行數據改寫,效率很低,且有可能成為業務流的性能瓶頸。??實施復雜需要調研所有目標業務系統的情況和業務流,需要調研每一個頁面的U
    脫敏前電話號碼,CONCAT(LEFT(mobilePhone,3),?身份證號碼脫敏sql:. 根據定義的策略類型,對數據進行脫敏,當然策略可以自定義。請添加微信wx153666購買授權,不白嫖從我做起!?測試證書會失效,請勿正式環境使用
    在數字經濟時代,大數據的廣泛采集和應用對人類的生活方式、城市管理、企業運營實現了全方位、智能化的重構。作為核心經濟資源,數據蘊涵的經濟價值無限巨大、前景無限光明。但是,真正實現數字經濟的內涵價值,需要洞察數據交易和數據價值挖掘的深刻關聯,完成從數字資源到數字資產和數字資本的歷史性飛躍。
    作為我國第一部有關數據安全的專門法律,《中華人民共和國數據安全法》將于9月1日起施行。該法的落地,意味著數字安全受到高度重視,為數字經濟發展保駕護航。
    數據開發平臺評測項目已加入中國信通院第十三批大數據產品能力評測,現已正式開始報名。
    從政府側、供給側、需求側、專業機構等角度出發,聚焦創新和市場雙驅動、供給和需求互促進、治理和發展兩手抓等思路,加大技術研究及應用示范支持力度,分類推進數據安全技術產品的服務創新,強化數據安全防護和數據開發利用,做專做強數據安全檢測評估工作。
    《評估辦法》旨在規范數據出境活動,保護個人信息權益,促進數據跨境安全、自由流動。三是明確范圍界定。監管主體《評估辦法》根據不同評估階段對有關主體提出明確要求。《評估辦法》規定了國家相關職能部門所應承擔的監管職責,這對于相關的監管支撐服務也具有積極促進作用。
    一顆小胡椒
    暫無描述
      亚洲 欧美 自拍 唯美 另类