日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

環境:SpringBoot2.6.12

API接口脫敏是一種保護敏感數據的重要方法。它涉及到在數據傳輸和存儲過程中,將敏感數據替換為無意義或偽裝的數據,以防止未經授權的訪問和泄露。下面是一些關于如何安全地處理敏感數據的方法:

  1. 數據加密:使用加密算法對敏感數據進行加密,以確保即使數據在傳輸過程中被截獲,也無法被解密。常見的加密算法包括對稱加密算法(如AES)和非對稱加密算法(如RSA)。
  2. 數據脫敏:使用數據脫敏技術,將敏感數據替換為無意義或偽裝的數據。例如,將真實的手機號碼替換為隨機生成的虛假號碼,或將真實的姓名替換為隨機生成的虛假姓名。
  3. 訪問控制:對API接口進行訪問控制,只允許經過身份驗證和授權的用戶訪問。使用身份驗證令牌(如JWT)或OAuth等協議對用戶進行身份驗證和授權。
  4. 日志記錄:對API接口的訪問和使用情況進行詳細的日志記錄,以便在發生安全事件時能夠迅速發現和應對。
  5. 數據傳輸安全:使用HTTPS協議進行數據傳輸,以確保數據傳輸過程中的安全性。
  6. 數據存儲安全:將敏感數據存儲在加密的數據庫中,并使用訪問控制列表(ACL)等技術對數據庫進行訪問控制。

項目中開發的API接口,可能有些接口返回的字段信息不能以明文的形式傳輸,這時候我們該如何進行處理呢?以下給出3中方式:

數據庫層面處理

在SQL查詢的時候進行處理,但這種效率不高,一般不會這樣處理。如下:

SELECT
  CONCAT(LEFT( idNo, 6), '********', RIGHT (idNo, 4)) as idNo
FROM
  users where id = 7;

查詢結果:

API接口脫敏:如何安全地處理敏感數據?以掩碼的方式處理部分數據

數據加密處理

該種方式就是將你需要處理的字段完全通過對稱加密或者HASH算法進行處理。在寫入或者查詢數據的時候對敏感數據進行加密/解密處理。示例如下:

import JAVA.sql.*;  
  
public class JdbcSensitiveDataProcess {  
  public static void main(String[] args) {  
    try {  
      // 連接數據庫  
      Connection conn = DataSourceUtils.getConnection() ;
      // 創建Statement對象  
      Statement stmt = conn.createStatement();  
      // 執行查詢語句  
      ResultSet rs = stmt.executeQuery("SELECT id, name, encrypted_data FROM t_xxx");  
      // 遍歷結果集  
      while (rs.next()) {  
        int id = rs.getInt("id");
        String name = rs.getString("name");
        String encryptedData = rs.getString("encrypted_data");
        // 對加密數據進行解密處理  
        String decryptedData = decryptData(encryptedData);
        // 輸出解密后的數據  
        System.out.println("ID: " + id + ", Name: " + name + ", Decrypted Data: " + decryptedData);  
      }
    } catch (Exception e) {  
      e.printStackTrace();  
    } finally {
      // 關閉數據庫相關資源
    }
  }  
  // 解密數據的方法,這里只是示例,實際需要根據具體的加密算法來實現  
  private static String decryptData(String encryptedData) {  
    // 解密邏輯...  
    // Cipher cipher = Cipher.getInsance(...) ;
    return decryptedData;  
  }  
}

JSON序列化時處理

API接口在生成JSON字符串的時候(序列化時)將敏感信息進行掩碼處理或者加密處理,接下來將詳細介紹第三種方式"JSON序列化時處理"。

JSON序列化處理脫敏

使用jackson時在對對象序列化時進行敏感字段的處理,為了簡單我們通過自定義注解的方式來實現該功能。

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
// 該注解必須,不然jackson不會識別該注解
@JacksonAnnotationsInside
// 指定我們需要序列化字段的實現
@JsonSerialize(using = SensitiveSerializer.class)
public @interface Sensitive {


  /**
   * 正則表達式
   * @return
   */
  String pattern() default "" ;


  /**
   * 正則表達式的第幾個分組;該分組將被替換為掩碼mask
   * @return
   */
  int group() default 0 ;


  /**
   * 掩碼
   * @return
   */
  String mask() default "*" ;


  public interface Pattern {
    /**身份證*/
    String ID = "(\w{5})(\w+)(\w{3})" ;
    /**電話*/
    String PHONE = "(\w){3}(\w+)(\w{2})" ;
    /**私密*/
    String KEY = "(\w+)" ;
  }
}

上面的注釋類都有詳細的說明,不再做過多的說明。

自定義序列化實現

public class SensitiveSerializer extends JsonSerializer<String> implements ContextualSerializer {


  private Sensitive sensitive ;


  @Override
  public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
    String val = value ;
    if (sensitive != null) {
      String pattern = sensitive.pattern() ;
      int groupIndex = sensitive.group() ;
      String mask = sensitive.mask() ;
      if (pattern.length() > 0) {
        Pattern pa = Pattern.compile(pattern) ;
        Matcher matcher = pa.matcher(value) ;
        if (matcher.matches()) {  
          String group = matcher.group(groupIndex) ;
          if (mask.length() > 0 && group.length() > 0) {
            val = val.replace(group, String.join("", Collections.nCopies(group.length(), mask))) ;
          }
        }
      }
    }
    gen.writeObject(val) ;
  }


  @Override
  public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property)
      throws JsonMAppingException {
    sensitive = property.getAnnotation(Sensitive.class) ;
    return this ;
  }


}

該類實現了ContextualSerializer通過該類的回調方法能夠用來讀取當前字段上的注解信息。

public class Users {


  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+10")
  private Date birthday ;
  private Integer age ;
  private String name ;
  // 在需要處理的字段上加入上面定義的注解,這里我們也可以自定義表達式
  @Sensitive(pattern = Sensitive.Pattern.ID)
  private String idNo
}

運行效果:

API接口脫敏:如何安全地處理敏感數據?idNo按照指定的規則進行了掩碼處理

完畢!!!

分享到:
標簽:API
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定