反饋已提交
網絡繁忙
優化 Referer 校驗配置項,支援設定當 Referer 欄位為空或無 Referer 欄位時,不允許使用者存取資源
新增 URL 配置项,用于设置是否允许在 URL 中使用分号
出於安全性的考量,平台在「安全防護」介面內提供了一些安全功能開關,包括: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
透過校驗檔案二進制頭判斷檔案型別,禁止上傳後綴與實際型別不符合的檔案。
管理者登入數據決策系統,點選「管理系統>安全管理>安全防護」,即可開啟「檔案上傳校驗」,如下圖所示:
超級管理者可透過「fine_conf_entity視覺化配置插件」修改檔案上傳校驗型別。
後綴不在白名單內時,直接放行
後綴在白名單內時,需要校驗頭匹配才放行
範例使用範本請參見:%FR_HOME%\webroot\WEB-INF\reportlets\doctw\Form\FreeForm\自由填報範本.cpt
在 FineReport 設計器中開啟報表,點選檔案元件所在儲存格。
在右側屬性面板中修改檔案元件的檔案型別為 pdf,大小限制為 10 KB,如下圖所示:
點選「填報預覽」,上傳超過 10KB 的檔案,彈出提示框「檔案過大,上限為10KB」,檔案上傳失敗。如下圖所示:
點選「填報預覽」,上傳非 pdf 型別的檔案,彈出提示框「XXX型別禁止上傳,允許上傳的檔案型別包括 pdf」,檔案上傳失敗。如下圖所示:
非 pdf 型別的檔案,將其後綴名改為 .pdf 後上傳。
系統透過校驗二進制頭判斷其實際型別為非 pdf,不符合 .pdf 後綴,彈出提示框「.pdf 型別禁止上傳,允許上傳的檔案型別包括 pdf」,檔案上傳失敗。如下圖所示:
JS 中使用到FR.remoteEvaluate和FR.remoteEvaluateAsync這兩個API的頻率較高,但這兩個API也存在巨大的安全風險,可能會導致攻擊者實現對資料庫的增刪改查等操作,其風險等級相當於遠端執行。
所以 FineReport 新增了「腳本呼叫公式限制」這一功能,開啟後將限制腳本中有風險的公式呼叫。
注:如果使用者沒有相應使用場景,建議不要隨便關閉該功能,關閉會有上述漏洞的風險。
管理者登入數據決策系統,點選「管理系統>安全管理>安全防護」,即可開啟「腳本呼叫公式限制」,如下圖所示:
使用者在開啟「腳本呼叫公式限制」功能後,如果使用了FR.remoteEvaluate和FR.remoteEvaluateAsync這兩個API,在效果預覽時會彈出提示框資訊:此呼叫存在安全風險,如需使用請在安全管理中修改腳本呼叫公式限制。
1)在FineReport 設計器中點選「檔案>建立普通報表」,儲存格 A1 輸入「Test」。
在右側屬性面板中點選「超級連結」,為儲存格新增JavaScript 腳本,如下圖所示:
2)點選「分頁預覽」,點選「Test」,彈出提示框資訊,如下圖所示:
安全頭系列設定,開啟後將給請求頭附加 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'設定,限制所有的外部資源,都只能從當前域名載入。
管理者登入數據決策系統,點選「管理系統>安全管理>安全防護」,開啟「Security Headers 」功能。點選「進階設定」,即可開啟「CSP 內容安全策略」。如下圖所示:
超級管理者可透過「fine_conf_entity視覺化配置插件」修改具體策略。
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 的一個特性。
管理者登入數據決策系統,點選「管理系統>安全管理>安全防護」,開啟「Security Headers 」功能。點選「進階設定」,即可開啟「XSS攻擊防護」。如下圖所示:
X-XSS-Protection: 0
禁止XSS過濾
X-XSS-Protection: 1
啟用XSS過濾
如果檢查到跨站腳本攻擊,瀏覽器將清除頁面,刪除不安全的部
X-XSS-Protection: 1; mode=block
如果檢查到攻擊,瀏覽器將不會清除頁面,而是阻止頁面載入
1; report=<reporting-uri>
範例:1; report=xss.php
X-XSS-Protection: 1; report=xss.php
如果檢查到跨站腳本攻擊,瀏覽器將清除頁面,並使用CSP xss.php的功能傳送違規報表
點選劫持(ClickJacking)是一種視覺上的欺騙手段,誘使使用者與隱藏頁面交互,進行危險操作。
攻擊方式如下:
攻擊者使用一個透明的iframe,改寫在一個網頁上,然後誘使使用者在該頁面上進行操作,此時使用者將在不知情的情況下點選到透明的iframe頁面。
攻擊者使用一張圖片改寫在網頁,遮擋網頁原有位置的含義。
開啟「點選劫持攻擊防護」按鈕後,請求頭部預設增加X-Frame-Options:SAMEORIGIN設定,阻止地點內的頁面被其他頁面嵌入。
該響應頭是用來給瀏覽器指示允許一個頁面可否在 <frame>、<iframe>、<embed> 或者 <object> 中展現的標記。地點可以使用此功能來確定網站沒有被嵌入到別人的地點裏面,進而避免點選劫持攻擊。
管理者登入數據決策系統,點選「管理系統>安全管理>安全防護」,開啟「Security Headers 」功能。點選「進階設定」,即可開啟「點選劫持攻擊防護」。如下圖所示:
超級管理者可透過「fine_conf_entity視覺化配置插件」修改 X-Frame-Options 的具體策略。
X-Frame-Options: deny
瀏覽器會拒絕當前頁面載入任何frame頁面
X-Frame-Options: sameorigin
allow-from uri
範例:allow-from https://example.com/
X-Frame-Options: allow-from https://example.com/
表示該頁面可以在指定來源(https://example.com/)的 frame 中展示
「點選劫持攻擊防護」開啟後,預設頁面只能在同一個域中載入。
如果使用跨域 iframe 的方式嵌入報表,會出現無法存取報表的情況,關閉 Security Headers 進階設定中的「點選劫持攻擊防護」按鈕即可。如下圖所示:
MIME 是一種標準,多用途互網路連結郵件擴展。它表明了文檔、檔案或各種位元組的性質和格式。
一般情況下,瀏覽器會透過響應頭的 Content-Type 欄位來分辨資源型別。當有些資源的 Content-Type 是錯的或者未定義時,某些瀏覽器會啟用 MIME-sniffing 來猜測該資源的型別,解析內容並執行。
開啟「內容嗅探攻擊防護」後:請求頭部預設增加X-Content-Type-Options:nosniff設定,禁用瀏覽器型別猜測來保證安全性。
管理者登入數據決策系統,點選「管理系統>安全管理>安全防護」,開啟「Security Headers 」功能。點選「進階設定」,即可開啟「內容嗅探攻擊防護」,如下圖所示:
超級管理者可透過「fine_conf_entity視覺化配置插件」修改 X-Content-Type-Options 的具體策略。
下面兩種情況的請求將被阻止:
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設定。
管理者登入數據決策系統,點選「管理系統>安全管理>安全防護」,開啟「Security Headers 」功能。點選「進階設定」,即可開啟「瀏覽器快取禁用」。如下圖所示:
WebSecurityConfig.cacheControlHeader
注:瀏覽器快取禁用 Header Cache-Control 的值
Cache-control: no-cache
在發佈快取複本之前,強制要求快取把請求提交給原始伺服器進行驗證(協商快取驗證)
注:與Cache-control: max-age=3600不衝突,可同時設定
Cache-control: max-age=3600
設定快取儲存的最大週期,超過這個時間快取被認為過期(單位秒)
注:與Cache-control: no-cache不衝突,可同時設定
WebSecurityConfig.cacheControlExpiresHeader
注:瀏覽器快取禁用 Header Expires 的值
WebSecurityConfig.cacheControlPragmaHeader
注:瀏覽器快取禁用 Header Pragma 的值
Pragma: no-cache
與 Cache-Control: no-cache 效果一致
強制要求快取伺服器在傳回快取的版本之前將請求提交到源頭伺服器進行驗證
11.0.14 及之後版本的工程預設開啟「請求響應優化」按鈕。
請求響應優化按鈕關閉時,顯示詳細堆堆疊資訊。若使用者認為顯示具體的堆堆疊資訊存在安全隱患,可開啟「請求響應優化」按鈕。
請求響應優化按鈕開啟時,提供關鍵報錯資訊,遮蔽具體報錯堆堆疊。
管理者登入數據決策系統,點選「管理系統>安全管理>安全防護」,即可開啟「請求響應優化」,如下圖所示:
範例:在數據決策系統新增一個 SQL 資料集,當使用一張不存在的資料表「使用者」時,預覽失敗,點選「詳細資訊」查看預覽失敗原因。
1)未開啟請求響應優化時,點選「詳細資訊」可以查看到具體的報錯堆疊,如下圖所示:
2)開啟後,點選「詳細資訊」只能看到關鍵報錯資訊,錯誤原因為:11300001 資料集配置錯誤
[SQLITE_ERROR] SQL error or missing database (no such table: 使用者)
注1:若使用者想要看到詳細報錯堆疊,關閉「請求響應優化」按鈕即可。
注2:11.0.14 之前版本的工程,開啟請求響應優化後,所有堆疊資訊統一轉為簡單的錯誤資訊提示:請求錯誤,如需查看詳細錯誤資訊請至安全管理頁面進行設定。
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,以保持對話一致。
管理者登入數據決策系統,點選「管理系統>安全管理>安全防護」,即可開啟「Token認證增強」,如下圖所示:
開啟「Token認證增強」後,如果請求 IP 發生變更,系統會彈窗提示「登入資訊已失效,請重新登入」。
點選「確定」後,跳轉至系統登入頁,重新登入即可。如下圖所示:
注:該功能預設不啟用。
HTTP 請求頭中的 Referer 欄位中包含了 HTTP 請求的來源資訊,即使用者是從哪個網頁進入到當前頁面的。
基於 Referer 欄位,在伺服器端設定存取控制規則(如白名單),限制使用者只能從固定網頁跳轉存取伺服器資源,防止伺服器資源被非法盜用。
在 FineReport 中開啟 Referer 校驗並配置白名單後,將根據白名單對訪客的身分進行識別和過濾,防止報表工程裏的報表被直接存取或者被其他網站連結存取。
超級管理者可透過以下配置項修改 Referer 校驗的具體策略。
注:工程 fine_conf_entity 表中預設不存在 Referer 校驗配置項,需手動新增欄位並在重啟工程後生效,新增方法請參考:填報修改fine_conf_entity 。
格式:["item1","item2"]
範例:["http://localhost:8075","localhost:8075","localhost"]
欄位值為需要配置的白名單內容,Referer 名單間使用逗號進行分隔
只有白名單內的域名能存取當前資源,白名單以外的域名均無法存取當前資源
請求中的 Referer 欄位為空或無 Referer 欄位時,允許使用者存取當前資源
請求中的 Referer 欄位為空或無 Referer 欄位時,不允許使用者存取當前資源
注:11.0.17 及之前版本,該欄位值固定為 true,即使更改為 false,也會按照 true 的邏輯生效。
點選下載範本:填報修改Referer校驗配置項.cpt
參考 填報修改fine_conf_entity 修改 Referer 校驗的配置項。
注:推薦使用者根據 9.3.2 節,在開啟 Referer 校驗的同時配置白名單,否則會導致無法登入數據決策系統,並且無法更改校驗策略,效果如 9.3.1 節所示。
1)在工程 fine_conf_entity 表中新增「WebSecurityConfig.refererVerifyEnabled」欄位,設定欄位值為true。
點選「提交」,重啟工程後配置項生效,開啟 Referer 校驗。如下圖所示:
2)在 FineReport 設計器中點選菜單欄「伺服器>報表平台管理」,存取工程失敗,如下圖所示:
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)在 FineReport 設計器中點選菜單欄「伺服器>報表平台管理」,存取工程成功。如下圖所示:
3)按 F12 鍵,或者按滑鼠右鍵點選檢查,開啟 Chrome 的控制檯,切換至「Network」,查看有 Referer 欄位的請求。
比如Referer:http://localhost:8075/webroot/decision ,域名為localhost,在白名單內,允許存取當前資源。如下圖所示:
若使用者配置了 CAS 單點登入,需要將報表工程的 URL 和的 CAS 的 URL 都加入白名單,否則會登入失敗。
若使用者配置了跨域單點登入,需要將跨域的兩個報表工程的 URL 都加入白名單,否則會登入失敗。
Tomcat 在解析使用者請求的 URL 時,如果 URL 中包含分號,則 Tomcat 會過濾掉分號與斜槓之間的字串內容(包括分號)並進標準化處理。
攻擊者可以利用分號繞過權限驗證機制,存取敏感資源或執行惡意操作,危害系統的安全性。
11.0.19 及之後版本,FineReport 新增 URL 配置項,可以禁止在 URL 中使用分號,以防止路徑遍歷攻擊、權限繞過以及 URL 混淆和欺騙等安全問題。
超級管理者可透過以下配置項設定是否允許在 URL 中使用分號。
注:工程 fine_conf_entity 表中預設不存在以下配置項,需手動新增欄位並在重啟工程後生效,新增方法請參考:填報修改fine_conf_entity 。
允許在 URL 中使用分號
不允許在 URL 中使用分號
在未配置「WebSecurityConfig.allowURLSemicolon」參數、或參數值為 true 的情況下,FineReport 允許在 URL 中使用分號作為分隔符。
例如,瀏覽器存取帶分號的URLhttp://localhost:8075/webroot/decision/;12345/login,則 Tomcat 會過濾掉;xxx/分號與斜槓之間的字串內容(包括分號)並進標準化處理。
實際存取效果為http://localhost:8075/webroot/decision/login,可以正常存取工程,如下圖所示:
1)參考 填報修改fine_conf_entity 在工程 fine_conf_entity 表中新增「WebSecurityConfig.allowURLSemicolon」欄位,設定參數值為「false」。如下圖所示:
重啟工程後配置項生效,不允許在 URL 中使用分號。
2)瀏覽器存取帶分號的 URL:http://localhost:8075/webroot/decision/;12345/login,請求錯誤,無法存取工程,如下圖所示:
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙