本發(fā)明涉及交互式數據可視化應用領域,特別涉及一種交互式數據系統(tǒng)通用安全防護系統(tǒng)。
背景技術:
應用系統(tǒng)的安全性越來越受到人們的關注,利用web應用系統(tǒng)的漏洞進行入侵、滲透已經成為互聯網安全隱患之一,如何保障系統(tǒng)安全和企業(yè)核心數據不受破壞,已成為企業(yè)信息部門的焦點問題。
軟件系統(tǒng)的信息安全,包括信息保密性、完整性和可用性。保密性:指高級別信息僅在授權情況下流向低級別的客戶體;完整性:指信息不會被非授權修改,信息保持一致性等;可用性:指合法用戶的正常請求能及時、正確、安全地得到服務或回應。傳統(tǒng)web應用系統(tǒng)的做法是,it人員事先根據需求,分解出系統(tǒng)的安全需求,并對安全需求進行定制化開發(fā),將安全模塊和系統(tǒng)其他部分定制開發(fā)為一個整體,這樣做的問題是,針對不同的web應用系統(tǒng),即使其面對的是同樣的或相似的安全需求時,均需要重新定制開發(fā),造成研發(fā)資源浪費。
技術實現要素:
本發(fā)明的目的在于克服現有技術中需要對每一個不同的web系統(tǒng)的不同安全需求做定制開發(fā),即使不同web系統(tǒng)安全需求相似也需要重新進行整體設計的問題,提供一種可以針對多種系統(tǒng)進行防護的交互式數據web系統(tǒng)通用安全防護系統(tǒng)。
為了實現上述發(fā)明目的,本發(fā)明提供了以下技術方案:
一種交互式數據系統(tǒng)通用安全防護系統(tǒng),依次包括,
數據輸入接口,與交互式數據系統(tǒng)的人機交互輸入連接;
防護模塊,對子數據輸入接口輸入的數據進行安全檢測,將通過安全檢測的數據自數據輸出接口輸出;
數據輸出接口,與交互式數據系統(tǒng)的數據處理模塊連接。
進一步的,所述防護模塊包括鑒權資源注冊模塊、csrf攻擊防護模塊、參數校驗模塊、跨站腳本攻擊防護模塊、登錄檢驗模塊、sql注入防護模塊、xml實體注入攻擊防護模塊中的至少兩種;各個模塊按照指定順序依次對輸入數據進行安全檢測;
所述鑒權資源注冊模塊用于對交互式數據系統(tǒng)的菜單請求數據以及輸入的url進行鑒權;
所述csrf攻擊防護模塊用于對數據進行csrf攻擊防護檢測;
所述參數校驗模塊用于對接收的所有url的參數進行參數校驗;
跨站腳本攻擊防護模塊用于接收到數據進行跨站腳本攻擊防護;
登錄校驗模塊用于對登錄用戶的權限進行檢測;
sql注入防護模塊用于防止sql注入攻擊;
xml實體注入攻擊防護模塊用于防止xml實體注入攻擊。
進一步的,所述csrf攻擊防護模塊對每個請求的參數中攜帶的token值進行校驗;所述token值為安全隨機數;
請求中加入token值的方法為:使用csrf請求屬性來獲取當前的csrftoken;或,使用springsecurity的jsp標簽庫中的csfrinput標簽。
進一步的,所述sql注入防護模塊使用preparedstatement防范sql注入攻擊,或,使用spring提供的namedparameterjdbctemplate類執(zhí)行sql防范sql注入攻擊。
進一步的,所述xml實體注入攻擊防護模塊通過解析http/https請求中xml結構參數防止xml實體注入、解析靜態(tài)xml配置文件防止xml實體注入或解析excel防止xml實體注入。
進一步的,所述防護模塊包括隱私保護模塊,所述隱私保護模塊用于根據用戶的設置,對指定的參數進行全部隱藏顯示或部分隱藏顯示。
進一步的,所述防護模塊包括個性化設置模塊,所述個性化設置模塊用于用戶設置交互式數據系統(tǒng)中參數的必填項和/或參數的類型、取值范圍。
進一步的,所述防護模塊包括運行日志保護模塊用于對交互式數據系統(tǒng)的所有操作記錄日志,并對日志的訪問進行控制,同時,對日志中的敏感數據進行匿名化處理。
進一步的,所述防護模塊包括運行動態(tài)處理模塊,所述運行動態(tài)處理模塊用于協調所述防護模塊中其他各個功能模塊的運行
與現有技術相比,本發(fā)明的有益效果:本發(fā)明通過提供一種交互式數據系統(tǒng)通用安全防護系統(tǒng)可達到如下效果:
1、對于業(yè)務編排人員:不需要知曉本發(fā)明提供安全系統(tǒng)的具體開發(fā)技術,只需要了解本發(fā)明提供的安全防護系統(tǒng)提供的功能、接口和使用方法,就能通過將本發(fā)明提供的安全系統(tǒng)接口與交互式數據系統(tǒng)對接,從而獨立地編排出具有安全能力的交互式數據web應用系統(tǒng)。
2、對于數據可視化的交互式數據應用平臺:本發(fā)明提供安全系統(tǒng)采用松耦合設計,分解成多個獨立模塊,只要平臺具有擴展模塊的能,就能將各個模塊有機的組合起來,生成具有安全能力的web應用系統(tǒng)。
3、對于項目組:本發(fā)明提供安全系統(tǒng)的各模塊具有高復用性,模塊開發(fā)完成能應用于所有web應用系統(tǒng),不再為每個交互式數據應用(app)定制化開發(fā)而投入人力,大大地提高了開發(fā)效率、節(jié)省開發(fā)資源、加快開發(fā)周期。
4、對于交互式數據應用的升級:本發(fā)明提供安全系統(tǒng)的各模塊具有獨立發(fā)布,獨立安裝的能力。從而避免了交互式數據應用與安全必須捆綁發(fā)布的困境,大大提升企業(yè)的it集成實施能力。
附圖說明:
圖1是本發(fā)明提供的交互式數據系統(tǒng)通用安全防護系統(tǒng)應用示意圖。
圖2是本發(fā)明提供的交互式數據系統(tǒng)通用安全防護系統(tǒng)安全處理流程示例。
圖3是本發(fā)明提供的交互式數據系統(tǒng)通用安全防護系統(tǒng)個性化安全需求的動態(tài)解析及校驗處理。
圖4是本發(fā)明中安全防護系統(tǒng)加載到具體應用中的流程實施例。
具體實施方式
下面結合附圖及具體實施例對本發(fā)明作進一步的詳細描述。但不應將此理解為本發(fā)明上述主題的范圍僅限于以下的實施例,凡基于本發(fā)明內容所實現的技術均屬于本發(fā)明的范圍。
如圖1所示,本實施例提供一種交互式數據系統(tǒng)通用安全防護系統(tǒng),依次包括,
數據輸入接口,與交互式數據系統(tǒng)的人機交互輸入連接;
防護模塊,對子數據輸入接口輸入的數據進行安全檢測,將通過安全檢測的數據自數據輸出接口輸出;
數據輸出接口,與交互式數據系統(tǒng)的數據處理模塊連接。
所述防護模塊包括鑒權資源注冊模塊、csrf攻擊防護模塊、參數校驗模塊、跨站腳本攻擊防護模塊、登錄檢驗模塊、sql注入防護模塊、xml實體注入攻擊防護模塊,我們將以上所有模塊的集合體稱之為web安全模塊;web安全模塊各個模塊按照指定順序依次對輸入數據進行安全檢測。另外,本實施例中,防護模塊還包括隱私保護模塊、個性化設置模塊、運行日志保護模塊和運行動態(tài)處理模塊;但是應注意的是,用戶可根據自己app的具體需要對上述模塊進行選擇全部啟用或者部分啟用,本實施例中,以全部啟用為例進行解釋。
請注意的是,鑒權資源注冊模塊用于對交互式數據系統(tǒng)的菜單請求數據以及輸入的url進行鑒權;理論上,數據可視化平臺(交互式數據系統(tǒng))的所有具體應用(app)的菜單以及界面的url請求都需要經過鑒權資源注冊的鑒權;具體的,用戶需要先將app的所有url按照其安全配置模板進行配置;而在編譯打包生成具體的app時,解析app包含的url資源信息,動態(tài)生成install和uninstall的url資源定義sql腳本,放在app安裝包的對應目錄下;注冊的資源信息里,包含界面框架、界面導航樹、功能,從而實現精細化訪問安全控制;安裝app時,將上述sql腳本寫入到數據庫的對應表中;對應表如可以是資源定義信息表、資源和角色歸屬關系表、資源定義表述表中的一種或多種等。
所述csrf攻擊防護模塊用于對數據進行csrf攻擊防護檢測,所述csrf攻擊防護模塊對每個請求的參數中攜帶的token值進行校驗;所述token值為安全隨機數;請求中加入token值的方法為:使用csrf請求屬性來獲取當前的csrftoken;或,使用springsecurity的jsp標簽庫中的csfrinput標簽;如果使用json,可以將token信息放到請求頭中。一種典型的模式是將csrftoken引入到源標簽中??蓪⑺械膖oken引入到所有的ajax請求中。
所述參數校驗模塊用于對接收的所有url的參數進行參數校驗;包含本安全系統(tǒng)的具體應用編譯打包生成的app時,拷貝validate-common-config.xml文件到app的web-inf\validate目錄下,validate文件夾沒有的話新建。參數校驗web安全最重要的一道防御,嚴格的參數校驗能夠防止常見的sql注入、os注入、目錄遍歷攻擊、跨站腳本攻擊等;參數校驗規(guī)則配置文件的命名規(guī)則為validate-rule_xxx.xml,只要以validate-rule開頭的xml文件就可以;該文件也需要放入app的web-inf\validate目錄下;編譯打包時拷貝validate-rule_xxx.xml文件到validate目錄,文件中定義app中固定的參數校驗規(guī)則,動態(tài)的參數校驗采用另外的方案實現(后文中會描述)。應注意的是,該配置文件合入后,該app的接收所有url的參數都會進行參數校驗。
跨站腳本攻擊防護模塊用于接收到數據進行跨站腳本攻擊防護;跨站腳本攻擊防護模塊封裝了一個防xss攻擊的工具組件,它實現了常見的防xss攻擊的轉義方法;防xss攻擊轉義類型有三種:html進行轉義、htmlattribute進行轉義、javascript進行轉義。
登錄校驗模塊用于對登錄用戶的權限進行檢測;app安裝完成后,基于安裝時注冊到交互式數據系統(tǒng)的url資源定義信息,系統(tǒng)管理員可登錄交互式數據系統(tǒng)為app向其他角色授權;具有app訪問權限的角色登錄成功后,便可使用其權限范圍內的功能;交互式數據系統(tǒng)的登錄及安全控制,統(tǒng)一由交互式數據系統(tǒng)的安全模塊提供服務;安全模塊的登錄服務中,實現了“登錄認證防暴力破解”、“認證管理”、“登錄口令保護”、“會話管理”等功能;平臺的授權用戶接口包括單點安全登錄模式及單系統(tǒng)安全登錄模式兩種接口方式,同時,本安全系統(tǒng)為用戶角色配置可訪問資源的功能頁面,具有系統(tǒng)管理員級別的用戶登錄后,可在該功能模塊給其他低級別用戶角色賦權;具體的,登錄時,驗證登錄用戶是否是系統(tǒng)中的用戶,無效用戶則提示身份無效,停留在登錄頁面;有效用戶則驗證密碼是否正確,正確則為用戶生成單點登錄憑證;權限過濾組件判定當前登錄用戶身份,最終呈現他可訪問的資源;用戶登錄后,在系統(tǒng)內的所有操作發(fā)起的請求,根據具體情況會經過web安全框架的安全組件對請求進行驗證。
sql注入防護模塊用于防止sql注入攻擊,所述sql注入防護模塊使用preparedstatement防范sql注入攻擊,或,使用spring提供的namedparameterjdbctemplate類執(zhí)行sql防范sql注入攻擊。
xml實體注入攻擊防護模塊用于防止xml實體注入攻擊,所述xml實體注入攻擊防護模塊通過解析http/https請求中xml結構參數防止xml實體注入、解析靜態(tài)xml配置文件防止xml實體注入或解析excel防止xml實體注入。
所述隱私保護模塊,所述隱私保護模塊用于根據用戶的設置,對指定的參數進行全部隱藏顯示或部分隱藏顯示。交互式數據系統(tǒng)新建角色時默認是需要對用戶標識(個人數據標識)屏蔽的,如果該角色對于用戶標識是屏蔽的,該角色下的用戶登錄平臺時看到的個人數據應該是屏蔽(匿名化)的。隱私保護模塊分為個人數據隱私保護和日志中個人數據匿名化;針對個人數據時:針對常見的涉及用戶隱私個人數據參數,app界面呈現時需要做匿名化處理。比如msisdn(電話號碼)18912345678,如果末尾屏蔽4位,界面將呈現匿名化后的結果18912345****。對于匿名化的數據,需要調用平臺工具組件的方法做進行匿名化。編排app時,設置那些數據需進行匿名化;app運行時,動態(tài)解析匿名化配置信息,調用隱私保護模塊完成匿名化處理。針對操作日志中個人數據匿名化操作,與web界面不同,操作日志中個人數據匿名化開關在setting->安全管理->個人數據匿名化配置界面。
所述防護模塊包括個性化設置模塊,所述個性化設置模塊用于用戶設置交互式數據系統(tǒng)中參數的必填項和/或參數的類型、取值范圍具體的,數據可視化平臺的ui設計器編排頁面時,可根據app應用的個性化安全需求,配置參數校驗規(guī)則。例如,編排人員可為app頁面中某個控件(如文本框)設置必填、合法的身份證號、ip、email地址、長度限制、值范圍等常見的檢驗規(guī)則,這些規(guī)則以選項形式選擇。超出常見部分,編排人員可自定義正則表達式完成業(yè)務需求;用于也可以為一個控件指定多個參數校驗規(guī)則,比如某參數既需必填輸入值又必須在指定范圍內。配置的安全規(guī)則在保存頁面時一并存在在頁面源文件內。當app編譯發(fā)布時,分離出源文件中設置的安全規(guī)則信息,作為app運行時參數校驗的依據。
所述防護模塊包括運行日志保護模塊用于對交互式數據系統(tǒng)的所有操作記錄日志,并對日志的訪問進行控制,具體的操作如表一所示。
表一
所述防護模塊包括運行動態(tài)處理模塊,所述運行動態(tài)處理模塊用于協調所述防護模塊中其他各個功能模塊的運行
本發(fā)明提供的安全系統(tǒng)通過配置引入模塊與具體app配置為一體,具體如圖4所示,采用web.xml配置引入:編譯打包生成的app,該配置文件不需要修改,直接拷貝到app的web-inf\目錄下即可;web.xml中包含安全的相關配置:配置單點登錄/退出、數據可視化平臺自定義的日志組件、安全請求前綴校驗組件、處理各模塊間session對應關系組件、判斷應用的url是否已經注冊的組件、攔截請求的組件等等;其中,配置單點登錄/退出由cas單點退出過濾器完成,系統(tǒng)中所有請求都會經過這個過濾器處理,它主要完成當前登錄用戶的請求會話是否有效,若無效就取消登錄憑證,并自動調轉到登錄頁面;數據可視化平臺自定義的日志組件用于記錄日志,根據日志文件大小和生成時長等閾值設置來壓縮備份日志文件;安全請求前綴校驗組件為請求前綴校驗過濾器,其用于調用系統(tǒng)接口的請求,需驗證發(fā)起請求的用戶身份憑證;處理各模塊間session對應關系組件用于驗證請求是從哪個頁面鏈接過來的,系統(tǒng)中所有請求都會經過這個過濾器處理,它驗證請求是否從信任的頁面鏈接發(fā)起的;判斷應用的url是否已經注冊的組件為url是否在系統(tǒng)已經配置的驗證過濾器,系統(tǒng)中所有請求都會經過這個過濾器處理,它驗證請求的url是否是系統(tǒng)中的鑒權資源(app安裝時,將它的url注冊到系統(tǒng)中);如果是鑒權資源則放行,否則結束請求。
spring-security.xml配置文件引入:編譯打包時會將該文件copy到app的web-inf\conf目錄下即可;主要配置包括:安全工具組件、注冊并配置防csrf攻擊組件、注冊并配置dos攻擊組件、注冊并配置參數校驗組件、注冊并配置cookie過濾器、注冊并配置請求頭校驗組件、注冊并配置文件上傳驗證組件、注冊并配置用戶認證的入口、注冊并配置系統(tǒng)訪問url資源驗證組件、注冊并配置系統(tǒng)對外接口驗證組件、注冊并配置集成ssocas組件等等;注冊配置的這些組件,在app運行時完成安全過濾作用。例如,當用戶上傳文件時,根據app編排的個性化安全配置信息(如允許上傳的文件類型、文件大小等),使用上傳驗證組件完成校驗。校驗通過,繼續(xù)執(zhí)行后續(xù)業(yè)務邏輯;校驗失敗,結束請求并提示用戶。
參數校驗組件:先驗證請求url是否是白名單,若是就不做參數校驗,若不是就要做參數校驗;根據url找到請求參數校驗配置信息,對各個參數進行驗證;驗證不通過則結束請求;白名單和參數校驗配置信息分別在web-inf\validate\validate-common-config.xml、web-inf\validate\validate-rule-app.xml配置文件中,配置文件由spring框架加載;參數校驗規(guī)則配置成正則表達式,驗證時將參數值與正則表達式匹配,若能匹配表示驗證通過,否則驗證不通過。
防csrf攻擊組件:驗證系統(tǒng)中所有請求,首先查詢當前請求url是否在系統(tǒng)中的鑒權資源url庫中存在,若存在則放行;若不存在,需驗證當前請求url是否設置成了系統(tǒng)防csrf攻擊白名單,是白名單則放行,不是則結束請求。
防csrf攻擊白名單配置在web-inf\conf\spring-security.xml配置文件中,配置文件由spring框架加載。
防doc攻擊組件:驗證系統(tǒng)中所有請求在時間周期內的發(fā)起次數是否超過攻擊次數閾值,未超過則繼續(xù)放行;超過了則結束每個請求,直到訪問頻率恢復正常。從而防止惡意攻擊。
時間周期和攻擊次數閾值配置在web-inf\conf\spring-security.xml配置文件中(該配置文件名稱和路徑僅為舉例,任何指定路徑和配置文件名稱均可實現相應功能,因此本示例不代表任何限定),配置文件由spring框架加載。
cookie安全處理組件:系統(tǒng)檢測當前請求是否是cookie安全白名單,如果是白名單則不作處理;如果不是白名單,則設置響應的cookie為安全cookie:設置secure和httponly屬性為true;secure為true,表示cookie會被以安全的形式向服務器傳輸,也就是只能在https連接中被瀏覽器傳遞到服務器端進行會話驗證,如果是http連接則不會傳遞該信息,所以不會被竊取到cookie的具體內容。httponly為true,那么通過程序(js腳本、applet等)將無法讀取到cookie信息,這樣能有效的防止xss攻擊。
權限過濾組件:將所有的資源和權限對應關系建立起來,即定義某一資源可以被哪些角色訪問。等用戶登錄系統(tǒng)時,決定當前用戶具有的角色,是否有足夠的權限去訪問某些資源;最終呈現他可訪問的資源。用戶進入系統(tǒng)后,發(fā)起的所有請求也要經過該組件,決定當前用戶是否發(fā)起了超過其權限的請求。
具體運作時,如圖2所示,app的使用者向app頁面(交互式數據系統(tǒng)的人機交互輸入)輸入請求,app頁面將該請求通過數據輸入接口發(fā)送至防護模塊,防護模塊中的各個模塊按照指定順序依次對請求數據進行安全檢測,圖2中給出了各個模塊進行檢測的示例,如url是否授權檢測,請求是否具有攻擊性檢測,參數檢驗檢測,......,直至完成所有檢測后,將檢測通過結果以及數據通過數據輸出接口返給app具體執(zhí)行引擎(交互式數據系統(tǒng)的數據處理模塊);引擎將響應結果反饋至頁面;在一些情況下,反饋結果需對是否跨站腳本攻擊進行處理,此時,頁面將跨站腳本攻待檢測數據通過數據輸入接口發(fā)送至防護模塊進行檢測,通過檢測后在頁面顯示。應注意的是,在防護模塊的檢測過程中,任何一項檢測沒有通過,則該請求或者數據不會被傳遞至app具體執(zhí)行引擎(交互式數據系統(tǒng)的數據處理模塊),從而防止app的具體核心處理模塊被攻擊。
另一具體示例中,用戶操作發(fā)起請求后,按照如下步驟進行處理(1)進入cas單點退出過濾器。如果是退出系統(tǒng)的請求,則取消登錄憑證,并自動調轉到登錄頁面;(2)進入請求前綴校驗過濾器。如果是調用系統(tǒng)接口請求,則驗證請求的用戶身份憑證是否合法;(3)進入從哪個頁面鏈接過來的驗證過濾器,保障請求是否從信任的頁面鏈接發(fā)起的;(4)進入url是否在系統(tǒng)已經配置的驗證過濾器,保障請求的是合法資源;(5)進入參數校驗組件,保障請求參數合法有效;(6)進入防csrf攻擊組件;(7)進入防doc攻擊組件;(8)進入權限過濾組件;(9)如果編排時配置了個性化/隱私保護的安全能力,則進入個性化/隱私保護安全組件;(10)實際業(yè)務處理過程(例如數據查詢或api接口調用等);在此處理過程中,調用日志組件,記錄操作日志和運行日志;(11)完成業(yè)務處理后,進入cookie安全處理組件;(12)最終響應用戶請求。
圖3則給出了個性化安全需求的動態(tài)解析及校驗處理流程;app的使用者向頁面發(fā)出請求;安全模塊接收頁面?zhèn)鬏數男畔ⅲζ溥M行安全檢查;如果通過檢查則由app執(zhí)行引擎處理尋找請求與安全配置信息間的關聯性;將對應的安全配置信息發(fā)送至存儲介質;由app執(zhí)行引擎解析安全處理類型;動態(tài)執(zhí)行安全檢查;通過驗證后,調用ui運行期執(zhí)行業(yè)務;返回響應結果并在頁面顯示。