新增 Referer 校驗功能
開啟後,將根據白名單內容實現訪客控制
開啟請求回應優化後,報錯提示內容變更
在現代企業中,資料和資訊安全已經成為至關重要的議題。
帆軟透過多種安全防護功能,幫助企業有效應對各種安全威脅。
本文對安全防護相關功能進行說明,使用者可根據需求開啟防護措施。
Secure 屬性是 HTTP cookie 的特性,指示瀏覽器僅在 HTTPS 連結下傳送該 cookie。
標記為 Secure 的 cookie 不會在不安全的 HTTP 連結中傳送,進而保護其安全性,防止竊取或篡改。
僅在帆軟應用伺服器協定為 HTTPS 時,方可啟動此功能。
若伺服器協定為 HTTP,嘗試開啟 Cookie 增強將失敗,並提示「檢查到當前伺服器協定為HTTP,未能成功啟動。請確認伺服器開啟HTTPS後重試」。
預設狀態:Cookie 增強預設關閉。
開啟後:針對 HTTPS 通訊,某些 cookie 會自動新增 Secure 屬性,確定僅透過安全的 HTTPS 連結傳輸,提高安全性,防止在不安全的 HTTP 連結上公佈。
HSTS(HTTP Strict Transport Security)是一種安全傳輸協定,旨在強制瀏覽器僅透過 HTTPS 存取網站,進而保證使用者始終存取到網站的加密連結,保護資料傳輸安全。
若伺服器協定為 HTTP,嘗試開啟「HSTS設定」將失敗,並提示「檢查到當前伺服器協定為HTTP,未能成功啟動。請確認伺服器開啟HTTPS後重試」。
預設狀態:HSTS 設定預設關閉。
開啟後:當使用者存取 webroot/decision 目錄下的資源時,將禁止 HTTP 存取,強制使用 HTTPS 存取該路徑及其子域。
注意事項:
1)HSTS 設定僅適用於 https://domain/webroot/decision 路徑(即帆軟應用),不適用於整個 https://domain 域名下的所有請求。
2)對於 IE11 及以下版本瀏覽器,開啟 HSTS 設定後不生效。
3)對於使用自簽章證件的帆軟應用伺服器,開啟 HSTS 設定後不生效。
「HSTS 設定」按鈕開啟後增加一個「header」:Strict-Transport-Security:,預設值為max-age=31536000; includeSubdomains
超級管理者可透過「fine_conf_entity視覺化配置插件」修改「header」的值。
注:修改 FineDB 資料庫表欄位值的方法請參考 FineDB常用表欄位修改。
max-age=<expire-time>
設定在瀏覽器收到這個請求後的31536000秒的時間內凡是存取這個域名下的請求都使用HTTPS請求
此規則也適用於該網站的所有子域名
預載入HSTS
檔案上傳漏洞是指攻擊者透過上傳可執行的腳本檔案,獲得執行伺服器端命令的能力。
例如:伺服器允許使用者上傳圖片或正文檔案,但攻擊者繞過上傳機制,上傳惡意程式碼以控制伺服器。
預設狀態:檔案上傳校驗設定預設開啟。
開啟後:
在使用者填報、平台外觀配置及本地上傳檔案時,系統會對檔案的後綴、大小和二進制頭進行校驗。
校驗透過則上傳成功,未透過則上傳失敗。
1)「系統管理>外觀配置」中,禁止上傳超過 20M 的圖片
上傳超出限制大小的圖片,會彈出提示框:「為使顯示效果較佳,請選擇尺寸不小於 1024*768,大小不超過20M的圖片,支援 PNG、JPG 格式。」
2)FineReport範本中的檔案元件,製作時可自行設定檔案的大小限制,超過限制則無法上傳
上傳超出限制的檔案,會彈出提示框:「檔案過大,上限為 xxx KB」
校驗檔案後綴,僅允許上傳白名單類型的文件
校驗檔案二進制頭,僅允許上傳檔案後綴與實際內容一致的檔案
白名單(允許上傳中的檔案類型)包括:
jpg , jpeg , gif , bmp , png , pdf , doc , docx , ppt , pptx , xls , xlsx , zip
黑名單(不允許上傳中的檔案類型)包括:
asp, jsp, php, exe
如使用者上傳的檔案無法透過校驗,但確實需要上傳相關檔案,可參考以下方案調整。
方案一:臨時關閉「檔案上傳校驗」按鈕,重新上傳檔案。
方案二:透過「fine_conf_entity視覺化配置」插件,修改校驗策略,使得檔案上傳成功。
注:修改 FineDB 資料庫表欄位值的方法請參考 FineDB 常用表欄位修改 。
後綴不在白名單內時,直接放行
後綴在白名單內時,需要校驗頭匹配才放行
預設值
後綴在白名單且頭匹配的才放行
在「管理系統>外觀設定」中,上傳超過 20M 的圖片,彈出提示框「上傳檔案失敗,檔案過大」,檔案上傳失敗。如下圖所示:
進入「公共資料」,選擇一個有管理權限的資料夾(可參見:公共資料管理權限)。點選「建立資料集>Excel資料集」,新增 Excel 資料集。
上傳不支援的檔案格式,如 .zip 檔案,彈出提示框「不支援當前檔案格式,僅支援csv、xls、xlsx格式的檔案,請重新上傳」,檔案上傳失敗。如下圖所示:
非 xlsx 類型的檔案,將其後綴名改為 .xlsx 後上傳。
系統透過校驗二進制頭判斷其實際類型為非 xlsx,不符合 .xlsx 後綴,彈出提示框「上傳失敗,檔案尾碼與實際類型不符」,檔案上傳失敗。如下圖所示:
JS 中使用到FR.remoteEvaluate和FR.remoteEvaluateAsync這兩個API的頻率較高,但這兩個API也存在巨大的安全風險,可能會導致攻擊者實現對資料庫的增刪改查等操作,其風險等級相當於遠端執行。
所以 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攻擊防護」。如下圖所示:
X-XSS-Protection: 0
禁止XSS過濾
X-XSS-Protection: 1
X-XSS-Protection: 1; mode=block
1; report=<reporting-uri>
範例:1; report=xss.php
X-XSS-Protection: 1; report=xss.php
啟動XSS過濾
如果檢查到跨站腳本攻擊,瀏覽器將清除頁面,並使用CSP xss.php的功能傳送違規報表
點選劫持(ClickJacking)是一種視覺上的欺騙手段,誘使使用者與隱藏頁面交互,進行危險操作。
攻擊方式如下:
攻擊者使用一個透明的iframe,改寫在一個網頁上,然後誘使使用者在該頁面上進行操作,此時使用者將在不知情的情況下點選到透明的iframe頁面。
攻擊者使用一張圖片改寫在網頁,遮擋網頁原有位置的含義。
開啟「點選劫持攻擊防護」按鈕後,請求頭部預設增加X-Frame-Options:SAMEORIGIN設定,阻止地點內的頁面被其他頁面嵌入。
該回應頭是用來給瀏覽器指示允許一個頁面可否在 <frame>、<iframe>、<embed> 或者 <object> 中展現的標記。地點可以使用此功能來確定網站沒有被嵌入到別人的地點裏面,進而避免點選劫持攻擊。
管理者登入 FineBI 系統,點選「管理系統>安全管理>安全防護」,開啟「Security Headers 」功能。點選「進階設定」,即可開啟「點選劫持攻擊防護」。如下圖所示:
瀏覽器會拒絕當前頁面載入任何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後關閉
反馈已提交
网络繁忙