新增 Referer 校驗功能
開啟後,將根據白名單內容實現訪客控制
開啟請求響應優化後,報錯提示內容變更
出於安全性的考量,平台在「安全防護」界面內提供了一些安全功能開關,包括:Cookie 增強、HSTS 設定、檔案上傳校驗、腳本呼叫公式限制、Security Headers、請求響應優化、Token認證增強。
本文對以上安全功能進行了說明,用戶可根據需求在「安全防護」界面內一鍵開啟防護措施。如下圖所示:
「Cookie 增強」按鈕默認關閉。點擊開啟時對當前協議進行檢測:
檢測到當前伺服器協議為 HTTPS 時,Cookie 增強可正常開啟。
檢測到當前伺服器協議為 HTTP 時,彈窗提示「檢測到當前伺服器協議為 HTTP,未能成功啟用。請確認伺服器開啟HTTPS後重試」,並開啟失敗。
如下圖所示:
HSTS 是一種互聯網安全機制,全稱叫 HTTP Strict Transport Security,即安全傳輸協議。採用 HSTS 後,瀏覽器會自動採用 HTTPS 訪問網站地址,從而保證用戶始終訪問到網站的加密鏈接,保護數據傳輸安全。
「HSTS 設定」按鈕默認關閉。伺服器開啟 HTTPS 後方可開啟該按鈕,開啟後將禁止 HTTP 訪問,IE11 以下瀏覽器暫不支持此設定。
若當前伺服器協議為 HTTP,開啟該按鈕後,提示:檢測到當前伺服器協議為 HTTP,未能成功啟用,請確認伺服器開啟 HTTPS 後重試。如下圖所示:
注:HSTS 設定暫不考慮自簽名證書。
「HSTS 設定」按鈕開啟後增加一個「header」:Strict-Transport-Security:,默認值為max-age=31536000; includeSubdomains
超級管理員可通過「fine_conf_entity可視化配置插件」修改「header」的值。
注:修改 FineDB 數據庫表字段值的方法請參考 FineDB常用表字段修改。
max-age=<expire-time>
設定在瀏覽器收到這個請求後的31536000秒的時間內凡是訪問這個域名下的請求都使用HTTPS請求
此規則也適用於該網站的所有子域名
預加載HSTS
檔案上傳漏洞是指攻擊者上傳了一個可執行的腳本檔案,並通過此腳本檔案獲得了執行伺服器端命令的能力。常見場景是 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
通過校驗檔案二進制頭判斷檔案類型,禁止上傳後綴與實際類型不符合的檔案。
管理員登錄 FineBI 系統,點擊「管理系統>安全管理>安全防護」,即可開啟「檔案上傳校驗」,如下圖所示:
超級管理員可通過「fine_conf_entity可視化配置插件」修改檔案上傳校驗類型。
注:修改 FineDB 數據庫表字段值的方法請參考 FineDB 常用表字段修改。
後綴不在白名單內時,直接放行
後綴在白名單內時,需要校驗頭匹配才放行
在「管理系統>外觀設定」中,上傳超過 20M 的圖片,彈出提示框「上傳檔案失敗,檔案過大」,檔案上傳失敗。如下圖所示:
進入「公共資料」,選擇一個有管理權限的檔案夾(可參見:公共數據管理權限)。點擊「新建資料集>Excel資料集」,添加 Excel 資料集。
上傳不支持的檔案格式,如 .zip 檔案,彈出提示框「不支持當前檔案格式,僅支持csv、xls、xlsx格式的檔案,請重新上傳」,檔案上傳失敗。如下圖所示:
非 xlsx 類型的檔案,將其後綴名改為 .xlsx 後上傳。
系統通過校驗二進制頭判斷其實際類型為非 xlsx,不符合 .xlsx 後綴,彈出提示框「上傳失敗,檔案尾碼與實際型別不符」,檔案上傳失敗。如下圖所示:
JS 中使用到FR.remoteEvaluate和FR.remoteEvaluateAsync這兩個接口的頻率較高,但這兩個接口也存在巨大的安全風險,可能會導致攻擊者實現對數據庫的增刪改查等操作,其風險等級相當於遠程執行。
所以 FineBI 新增了「腳本呼叫公式限制」這一功能,開啟後將限制腳本中有風險的公式呼叫。
注:如果用戶沒有相應使用場景,建議不要隨便關閉該功能,關閉會有上述漏洞的風險。
管理員登錄 FineBI 系統,點擊「管理系統>安全管理>安全防護」,即可開啟「腳本呼叫公式限制」,如下圖所示:
安全頭系列設定,開啟後將給請求頭附加 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)
CSP 內容安全策略,類似於白名單,透過在 CSP 中配置白名單,來告訴瀏覽器或者用戶端,哪些東西是被授權執行的,哪些東西是被禁止的。
網站會向瀏覽器發一個 CSP 頭部,來告訴瀏覽器以上資訊,這樣就算攻擊者發現了網站的漏洞,也沒有辦法寫攻擊腳本,因為攻擊腳本不在白名單中。
開啟「CSP內容安全策略」功能後,請求頭部預設增加Content-Security-Policy:object-src 'self'設定,限制所有的外部資源,都只能從當前域名載入。
管理者登入 FineBI 系統,點選「管理系統>安全管理>安全防護」,開啟「Security Headers」功能。點選「進階設定」,即可開啟「CSP 內容安全策略」。如下圖所示:
超級管理者可透過「fine_conf_entity視覺化配置插件」修改策略。
注:修改 FineDB 資料庫表欄位值的方法請參考 FineDB 常用表欄位修改。
object-src
1)none 表示不執行任何匹配。
2)self表示與當前來源(而不是其子域)匹配。
3)unsafe-inline表示允許使用行內 JavaScript 和 CSS。
4)unsafe-eval 表示允許使用類似 eval 的 text-to-JavaScript 機制
限制<object>、<embed>、<applet>標籤的源位址
且僅允許與當前來源(而不是其子域)匹配
且上述標籤中位址僅https://example.com/允許載入
禁用不安全的行內/動態執行, 只允許透過 https載入這些資源 (images, fonts, scripts, etc.)
XSS 是一類攻擊過程的統稱,是攻擊者發現網站漏洞寫的攻擊過程的統稱。這些過程通常是 JS,也可以是 Java,flash,html 等。攻擊成功可以實現:更高的權限,私密的對話,cookie 等。
開啟「XSS攻擊防護」功能後,請求頭部預設增加X-XSS-Protection:1; mode=block設定,啟用 XSS 過濾器,當檢查到跨站腳本攻擊 (XSS (en-US))時,瀏覽器將停止載入頁面。
注:X-XSS-Protection 響應頭是 Internet Explorer,Chrome 和 Safari 的一個特性。
管理者登入 FineBI 系統,點選「管理系統>安全管理>安全防護」,開啟「Security Headers」功能。點選「進階設定」,即可開啟「XSS攻擊防護」。如下圖所示:
注:修改 FineDB 資料庫表欄位值的方法請參考 FineDB 常用表欄位修改 。
瀏覽器會拒絕當前頁面載入任何frame頁面
allow-from URL連結
示例:allow-from https://example.com/
表示該頁面可以在指定來源(https://example.com/)的frame中展示
「點選劫持攻擊防護」開啟後,預設頁面只能在同一個域中載入。
如果使用跨域 iframe 的方式嵌入報表,會出現無法存取報表的情況,關閉 Security Headers 進階設定中的「點選劫持攻擊防護」按鈕即可。如下圖所示:
MIME 是一種標準,多用途網際網絡郵件擴展。它表明了文檔、檔案或各種位元組的性質和格式。
一般情況下,瀏覽器會透過響應頭的 Content-Type 欄位來分辨資源型別。當有些資源的 Content-Type 是錯的或者未定義時,某些瀏覽器會啟用 MIME-sniffing 來猜測該資源的型別,解析內容並執行。
開啟「內容嗅探攻擊防護」後:請求頭部預設增加X-Content-Type-Options:nosniff設定,禁用瀏覽器型別猜測來保證安全性。
管理者登入 FineBI 系統,點選「管理系統>安全管理>安全防護」,開啟「Security Headers」功能。點選「進階設定」,即可開啟「內容嗅探攻擊防護」,如下圖所示:
下面兩種情況的請求將被阻止:
1)請求型別是"style" 但是 MIME 型別不是 "text/css"
2)請求型別是"script" 但是 MIME 型別不是 JavaScript MIME 型別
「內容嗅探攻擊防護」開啟後,會阻止 MIME 型別不匹配的跨域資源共享。
如果使用者單點登入失敗,在瀏覽器介面 F12 開啟控制檯,出現跨域相關報錯,請關閉 Security Headers 進階設定中的「內容嗅探攻擊防護」按鈕。如下圖所示:
瀏覽器快取禁用包含三個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設定。
管理者登入 FineBI 系統,點選「管理系統>安全管理>安全防護」,開啟「Security Headers 」功能。點選「進階設定」,即可開啟「瀏覽器快取禁用」。如下圖所示:
超級管理者可透過「fine_conf_entity視覺化配置插件」修改具體策略。
WebSecurityConfig.cacheControlHeader
注:瀏覽器快取禁用 Header Cache-Control 的值
Cache-control: no-cache
Cache-control: max-age=3600
WebSecurityConfig.cacheControlExpiresHeader
注:瀏覽器快取禁用 Header Expires 的值
WebSecurityConfig.cacheControlPragmaHeader
注:瀏覽器快取禁用 Header Pragma 的值
Pragma: no-cache
與 Cache-Control: no-cache 效果一致
強制要求快取伺服器在傳回快取的版本之前將請求提交到源頭伺服器進行驗
6.0.11 及之後版本的工程預設開啟「請求響應優化」按鈕。
請求響應優化按鈕關閉時,顯示詳細堆疊資訊。若使用者認為顯示具體的堆疊資訊存在安全隱患,可開啟「請求響應優化」按鈕。
請求響應優化按鈕開啟時,提供關鍵報錯資訊,遮蔽具體報錯堆疊。
管理者登入 FineBI 系統,點選「管理系統>安全管理>安全防護」,即可開啟「請求響應優化」,如下圖所示:
範例:在 FineBI 系統新增一個 SQL 資料集,當使用一張不存在的資料表「使用者」時,預覽失敗,點選「詳細資訊」查看預覽失敗原因。
1)未開啟請求響應優化時,點選「詳細資訊」可以查看到具體的報錯堆疊,如下圖所示:
2)開啟後,點選「詳細資訊」只能看到關鍵報錯資訊,錯誤原因為:11300001 資料集配置錯誤
[SQLITE_ERROR] SQL error or missing database (no such table: 用戶)
注1:若使用者想要看到詳細報錯堆疊,關閉「請求響應優化」按鈕即可。
注2:6.0.11 之前版本的工程,開啟「請求響應優化」後,所有堆疊資訊統一轉為簡單的錯誤資訊提示:「請求錯誤,如需查看詳細錯誤資訊請至安全管理頁面進行設定」
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,以保持對話一致。
管理者登入 FineBI 系統,點選「管理系統>安全管理>安全防護」,即可開啟「Token認證增強」,如下圖所示:
開啟「Token認證增強」後,如果請求 IP 發生變更,系統會彈窗提示「登入資訊已失效,請重新登入」。
點選「確定」後,跳轉至系統登入頁,重新登入即可。如下圖所示:
注:該功能預設不啟用。
HTTP 請求頭中的 Referer 欄位中包含了 HTTP 請求的來源資訊,即使用者是從哪個網頁進入到當前頁面的。
基於 Referer 欄位,在伺服器端設定存取控制規則(如白名單),限制使用者只能從固定網頁跳轉存取伺服器資源,防止伺服器資源被非法盜用。
在 FineReport 中開啟 Referer 校驗並配置白名單後,將根據白名單對訪客的身分進行識別和過濾,防止工程裏的儀表板被直接存取或者被其他網站連結存取。
超級管理者可透過以下配置項修改 Referer 校驗的具體策略。
注:工程 fine_conf_entity 表中預設不存在 Referer 校驗配置項,需手動新增欄位並在重啟工程後生效,新增方法請參考:填報修改fine_conf_entity 。
格式:["item1","item2"]
示例:["http://localhost:37799","localhost:37799","localhost"]
欄位值為需要配置的白名單內容,Referer 名單間使用逗號進行分隔
只有白名單內的域名能存取當前資源,白名單以外的域名均無法存取當前資源
請求中的 Referer 欄位為空或無 Referer 欄位時,允許使用者存取當前資源
注:該欄位值固定為 true,即使更改為 false,也會按照 true 的邏輯生效。
點選下載範本:finedb字段修改.cpt
參考 填報修改fine_conf_entity 修改 Referer 校驗的配置項。
注:推薦使用者根據 9.3.2 節,在開啟 Referer 校驗的同時配置白名單,否則會導致無法登入 FineBI 系統,並且無法更改校驗策略,效果如 9.3.1 節所示。
1)在工程 fine_conf_entity 表中新增「WebSecurityConfig.refererVerifyEnabled」欄位,設定欄位值為true。
點選「提交」,重啟工程後配置項生效,開啟 Referer 校驗。如下圖所示:
2)在瀏覽器端中輸入工程位址http://ip:埠/webroot/decision存取 FineBI 系統,存取失敗,如下圖所示:
3)按 F12 鍵,或者按滑鼠右鍵點選檢查,開啟 Chrome 的控制檯,切換至「Network」,查看請求的狀態碼和 Referer 欄位。
查看有 Referer 欄位的請求,由於未配置白名單,白名單的內容為空,不允許所有域名存取當前資源,因此請求異常,傳回 403 狀態碼。如下圖所示:
查看無 Referer 欄位的請求,由於「WebSecurityConfig.refererAllowEmpty」配置項的欄位值固定為ture,允許 Referer 欄位為空或無 Referer 欄位的請求存取當前資源,因此請求成功,傳回狀態碼 200。如下圖所示:
範例:開啟 Referer 校驗,並設定白名單為["localhost"]。
1)在工程 fine_conf_entity 表中新增以下欄位:
新增「WebSecurityConfig.refererVerifyEnabled」欄位,設定欄位值為true,開啟 Referer 校驗。
新增「WebSecurityConfig.refererWhiteList」欄位,設定欄位值為["localhost"],允許來自域名localhost的請求存取資源。
點選「提交」,重啟工程後配置項生效。如下圖所示:
2)在瀏覽器端中輸入工程位址http://ip:埠/webroot/decision存取 FineBI 系統,存取成功,如下圖所示:
3)按 F12 鍵,或者按滑鼠右鍵點選檢查,開啟 Chrome 的控制檯,切換至「Network」,查看有 Referer 欄位的請求。
比如Referer:http://localhost:37799/webroot/decision,域名為localhost,在白名單內,允許存取當前資源。如下圖所示:
若使用者配置了 CAS 單點登入,需要將工程的 URL 和的 CAS 的 URL 都加入白名單,否則會登入失敗。
若使用者配置了跨域單點登入,需要將跨域的兩個工程的 URL 都加入白名單,否則會登入失敗。
Tomcat 在解析使用者請求的 URL 時,如果 URL 中包含分號,則 Tomcat 會過濾掉分號與斜槓之間的字串內容(包括分號)並進標準化處理。
攻擊者可以利用分號繞過權限驗證機制,存取敏感資源或執行惡意操作,危害系統的安全性。
6.0.13及之後版本,FineBI新增 URL 配置項,可以禁止在 URL 中使用分號,以防止路徑遍歷攻擊、權限繞過以及 URL 混淆和欺騙等安全問題。
超級管理者可透過以下配置項設定是否允許在 URL 中使用分號。
注:工程 fine_conf_entity 表中預設不存在以下配置項,需手動新增欄位並在重啟工程後生效,新增方法請參考:填報修改fine_conf_entity 。
允許在 URL 中使用分號
不允許在 URL 中使用分號
在未配置「WebSecurityConfig.allowURLSemicolon」參數、或參數值為 true 的情況下,FineReport 允許在 URL 中使用分號作為分隔符。
例如,瀏覽器存取帶分號的URLhttp://localhost:37799/webroot/decision/;12345/login,則 Tomcat 會過濾掉;xxx/分號與斜槓之間的字串內容(包括分號)並進標準化處理。
實際存取效果為http://localhost:37799/webroot/decision/login,可以正常存取工程,如下圖所示:
1)參考 填報修改fine_conf_entity 在工程 fine_conf_entity 表中新增「WebSecurityConfig.allowURLSemicolon」欄位,設定參數值為「false」。如下圖所示:
重啟工程後配置項生效,不允許在 URL 中使用分號。
2)瀏覽器存取帶分號的 URL:http://localhost:37799/webroot/decision/;12345/login,請求錯誤,無法存取工程,如下圖所示:
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙