1. 概述
1.1 版本
| FineDataLink 版本 | 功能變更 |
|---|---|
| 4.0 | - |
1.2 功能簡介
出於安全性的考量,平台在「安全防護」介面內提供了一些安全功能開關,包括:Cookie 增強、HSTS 設定、檔案上傳校驗、腳本呼叫公式限制、Security Headers、請求回應優化、Token認證增強。
本文對以上安全功能進行了說明,使用者可根據需求在「安全防護」介面內一鍵開啟防護措施。如下圖所示:

2. Cookie增強
「Cookie 增強」按鈕預設關閉。點選開啟時對當前協定進行檢查:
檢查到當前伺服器協定為 HTTPS 時,Cookie 增強可正常開啟。
檢查到當前伺服器協定為 HTTP 時,彈窗提示「檢查到當前伺服器協定為 HTTP,未能成功啟動。請確認伺服器開啟 HTTPS 後重試」,並開啟失敗。
如下圖所示:

3. HSTS設定
3.1 功能說明
HSTS 是一種互網路連結安全機制,全稱叫 HTTP Strict Transport Security,即安全傳輸協定。採用 HSTS 後,瀏覽器會自動採用 HTTPS 存取網站地址,進而保證使用者始終存取到網站的加密連結,保護資料傳輸安全。
「HSTS 設定」按鈕預設關閉。伺服器開啟 HTTPS 後方可開啟該按鈕,開啟後將禁止 HTTP 存取,IE11 以下瀏覽器暫不支援此設定。
若當前伺服器協定為 HTTP,開啟該按鈕後,提示:檢查到當前伺服器協定為 HTTP,未能成功啟動,請確認伺服器開啟 HTTPS 後重試。如下圖所示:
注:HSTS 設定暫不考慮自簽章憑證。

3.2 設定方法
「HSTS 設定」按鈕開啟後增加一個「header」:Strict-Transport-Security:,預設值為max-age=31536000; includeSubdomains
超級管理者可透過「fine_conf_entity視覺化配置插件」修改「header」的值。
注:修改 FineDB 資料庫表欄位值的方法請參考 FineDB 常用表欄位修改 。
| 配置項 | 配置值 | 配置範例 | 含義 |
|---|---|---|---|
| WebSecurityConfig.hstsHeader | max-age=<expire-time> | max-age=31536000 | 設定在瀏覽器收到這個請求後的31536000秒的時間內凡是存取這個域名下的請求都使用HTTPS請求 |
| max-age=<expire-time>; includeSubDomains | max-age=31536000; includeSubdomains | 設定在瀏覽器收到這個請求後的31536000秒的時間內凡是存取這個域名下的請求都使用HTTPS請求 此規則也適用於該網站的所有子域名 | |
| max-age=<expire-time>; preload | max-age=31536000; preload | 設定在瀏覽器收到這個請求後的31536000秒的時間內凡是存取這個域名下的請求都使用HTTPS請求 預載入HSTS |
4. 檔案上傳校驗
4.1 功能說明
檔案上傳漏洞是指攻擊者上傳了一個可執行的腳本檔案,並透過此腳本檔案獲得了執行伺服器端命令的能力。常見場景是 Web 伺服器允許使用者上傳圖片或者普通正文檔案,而攻擊者繞過上傳機制上傳惡意程式碼並執行進而控制伺服器。
「檔案上傳校驗」按鈕預設開啟,開啟後對填報、平台外觀配置及本地上傳檔案的後綴、大小和二進制頭進行校驗。校驗透過則上傳檔案成功,校驗未透過則上傳檔案失敗。具體校驗設定如下:
注:若使用者上傳的檔案因未透過校驗而導致上傳失敗,可以參考以下方案成功上傳檔案:
方案一:臨時關閉「檔案上傳校驗」按鈕,重新上傳檔案。
方案二:參考 4.2 節修改檔案類型的校驗規則,放行需要上傳的檔案類型。
| 校驗內容 | 具體設定 |
|---|---|
| 上傳檔案的大小 | 管理系統>外觀配置中,禁止上傳超過 20M 的圖片,防止程式掛死。 上傳超出限制大小的圖片,會彈出提示框:「為使顯示效果較佳,請選擇尺寸不小於 1024*768,大小不超過20M的圖片,支援 PNG、JPG 格式。」 |
檔案元件可自行設定檔案的大小限制,超過限制則無法上傳。 上傳超出限制的檔案,會彈出提示框:「檔案過大,上限為 xxx KB」 | |
| 上傳檔案的類型 | 白名單(允許上傳中的檔案類型)包括: jpg , jpeg , gif , bmp , png , pdf , doc , docx , ppt , pptx , xls , xlsx , zip 黑名單(不允許上傳中的檔案類型)包括: asp, jsp, php, exe |
| 上傳檔案的二進制頭 | 透過校驗檔案二進制頭判斷檔案類型,禁止上傳後綴與實際類型不符合的檔案。 |
4.2 設定方法
管理者登入 FineDataLink,點選「管理系統>安全管理>安全防護」,即可開啟「檔案上傳校驗」,如下圖所示:

超級管理者可透過「fine_conf_entity視覺化配置插件」修改檔案上傳校驗類型。
注:修改 FineDB 資料庫表欄位值的方法請參考 FineDB 常用表欄位修改 。
| 配置項 | 值 | 規則 |
|---|---|---|
| WebSecurityConfig.fileInspectorType | 0 | 後綴不在白名單內時,直接放行 後綴在白名單內時,需要校驗頭匹配才放行 |
| 1 | 預設值,後綴在白名單且頭匹配的才放行 | |
| 2 | 後綴不在黑名單內放行 |
4.3 效果範例
4.3.1 上傳檔案大小校驗
在「管理系統>外觀配置」中,上傳超過 20M 的圖片,彈出提示框「上傳檔案失敗,檔案過大」,檔案上傳失敗。如下圖所示:

4.3.2 上傳檔案類型校驗
在「管理系統>外觀配置」中,上傳不支援的檔案格式,如 .zip 檔案,彈出提示框「檔案類型不支援」,檔案上傳失敗。如下圖所示:

4.3.3 上傳檔案的二進制頭校驗
非 png 類型的檔案,將其後綴名改為 .png 後上傳。
系統透過校驗二進制頭判斷其實際類型為非 png,不符合 .png 後綴,彈出提示框「上傳失敗,檔案後綴與實際類型不符」,檔案上傳失敗。如下圖所示:

5. 腳本呼叫公式限制
5.1 功能說明
JS 中使用到FR.remoteEvaluate和FR.remoteEvaluateAsync這兩個API的頻率較高,但這兩個API也存在巨大的安全風險,可能會導致攻擊者實現對資料庫的增刪改查等操作,其風險等級相當於遠端執行。
所以 FineDataLink 新增了「腳本呼叫公式限制」這一功能,開啟後將限制腳本中有風險的公式呼叫。
注:如果使用者沒有相應使用場景,建議不要隨便關閉該功能,關閉會有上述漏洞的風險。
5.2 設定方法
管理者登入 FineDataLink 資料平台,點選「管理系統>安全管理>安全防護」,即可開啟「腳本呼叫公式限制」,如下圖所示:

6. Security Headers
安全頭系列設定,開啟後將給請求頭附加 HTTP Security Headers 屬性,阻止漏洞攻擊。
點選進階設定展開進階防護子功能開關共五個,如下圖所示:
注:當 Security Headers 功能開啟時預設子功能全部開啟,Security Headers 關閉時預設全部關閉,同時不允許開啟進階防護功能。

預設開啟的具體設定如下所示:
res.addHeader("X-Content-Type-Options", "nosniff");res.addHeader("X-XSS-Protection", "1; mode=block");res.addHeader("X-Frame-Options", "SAMEORIGIN");res.addHeader("Content-Security-Policy", "object-src 'self'");res.addHeader("Cache-Control", "no-cache");res.addHeader("Pragma", "no-cache");res.addDateHeader("Expires", 0)6.1 CSP內容安全策略
6.1.1 功能說明
CSP 內容安全策略,類似於白名單,透過在 CSP 中配置白名單,來告訴瀏覽器或者用戶端,哪些東西是被授權執行的,哪些東西是被禁止的。
網站會向瀏覽器發一個 CSP 頭部,來告訴瀏覽器以上資訊,這樣就算攻擊者發現了網站的漏洞,也沒有辦法寫攻擊腳本,因為攻擊腳本不在白名單中。
開啟「CSP內容安全策略」功能後,請求頭部預設增加Content-Security-Policy:object-src 'self'設定,限制所有的外部資源,都只能從當前域名載入。
6.1.2 設定方法
管理者登入 FineDataLink ,點選「管理系統>安全管理>安全防護」,開啟「Security Headers 」功能。點選「進階設定」,即可開啟「CSP 內容安全策略」。如下圖所示:

超級管理者可透過「fine_conf_entity視覺化配置插件」修改策略。
注:修改 FineDB 資料庫表欄位值的方法請參考 FineDB 常用表欄位修改 。
| 配置項 | 配置值 | 配置範例 | 文法 | 含義 |
|---|---|---|---|---|
| WebSecurityConfig.contentSecurityPolicyHeader | object-src | object-src 'self' | Content-Security-Policy: <policy-directive>; <policy-directive> 注:多個用;分號隔開 1)none 表示不執行任何匹配。 2)self表示與當前來源(而不是其子域)匹配。 3)unsafe-inline表示允許使用行內 JavaScript 和 CSS。 4)unsafe-eval 表示允許使用類似 eval 的 text-to-JavaScript 機制 | 限制<object>、<embed>、<applet>標籤的源地址 且僅允許與當前來源(而不是其子域)匹配 |
| object-src | object-src uri | 限制<object>、<embed>、<applet>標籤的源地址 | ||
| default-src | default-src https: | 禁用不安全的行內/動態執行, 只允許透過 https載入這些資源 (images, fonts, scripts, etc.) |
6.2 XSS攻擊防護
6.2.1 功能說明
XSS 是一類攻擊程式的統稱,是攻擊者發現網站漏洞寫的攻擊程式的統稱。這些程式通常是 JS,也可以是 Java,flash,html 等。攻擊成功可以實現:更高的權限,私密的對話,cookie 等。
開啟「XSS攻擊防護」功能後,請求頭部預設增加X-XSS-Protection:1; mode=block設定,啟動 XSS 過濾器,當檢查到跨站腳本攻擊 (XSS (en-US))時,瀏覽器將停止載入頁面。
注:X-XSS-Protection 回應頭是 Internet Explorer,Chrome 和 Safari 的一個特性。
6.2.2 設定方法
管理者登入 FineDataLink ,點選「管理系統>安全管理>安全防護」,開啟「Security Headers 」功能。點選「進階設定」,即可開啟「XSS攻擊防護」。如下圖所示:

超級管理者可透過「fine_conf_entity視覺化配置插件」修改策略。
注:修改 FineDB 資料庫表欄位值的方法請參考 FineDB 常用表欄位修改 。
| 配置項 | 配置值 | 文法 | 含義 |
|---|---|---|---|
| WebSecurityConfig.xssProtectionHeader | 0 | X-XSS-Protection: 0 | 禁止XSS過濾 |
| 1 | X-XSS-Protection: 1 | 啟動XSS過濾 如果檢查到跨站腳本攻擊,瀏覽器將清除頁面,刪除不安全的部分 | |
| 1; mode=block | X-XSS-Protection: 1; mode=block | 啟動XSS過濾 如果檢查到攻擊,瀏覽器將不會清除頁面,而是阻止頁面載入 | |
1; report=<reporting-uri> 範例:1; report=xss.php | X-XSS-Protection: 1; report=xss.php | 啟動XSS過濾 如果檢查到跨站腳本攻擊,瀏覽器將清除頁面,並使用CSP xss.php的功能傳送違規報表 |
6.3 點選劫持攻擊防護
6.3.1 功能說明
點選劫持(ClickJacking)是一種視覺上的欺騙手段,誘使使用者與隱藏頁面交互,進行危險操作。
攻擊方式如下:
攻擊者使用一個透明的iframe,改寫在一個網頁上,然後誘使使用者在該頁面上進行操作,此時使用者將在不知情的情況下點選到透明的iframe頁面。
攻擊者使用一張圖片改寫在網頁,遮擋網頁原有位置的含義。
開啟「點選劫持攻擊防護」按鈕後,請求頭部預設增加X-Frame-Options:SAMEORIGIN設定,阻止地點內的頁面被其他頁面嵌入。
該回應頭是用來給瀏覽器指示允許一個頁面可否在 <frame>、<iframe>、<embed> 或者 <object> 中展現的標記。地點可以使用此功能來確定網站沒有被嵌入到別人的地點裏面,進而避免點選劫持攻擊。
6.3.2 設定方法
管理者登入 FineDataLink 資料平台,點選「管理系統>安全管理>安全防護」,開啟「Security Headers 」功能。點選「進階設定」,即可開啟「點選劫持攻擊防護」。如下圖所示:

超級管理者可透過「fine_conf_entity視覺化配置插件」修改策略。
注:修改 FineDB 資料庫表欄位值的方法請參考 FineDB 常用表欄位修改 。
| 配置項 | 配置值 | 文法 | 含義 |
|---|---|---|---|
| WebSecurityConfig.frameOptionsHeader | deny | X-Frame-Options: deny | 瀏覽器會拒絕當前頁面載入任何frame頁面 |
| sameorigin | X-Frame-Options: sameorigin | 表示該頁面可以在相同域名頁面的 frame 中展示 | |
allow-from uri 範例:allow-from https://example.com/ | X-Frame-Options: allow-from https://example.com/ | 表示該頁面可以在指定來源(https://example.com/)的 frame 中展示 |
6.4 內容嗅探攻擊防護
6.4.1 功能說明
MIME 是一種標準,多用途互網路連結郵件擴展。它表明了文檔、檔案或各種位元組的性質和格式。
一般情況下,瀏覽器會透過回應頭的 Content-Type 欄位來分辨資源類型。當有些資源的 Content-Type 是錯的或者未定義時,某些瀏覽器會啟動 MIME-sniffing 來猜測該資源的類型,解析內容並執行。
開啟「內容嗅探攻擊防護」後:請求頭部預設增加X-Content-Type-Options:nosniff設定,禁用瀏覽器類型猜測來保證安全性。
6.4.2 設定方法
管理者登入 FineDataLink ,點選「管理系統>安全管理>安全防護」,開啟「Security Headers 」功能。點選「進階設定」,即可開啟「內容嗅探攻擊防護」,如下圖所示:

超級管理者可透過「fine_conf_entity視覺化配置插件」修改策略。
注:修改 FineDB 資料庫表欄位值的方法請參考 FineDB 常用表欄位修改 。
| 配置項 | 配置值 | 文法 | 含義 |
|---|---|---|---|
| WebSecurityConfig.contentTypeOptionsHeader | nosniff | X-Content-Type-Options: nosniff | 下面兩種情況的請求將被阻止: 1)請求類型是"style" 但是 MIME 類型不是 "text/css" 2)請求類型是"script" 但是 MIME 類型不是 JavaScript MIME 類型 |
6.4.3 注意事項
「內容嗅探攻擊防護」開啟後,會阻止 MIME 類型不匹配的跨域資源共享。
如果使用者單點登入失敗,在瀏覽器介面 F12 開啟控制台,出現跨域相關報錯,請關閉 Security Headers 進階設定中的「內容嗅探攻擊防護」按鈕。如下圖所示:

6.5 瀏覽器快取禁用
6.5.1 功能說明
瀏覽器快取禁用包含三個ID:
Cache-Control 通用訊息頭欄位,被用於在http請求和回應中,透過指定指令來實現快取機制。快取指令是單向的,這意味着在請求中設定的指令,不一定被包含在回應中。
Expires 回應頭包含日期/時間,即在此時候之後,回應過期。無效的日期,比如 0, 代表着過去的日期,即該資源已經過期。如果在Cache-Control回應頭設定了 "max-age" 或者 "s-max-age" 指令,那麼 Expires 頭會被忽略。
Pragma 是一個在 HTTP/1.0 中規定的通用標頭,這個標頭的效果依賴於不同的實現,所以在“請求-回應”鏈中可能會有不同的效果。它用來向後相容只支援 HTTP/1.0 協定的快取伺服器,那時候 HTTP/1.1 協定中的 Cache-Control 還沒有出來。
開啟「瀏覽器快取禁用」功能後,請求頭部預設增加Cache-Control:no-cache、Pragma:no-cache&Expires:0設定。
6.5.2 設定方法
管理者登入 FineDataLink 資料平台,點選「管理系統>安全管理>安全防護」,開啟「Security Headers 」功能。點選「進階設定」,即可開啟「瀏覽器快取禁用」。如下圖所示:

超級管理者可透過「fine_conf_entity視覺化配置插件」修改具體策略。
注:修改 FineDB 資料庫表欄位值的方法請參考 FineDB 常用表欄位修改 。
| 配置項 | 配置值 | 配置範例 | 文法 | 含義 |
|---|---|---|---|---|
WebSecurityConfig.cacheControlHeader 注:瀏覽器快取禁用 Header Cache-Control 的值 | no-cache | no-cache | Cache-control: no-cache | 在發佈快取複本之前,強制要求快取把請求提交給原始伺服器進行驗證(協商快取驗證) |
| max-age=<seconds> | max-age=3600 | Cache-control: max-age=3600 | 設定快取儲存的最大週期,超過這個時間快取被認為過期(單位秒) | |
WebSecurityConfig.cacheControlExpiresHeader 注:瀏覽器快取禁用 Header Expires 的值 | 0 | 0 | Expires: <http-date> | 代表着過去的日期,即該資源已經過期 |
| <http-date> | Wed, 21 Oct 2015 07:28:00 GMT | 在Wed, 21 Oct 2015 07:28:00 GMT日期後,回應過期 | ||
WebSecurityConfig.cacheControlPragmaHeader 注:瀏覽器快取禁用 Header Pragma 的值 | no-cache | no-cache | Pragma: no-cache | 與 Cache-Control: no-cache 效果一致 強制要求快取伺服器在傳回快取的版本之前將請求提交到源頭伺服器進行驗證 |
7. 請求回應優化
7.1 功能說明
「請求回應優化」按鈕預設關閉。請求回應優化按鈕關閉時,顯示詳細堆疊資訊。
若使用者認為顯示具體的堆疊資訊存在安全隱患,可開啟「請求回應優化」按鈕。
請求回應優化按鈕開啟時,所有堆疊資訊統一轉為簡單的錯誤資訊提示:請求錯誤,如需查看詳細錯誤資訊請至安全管理頁面進行設定。
7.2 設定方法
管理者登入 FineDataLink 資料平台,點選「管理系統>安全管理>安全防護」,即可開啟「請求回應優化」,如下圖所示:

7.3 效果範例
範例:在 FineDataLink 資料平台新增一個 SQL 資料集,當使用一張不存在的資料表「使用者」時,預覽失敗,點選「詳細資訊」查看預覽失敗原因。
1)未開啟請求回應優化時,點選「詳細資訊」可以查看到具體的報錯堆疊,如下圖所示:

2)開啟後,點選「詳細資訊」只能看到關鍵報錯資訊,遮蔽具體的報錯堆疊,如下圖所示:

8. Token認證增強
8.1 功能說明
1)Token 是使用者的唯一識別符號。基於 Token 的身分驗證邏輯如下:
首次登入時,用戶端透過帳號和密碼請求登入。
服務端收到登入請求後,對帳號對應的密碼進行查詢並驗證。
驗證成功後,服務端根據使用者資訊,生成一個與該使用者綁定的 Token(令牌:唯一識別符號),下發給用戶端。
用戶端收到 Token 後儲存到本地,每次向服務端請求資源的時需要帶着服務端簽發的 Token。
服務端收到請求,驗證用戶端請求中帶着的 Token,驗證成功,向用戶端傳回請求的資料,驗證失敗傳回錯誤資訊,要求用戶端重新登入。
2)Token 的安全隱患
Token 簽發後,在有效期內始終有效,服務端無法強制讓 Token 失效。
攻擊者竊取到 Token 後,可以在其他機器上傳送請求冒充使用者登入,存在安全隱患。
3)驗證 Token 對應的 IP 地址,防止 Token 被攻擊者劫持盜用。
「Token認證增強」按鈕預設關閉。
Token 對應的狀態伺服器中儲存了首次請求登入時對應的 IP 地址。
開啟「Token認證增強」後,伺服器在收到請求後,驗證 Token 和 Token 對應的 IP 地址:
如果當前請求 IP 與 Token 對應的 IP 地址一致,則自動放行。
如果當前請求 IP 與 Token 對應的 IP 地址不一致,則視為非法請求,自動跳轉到登入頁,需要重新登入。
注:對於配置了負載均衡的叢集環境,如需開啟「Token認證增強」,請確定負載均衡策略為ip_hash,以保持對話一致。
8.2 設定方法
管理者登入 FineDataLink 資料平台,點選「管理系統>安全管理>安全防護」,即可開啟「Token認證增強」,如下圖所示:

8.3 效果範例
開啟「Token認證增強」後,如果請求 IP 發生變更,系統會彈窗提示「登入資訊已失效,請重新登入」。
點選「確定」後,跳轉至登入頁,重新登入即可。如下圖所示:

