當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于μClinux下Boa的CGI技術(shù)實現(xiàn)

引 言
   
隨著企業(yè)安全意識的增強以及現(xiàn)代化管理水平的提高,對設(shè)備的遠程監(jiān)控在工業(yè)控制系統(tǒng)中得到了越來越廣泛的應(yīng)用。近年來,Web技術(shù)廣泛普及,把Web技術(shù)應(yīng)用在這種監(jiān)控系統(tǒng)中,可以讓操作者通過瀏覽器維護和管理監(jiān)測點,查看監(jiān)測數(shù)據(jù)。同時,監(jiān)測中心的服務(wù)程序也可以很方便地通過Web把監(jiān)測數(shù)據(jù)取回來,進行進一步的處理,十分方便。
    μClinux是應(yīng)用于微控制領(lǐng)域的一種嵌入式Linux操作系統(tǒng),它源碼開放,移植性好,支持多種硬件平臺和幾乎所有常見網(wǎng)絡(luò)通信協(xié)議,支持文件系統(tǒng)豐富,是一個功能完整的嵌入式操作系統(tǒng)。并且有大量優(yōu)秀的開放源代碼的應(yīng)用軟件和開發(fā)工具可用,因此,采用μClinux作為操作平臺,使用Web技術(shù)進行遠程在線監(jiān)測系統(tǒng)的開發(fā)。

1 嵌入式Web服務(wù)器
   
為了能夠通過Web來維護和管理遠程在線監(jiān)控系統(tǒng),必須選擇一個恰當?shù)腤eb服務(wù)器,不但要求所選擇的Web服務(wù)器支持動態(tài)Web技術(shù),也要求它能夠在嵌入式系統(tǒng)中穩(wěn)定地工作。
1.1 Web服務(wù)器原理和功能
   
嵌入式Web服務(wù)器以TCP/IP協(xié)議棧為基礎(chǔ)構(gòu)建,需要實現(xiàn)HTTP,TCP和UDP等協(xié)議。任何一個客戶機,都可以通過HTTP協(xié)議與嵌入式Web Server建立連接。嵌入式Web服務(wù)器在Web瀏覽器和設(shè)備之間提供了統(tǒng)一的GUI接口,使得客戶端可以像在本地一樣透明地監(jiān)控管理設(shè)備狀況。
    嵌入式Web服務(wù)器的主要功能有:響應(yīng)多個客戶的實時HTTP請求,并為每個客戶建立連接,這是嵌入式Web服務(wù)器的首要功能;對設(shè)備的實時監(jiān)控管理,參數(shù)的在線查看與配置等;對設(shè)備訪問的安全控制機制,包括SSL、用戶口令等;實現(xiàn)設(shè)備的故障智能報警。
1.2 Boa的特點
   
在μClinux中常用的Web服務(wù)器有:Boa,thttpd,httpd,其中httpd只支持靜態(tài)頁面,顯然不適合高級應(yīng)用,thttpd和Boa所提供的功能基本一樣,但是thttpd在運行過程中所需要的資源要遠大于Boa,因此使用Boa作為該嵌入式系統(tǒng)的Web服務(wù)器。系統(tǒng)的軟件開發(fā)模型選用B/S模型。
    Boa是一個高性能的單任務(wù)型Web服務(wù)器,可以運行在幾乎所有的類Unix的平臺上,Boa支持認證,支持CGI,功能比較全,占用資源也少,非常適合于用在資源有限的嵌入式系統(tǒng)中,目前Boa已經(jīng)以源碼的形式包含在μClinux的發(fā)行包中。

2 Boa源碼分析
    在此通過以下對Boa的源代碼進行簡單的分析,來提出解決避免惡意攻擊的安全解決方案。
2.1 Boa工作流程
   
圖1是Boa工作流程圖。Boa從新到達的套接字獲得HTTP請求(由一個request結(jié)構(gòu)來存儲),并將其保存在隊列當中。首先,get_request()將從套接字獲得的數(shù)據(jù)全部保存在request→header_line中,然后調(diào)用process_request()來處理在隊列中的每一個請求。根據(jù)request結(jié)構(gòu)中status所表示的不同狀態(tài),將進行不同的處理。如果這個請求符合HTTP協(xié)議,則會調(diào)用process_option_Iine()將一些頭部信息填寫到request結(jié)構(gòu)中完成這些環(huán)境變量的設(shè)置,隨后process_header_end()會對用戶進行驗證。如果驗證通過則判斷request結(jié)構(gòu)中的is_cgi,非0則是CGI程序,調(diào)用init_cgi()函數(shù)進行處理,為0則是靜態(tài)頁面,調(diào)用init_get()函數(shù)進行處理。

2.2 init_get函數(shù)工作流程
    圖2為處理靜態(tài)頁面請求的init_get()函數(shù)的基本工作流程。圖2中process_get()函數(shù)完成的功能為將request結(jié)構(gòu)中的data_men字符串返回套接字并在用戶瀏覽器上顯示相應(yīng)的內(nèi)容。

2.3 init_cgi函數(shù)工作流程
    對CGI程序的處理函數(shù)init_cgi()首先調(diào)用一系列函數(shù)完成對CGI環(huán)境變量的設(shè)置,create_common_env(),complete_env()完成了大多數(shù)CGI環(huán)境變量的注冊工作。采用PIPE(管道)方式,就是將CGI程序的輸出重定向到管道,然后Boa從管道讀取并轉(zhuǎn)發(fā)給客戶端瀏覽器。整個流程結(jié)束后,返回到主函數(shù)的無限循環(huán)中等待處理下一個套接字連接的到達。init_cgi()具體工作流程如圖3所示。
    管道讀取函數(shù)read_from_pipe()完成的主要功能是從套接字req→data_fd讀取數(shù)據(jù)到req→header_end中,并進行處理;然后修改req→status=PIPE_WRITE來調(diào)用write_from_pipe()將req→header_line的內(nèi)容返回套接字fd,并在用戶瀏覽器上顯示相應(yīng)的內(nèi)容。

[!--empirenews.page--]3 Boa源碼改進
    經(jīng)過上述對Boa源碼的分析可以看出,Boa服務(wù)器將根據(jù)瀏覽器地址欄中輸入的文件路徑調(diào)用相應(yīng)的CGI程序或靜態(tài)頁面顯示在瀏覽器中。這種方式使入侵者很容易找到源文件,隱蔽性和安全性極差。這里在對Boa源碼進行修改后,在瀏覽器中輸入對該系統(tǒng)指定的靜態(tài)網(wǎng)頁類型的請求后,Boa服務(wù)器會自動進行文件路徑重定向,調(diào)用相應(yīng)的CGI程序進行處理,而用戶不會察覺到這一變化。從而使用戶無法得知源文件的路徑,增加了程序的隱蔽性和安全性。
    在源代碼判斷是否CGI程序之前添加判斷:如果文件路徑(req→pathname)的后綴代表本系統(tǒng)指定的靜態(tài)頁面,則將其修改為實際CGI程序所在路徑,并更改is_cgi變量為“CGI”。經(jīng)過這樣修改后,程序會調(diào)用CGI程序的處理函數(shù)init_cgi(),使原本的靜態(tài)請求變成動態(tài)的CGI請求。修改后的Boa流程如圖4所示(虛線為添加部分)。

4 CGI程序設(shè)計技術(shù)
4.1 CGI簡介

    到目前為止,實現(xiàn)動態(tài)Web頁面有4種技術(shù)可供選擇:CGI,ASP,PHP和JSP。因為目前μClinux還不支持ASP,PHP等動態(tài)Web頁面技術(shù),因此在該實現(xiàn)中選擇了CGI。
    CGI規(guī)定Web服務(wù)器調(diào)用其他可執(zhí)行程序的接口協(xié)議標準,提供Web服務(wù)器一個執(zhí)行外部程序的通道。這種服務(wù)端技術(shù)使得瀏覽器和服務(wù)器之間具有交互性。CGI程序?qū)儆谝粋€外部程序,需要編譯成可執(zhí)行文件,以便在服務(wù)端運行。Web服務(wù)器通過調(diào)用CGI程序?qū)崿F(xiàn)與Web瀏覽器的交互,也就是CGI程序接收Web瀏覽器發(fā)送給Web服務(wù)器的信息,進行處理,將響應(yīng)結(jié)果再回送給Web服務(wù)器及Web瀏覽器。
4.2 CGI程序工作原理
    CGI工作原理如下:客戶端的用戶通過瀏覽器完成一定輸入工作后,向服務(wù)器發(fā)出。HTTP請求(稱為CGI請求),服務(wù)器守護進程,接收到該請求后,就創(chuàng)建一個子進程(稱為CGI進程)。該CGI子進程將CGI請求的有關(guān)數(shù)據(jù)設(shè)置成環(huán)境變量,在CGI程序與服務(wù)器間建立兩臺數(shù)據(jù)通道,然后啟動URL指定的CGI程序。子進程通過標準輸出流將處理結(jié)果傳遞給服務(wù)器守護進程,守護進程再將處理結(jié)果作為應(yīng)答消息回送到客戶端。一個CGI程序的任務(wù)分為輸入任務(wù)和輸出任務(wù)。輸入任務(wù)根據(jù)請求方法的不同,從環(huán)境變量QUE-RY_STRING或標準輸入中讀取用戶輸入數(shù)據(jù)。輸出任務(wù)生成HTTP響應(yīng)頭標內(nèi)容,如消息正文的數(shù)據(jù)類型和數(shù)據(jù)長度等;生成HTTP響應(yīng)消息正文內(nèi)容,如動態(tài)生成的HTML文件內(nèi)容。
4.3 CGI程序改進方法
    傳統(tǒng)的CGI程序編寫方法簡單地用printf()函數(shù)來產(chǎn)生HTML源代碼。在輸出的字符串中如果有雙引號,在其前面必須有一個后斜字符,這是因為整個HTML代碼串已經(jīng)在雙引號內(nèi),所以HTML代碼串中的雙引號符必須用一個后斜字符來轉(zhuǎn)義。這樣的CGI程序代碼冗長,不利于閱讀,且容易出錯。這里所采用的方法是預(yù)先將需要顯示的網(wǎng)頁保存成文件,采用仿“ASP”的技術(shù),將需要動態(tài)顯示的內(nèi)容寫入符號“|%”與“|”之間。并設(shè)計配置文件,指定替換內(nèi)容。CGI程序逐行讀取源文件,將符號“|%”與“|”之間的內(nèi)容替換成配置文件指定的內(nèi)容。
    HTML源文件的格式設(shè)計如下:
    單選按鈕:


    CGI程序找出“|%”與“|”之間的關(guān)鍵字key,如果key中不包含“@”則直接替換與之對應(yīng)的值;如果包含“@”,將關(guān)鍵字分為三部分:replacestr=checked,key=system_mode,keyvalue=route。尋找數(shù)據(jù)結(jié)構(gòu)中與key相等的name[i],將對應(yīng)的value[i]與keyval-ue比較,如果相等則替換為type的值。具體流程如圖5所示。

    當在任意用戶端瀏覽器中輸入目標板的IP地址及對應(yīng)的文件名后,就會顯示如圖6所示界面。其中在地址欄中輸入的路徑已經(jīng)按照本文之前的方法被Boa服務(wù)器修改,實際路徑為:http://192.168.0.1/cgi-bin/qs2.cgi。因此用戶無法找到源文件,減小了被惡意用戶攻擊的可能性。圖5中選中單選框和添加文本框內(nèi)容這些操作都是經(jīng)過CGI程序替換顯示的配置文件中的內(nèi)容。修改這些內(nèi)容后點擊下一步程序會自動保存到配置文件中,下一次再進入頁面后就會顯示上一次保存的結(jié)果。

5 結(jié) 語
   
這里通過對Boa源代碼的分析,提供了較為完善的文件隱藏機制,該研究為Web服務(wù)器在嵌入式設(shè)備遠程監(jiān)控應(yīng)用中提出了一個更為安全的解決方案。此外,通過對傳統(tǒng)的CGI程序設(shè)計方法進行改進,可顯著減少CGI程序代碼量,使其便于修改升級。這種方法完全可以應(yīng)用在其他嵌入式系統(tǒng)中,因此具有廣泛的應(yīng)用意義。系統(tǒng)也有一些尚需改進的地方,如:文件路徑隱藏方式有些簡單;CGI程序配置文件沒有進行加密;這些都有待今后進一步研究。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉