反饋已提交

網絡繁忙

匯入使用者密碼加密設定

1. 問題描述

使用者在登入數據決策系統時需要進行 使用者身分驗證 系統會對輸入帳號和密碼進行驗證,以確定系統安全。

登入驗證資訊(帳號和登入密碼)儲存在資料庫(FineReport 內建資料庫 FineDB 或者其他外接資料庫)中,驗證時使用者輸入密碼與資料庫中密碼相同則驗證透過。

若資料庫被破解,則登入驗證資訊曝光,對系統安全造成威脅。怎樣避免此類情況,保證系統安全呢?

2. 解決方案

使用者可以對 FineDB 中的登入資訊進行加密。保證即使資料庫被破解,也無法得到使用者的真正登入資訊。

同時,FineReport 在 匯入使用者 中提供「自訂密碼加密」方式,可以對使用者在登入頁輸入登入資訊進行加密。當加密後的登入資訊與 FineDB 庫中的登入資訊一致時,驗證透過。如下圖所示:

加密簡介:自訂密碼加密,即自訂一個密碼加密類。

               加密方式在類中描述,並儲存在%FR_Home%\webapps\webroot\WEB-INF\classes資料夾中。

               數據決策系統會在使用者自訂加密算法的基礎上再進行 SHA256 二次加密,以保證密碼安全。

適用場景:匯入的伺服器資料集中的密碼列為明文時,可以使用自訂加密。

登入密碼:匯入的伺服器資料集中密碼列的明文。

加密API:透過API編寫自訂密碼加密類,對使用者輸入“密碼”或“帳號和密碼”經過自訂加密規則進行加密。支援的API如下:

1)只需要對密碼進行加密得到密文:String encode(String originText);//入參是明文密碼,對密碼進行加密得到密文

2)對帳號和密碼進行加密得到密文:String encode(String originUserName, String originPassword);//入參是帳號和明文密碼,傳回結果是密文字元

注1:其中 String encode(String originUserName, String originPassword);加密方式為 2019-01-18 新增的API,包含API1的功能,推薦使用此API。

注2:自訂加密算法,必須繼承 AbstractPasswordValidator 類。

3. 實現思路

3.1 加密驗證邏輯

如果使用者在登入頁面輸入明文密碼後,能夠成功登入數據決策系統。那麼在這個程式中會進行四次加密和一次登入驗證。

匯入使用者後發生:

1)第一次加密:匯入使用者後,系統會對伺服器資料集中的明文進行自訂加密。

2)第二次加密:系統統一進行的 SHA256 加密,加密物件為第一次加密伺服器資料集後得到的密文,得到的密文寫入 FineDB 庫

使用者登入時發生:

3)第三次加密:使用者選取的自訂密碼加密方式,加密物件為使用者輸入明文密碼。

4)第四次加密:系統統一進行的 SHA256 加密,加密物件為第三次加密後的密文。

5)登入驗證:對比第四次加密後得到的密文與 FineDB 庫中的密文,一致則驗證透過。

如下圖所示:

3.2 實現步驟

1)自訂一個密碼加密類,用於加密使用者在登入頁面輸入明文密碼 A。

  • 準備編譯環境

  • 編寫 Java 檔案

  • 編譯 class 檔案

2)建立伺服器資料集,儲存使用者的登入資訊,包括帳號、登入密碼等。

3)匯入使用者資訊至資料決策平台,用於系統登入驗證。

  • 使用者來源為步驟 2 中準備的伺服器資料集。

  • 密碼選擇伺服器資料集中的密碼,為自訂加密後的密文。

  • 設定加密方式為自訂加密,使用步驟 1 中準備的密碼加密類。

4. 自訂密碼加密範例

本文範例:編寫 BASE64 密碼加密類,對使用者輸入“密碼”經過自訂加密規則進行加密,然後進行登入驗證,成功登入數據決策系統。

注:本文僅對 Base64 加密方式進行簡單範例,對於其他常見的加密方式,本文在第五節提供自訂類檔案,使用者可以根據自己的需求下載使用。

4.1 準備編譯環境

編譯程式前,需先建立一個 Java 工程環境,並且需要一個 Java 編輯器,如 Eclipse 或 idea 。

在編輯器下開啟工程,選擇「Properties>Java Build Path>Libraries」,匯入 FineReport 工程 JAR 包,詳細操作可參考:編譯Java程式

4.2 編寫Java檔案

在編譯器中定義一個類,命名為 Base64PasswordValidator.java,擴展於 AbstractPasswordValidatorJava 程式碼如下:

package com.fr.decision.privilege.encrpt;;
import com.fr.base.Base64;
import com.fr.base.ServerConfig;
import com.fr.decision.privilege.encrpt.AbstractPasswordValidator;
import com.fr.log.FineLoggerFactory;
import java.io.UnsupportedEncodingException;
public class Base64PasswordValidator extends AbstractPasswordValidator {
    public Base64PasswordValidator() {
    }
    public String encode(String originText) {
        try {
            return Base64.encode(originText.getBytes(ServerConfig.getInstance().getServerCharset()));
        } catch (UnsupportedEncodingException var3) {
            FineLoggerFactory.getLogger().debug(var3.getMessage());
            return "";
        }
    }
}

4.3 編譯class檔案

點選下載並解壓獲得 class 檔案:Base64PasswordValidator.zip

1)生成 class 檔案

編譯 Base64PasswordValidator.java,生成 Base64PasswordValidator.class 檔案。

2)匯入 class 檔案

將編譯後的 Base64PasswordValidator.class 檔案儲存到%FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege/encrpt資料夾下。

4.4 建立伺服器資料集

使用者在資料庫中準備的密碼會經過兩次加密後寫入 FineDB 庫,用於登入校驗。保證即使資料庫被破解,也無法得到使用者的真正登入資訊。

4.4.1 資料準備

準備一張使用者資訊表,其中 password 資料列中的密碼是明文表結構如下圖所示:

範例:若使用者 a 在登入頁面實際輸入明文密碼為:123456,則 password 列中存放的密碼為 123456

點選下載使用者資訊表: 匯入使用者.xlsx

4.4.2 新增伺服器資料集

請自行使用第三方資料庫管理工具,將上表匯入資料庫,並建立系統與該資料庫的 資料連結 。下文將以 FRDemo 資料庫為例。

1)管理者登入數據決策系統,點選「管理系統>資料連結>伺服器資料集」,建立「SQL資料集」。如下圖所示:

2)設定資料集名稱為「匯入使用者」,資料連結選擇「FRDemoTW」,SQL 語句為:

select * from 匯入使用者

4.5 設定加密方式

注:若使用者選擇其他自訂密碼加密方式,可在本節 4.5.2 中更改自訂加密類。本文在第五節提供了常用的自訂加密類檔案,使用者可按需選用。

在匯入使用者中可以選擇自訂密碼加密方式來提升系統的安全性。

4.5.1 匯入使用者

1)管理者登入數據決策系統,點選「管理系統>使用者管理>所有使用者」,點選「匯入使用者」,配置使用者資訊。如下圖所示:

4.5.2 加密配置

1)使用者來源選擇為:4.4.2 中準備的伺服器資料集「匯入使用者」

2)密碼選擇為:password

3)加密方式選擇為:自訂密碼加密,使用 4.3 節中準備的 Base64PasswordValidator.class 自訂加密類

如下圖所示:

點選「確定」,匯入使用者成功。如下圖所示:

4.6 效果預覽

使用者 a 登入數據決策系統:

伺服器資料集中使用者 a 的密碼:123456 ,在登入頁面輸入明文密碼:123456。

點選「登入」,成功登入數據決策系統。如下圖所示:

5. 常用的自訂密碼加密方式

本文提供了常用的自訂密碼加密方式檔案,使用者可根據需求使用。點選下載檔案後放到指定資料夾下,並更改 4.5.2 節中的自訂類,其餘步驟參照第四節範例即可。

5.1 BASE64加密帳號和密碼

FineReport 支援使用 BASE64 加密方式對使用者輸入帳號和密碼一起進行加密。

現提供編譯後的 BASE64 加密類,點選下載檔案:Base64UserPasswordValidator.zip

1)點選下載並解壓獲得 class 檔案,將檔案儲存到%FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege資料夾下。

2)配置伺服器資料集中 password 列為“密碼”的明文,系統會對“帳號+密碼”進行加密,最終入庫 FineDB。

範例:使用者 a 的密碼是 123456,則伺服器資料集中,password 列應該是 123456,系統對 a123456 加密。

5.2 SHA256加密密碼

FineReport 支援使用 SHA256 加密方式對使用者輸入密碼進行加密。

現提供編譯後的 SHA256 加密類,點選下載檔案:SHA256PasswordValidator.zip

點選下載並解壓獲得 class 檔案,將檔案儲存到%FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege/encrpt資料夾下。

5.3 SHA256加密帳號和密碼

FineReport 支援使用 SHA256 加密方式對使用者輸入帳號和密碼一起進行加密。

現提供編譯後的 SHA256 加密類,點選下載檔案:CustomSHA256PasswordValidator.zip

1)點選下載並解壓獲得 class 檔案,將檔案儲存到%FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege/encrpt資料夾下。

2)配置伺服器資料集中 password 列為“密碼”的明文,系統會對“帳號+密碼”進行加密,最終入庫 FineDB。

範例:使用者 a 的密碼是 123456,則伺服器資料集中,password 列應該是 123456,系統對 a123456 加密。

5.4 MD5(32位小寫)加密密碼

FineReport 支援使用 MD5(32位小寫)加密方式對使用者輸入密碼進行加密。

現提供編譯後的 MD5(32位小寫)加密類,點選下載檔案:MD5CasePasswordValidator.zip

點選下載並解壓獲得 class 檔案,將檔案儲存到%FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege資料夾下。

5.5 MD5(32位小寫)加密帳號和密碼

FineReport 支援使用 MD5(32位小寫)加密方式對使用者輸入帳號和密碼一起進行加密。

現提供編譯後的 MD5(32位小寫)加密類,點選下載檔案:MD5CaseUserPasswordValidator.zip

1)點選下載並解壓獲得 class 檔案,將檔案儲存到%FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege資料夾下。

2)配置伺服器資料集中 password 列為“密碼”的明文,系統會對“帳號+密碼”進行加密,最終入庫 FineDB。

範例:使用者 a 的密碼是 123456,則伺服器資料集中,password 列應該是 123456,系統對 a123456 加密。

5.6 MD5(32位大寫)加密密碼

FineReport 支援使用 MD5(32位大寫)加密方式對使用者輸入密碼進行加密。

現提供編譯後的 MD5(32位大寫)加密類,點選下載檔案:MD5UpperCasePasswordValidator.zip

點選下載並解壓獲得 class 檔案,將檔案儲存到%FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege資料夾下。

5.7 MD5(32位大寫)加密帳號和密碼

FineReport 支援使用 MD5(32位大寫)加密方式對使用者輸入帳號和密碼一起進行加密。

現提供編譯後的 MD5(32位大寫)加密類,點選下載檔案:MD5UpperCaseUserPasswordValidator.zip

1)點選下載並解壓獲得 class 檔案,將檔案儲存到%FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/decision/privilege資料夾下。

2)配置伺服器資料集中 password 列為“密碼”的明文,系統會對“帳號+密碼”進行加密,最終入庫 FineDB。

範例:使用者 a 的密碼是 123456,則伺服器資料集中,password 列應該是 123456,系統對 a123456 加密。


附件列表


主題: 數據決策系統
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙