《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于μClinux下Boa的CGI技術(shù)實(shí)現(xiàn)
基于μClinux下Boa的CGI技術(shù)實(shí)現(xiàn)
摘要: μClinux是應(yīng)用于微控制領(lǐng)域的一種嵌入式Linux操作系統(tǒng),它源碼開(kāi)放,移植性好,支持多種硬件平臺(tái)和幾乎所有常見(jiàn)網(wǎng)絡(luò)通信協(xié)議,支持文件系統(tǒng)豐富,是一個(gè)功能完整的嵌入式操作系統(tǒng)。并且有大量?jī)?yōu)秀的開(kāi)放源代碼的應(yīng)用軟件和開(kāi)發(fā)工具可用,因此,采用μClinux作為操作平臺(tái),使用Web技術(shù)進(jìn)行遠(yuǎn)程在線(xiàn)監(jiān)測(cè)系統(tǒng)的開(kāi)發(fā)。
Abstract:
Key words :

  引 言

  隨著企業(yè)安全意識(shí)的增強(qiáng)以及現(xiàn)代化管理水平的提高,對(duì)設(shè)備的遠(yuǎn)程監(jiān)控在工業(yè)控制系統(tǒng)中得到了越來(lái)越廣泛的應(yīng)用。近年來(lái),Web技術(shù)廣泛普及,把Web技術(shù)應(yīng)用在這種監(jiān)控系統(tǒng)中,可以讓操作者通過(guò)瀏覽器維護(hù)和管理監(jiān)測(cè)點(diǎn),查看監(jiān)測(cè)數(shù)據(jù)。同時(shí),監(jiān)測(cè)中心的服務(wù)程序也可以很方便地通過(guò)Web把監(jiān)測(cè)數(shù)據(jù)取回來(lái),進(jìn)行進(jìn)一步的處理,十分方便。

  μClinux是應(yīng)用于微控制領(lǐng)域的一種嵌入式Linux操作系統(tǒng),它源碼開(kāi)放,移植性好,支持多種硬件平臺(tái)和幾乎所有常見(jiàn)網(wǎng)絡(luò)通信協(xié)議,支持文件系統(tǒng)豐富,是一個(gè)功能完整的嵌入式操作系統(tǒng)。并且有大量?jī)?yōu)秀的開(kāi)放源代碼的應(yīng)用軟件和開(kāi)發(fā)工具可用,因此,采用μClinux作為操作平臺(tái),使用Web技術(shù)進(jìn)行遠(yuǎn)程在線(xiàn)監(jiān)測(cè)系統(tǒng)的開(kāi)發(fā)。

  1 嵌入式Web服務(wù)器

  為了能夠通過(guò)Web來(lái)維護(hù)和管理遠(yuǎn)程在線(xiàn)監(jiān)控系統(tǒng),必須選擇一個(gè)恰當(dāng)?shù)?a class="innerlink" href="http://m.jysgc.com/tags/Web服務(wù)器" title="Web服務(wù)器" target="_blank">Web服務(wù)器,不但要求所選擇的Web服務(wù)器支持動(dòng)態(tài)Web技術(shù),也要求它能夠在嵌入式系統(tǒng)中穩(wěn)定地工作。

  1.1 Web服務(wù)器原理和功能

  嵌入式Web服務(wù)器以TCP/IP協(xié)議棧為基礎(chǔ)構(gòu)建,需要實(shí)現(xiàn)HTTP,TCP和UDP等協(xié)議。任何一個(gè)客戶(hù)機(jī),都可以通過(guò)HTTP協(xié)議與嵌入式Web Server建立連接。嵌入式Web服務(wù)器在Web瀏覽器和設(shè)備之間提供了統(tǒng)一的GUI接口,使得客戶(hù)端可以像在本地一樣透明地監(jiān)控管理設(shè)備狀況。

  嵌入式Web服務(wù)器的主要功能有:響應(yīng)多個(gè)客戶(hù)的實(shí)時(shí)HTTP請(qǐng)求,并為每個(gè)客戶(hù)建立連接,這是嵌入式Web服務(wù)器的首要功能;對(duì)設(shè)備的實(shí)時(shí)監(jiān)控管理,參數(shù)的在線(xiàn)查看與配置等;對(duì)設(shè)備訪(fǎng)問(wèn)的安全控制機(jī)制,包括SSL、用戶(hù)口令等;實(shí)現(xiàn)設(shè)備的故障智能報(bào)警。

  1.2 Boa的特點(diǎn)

  在μClinux中常用的Web服務(wù)器有:Boa,thttpd,httpd,其中httpd只支持靜態(tài)頁(yè)面,顯然不適合高級(jí)應(yīng)用,thttpd和Boa所提供的功能基本一樣,但是thttpd在運(yùn)行過(guò)程中所需要的資源要遠(yuǎn)大于Boa,因此使用Boa作為該嵌入式系統(tǒng)的Web服務(wù)器。系統(tǒng)的軟件開(kāi)發(fā)模型選用B/S模型。

  Boa是一個(gè)高性能的單任務(wù)型Web服務(wù)器,可以運(yùn)行在幾乎所有的類(lèi)Unix的平臺(tái)上,Boa支持認(rèn)證,支持CGI,功能比較全,占用資源也少,非常適合于用在資源有限的嵌入式系統(tǒng)中,目前Boa已經(jīng)以源碼的形式包含在μClinux的發(fā)行包中。

  2 Boa源碼分析

  在此通過(guò)以下對(duì)Boa的源代碼進(jìn)行簡(jiǎn)單的分析,來(lái)提出解決避免惡意攻擊的安全解決方案。

  2.1 Boa工作流程

  圖1是Boa工作流程圖。Boa從新到達(dá)的套接字獲得HTTP請(qǐng)求(由一個(gè)request結(jié)構(gòu)來(lái)存儲(chǔ)),并將其保存在隊(duì)列當(dāng)中。首先,get_request()將從套接字獲得的數(shù)據(jù)全部保存在request→header_line中,然后調(diào)用process_request()來(lái)處理在隊(duì)列中的每一個(gè)請(qǐng)求。根據(jù)request結(jié)構(gòu)中status所表示的不同狀態(tài),將進(jìn)行不同的處理。如果這個(gè)請(qǐng)求符合HTTP協(xié)議,則會(huì)調(diào)用process_option_Iine()將一些頭部信息填寫(xiě)到request結(jié)構(gòu)中完成這些環(huán)境變量的設(shè)置,隨后process_header_end()會(huì)對(duì)用戶(hù)進(jìn)行驗(yàn)證。如果驗(yàn)證通過(guò)則判斷request結(jié)構(gòu)中的is_cgi,非0則是CGI程序,調(diào)用init_cgi()函數(shù)進(jìn)行處理,為0則是靜態(tài)頁(yè)面,調(diào)用init_get()函數(shù)進(jìn)行處理。

Boa工作流程圖

  2.2 init_get函數(shù)工作流程

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

處理靜態(tài)頁(yè)面請(qǐng)求的init

  2.3 init_cgi函數(shù)工作流程

  對(duì)CGI程序的處理函數(shù)init_cgi()首先調(diào)用一系列函數(shù)完成對(duì)CGI環(huán)境變量的設(shè)置,create_common_env(),complete_env()完成了大多數(shù)CGI環(huán)境變量的注冊(cè)工作。采用PIPE(管道)方式,就是將CGI程序的輸出重定向到管道,然后Boa從管道讀取并轉(zhuǎn)發(fā)給客戶(hù)端瀏覽器。整個(gè)流程結(jié)束后,返回到主函數(shù)的無(wú)限循環(huán)中等待處理下一個(gè)套接字連接的到達(dá)。init_cgi()具體工作流程如圖3所示。

init

  管道讀取函數(shù)read_from_pipe()完成的主要功能是從套接字req→data_fd讀取數(shù)據(jù)到req→header_end中,并進(jìn)行處理;然后修改req→status=PIPE_WRITE來(lái)調(diào)用write_from_pipe()將req→header_line的內(nèi)容返回套接字fd,并在用戶(hù)瀏覽器上顯示相應(yīng)的內(nèi)容。

  3 Boa源碼改進(jìn)

  經(jīng)過(guò)上述對(duì)Boa源碼的分析可以看出,Boa服務(wù)器將根據(jù)瀏覽器地址欄中輸入的文件路徑調(diào)用相應(yīng)的CGI程序或靜態(tài)頁(yè)面顯示在瀏覽器中。這種方式使入侵者很容易找到源文件,隱蔽性和安全性極差。這里在對(duì)Boa源碼進(jìn)行修改后,在瀏覽器中輸入對(duì)該系統(tǒng)指定的靜態(tài)網(wǎng)頁(yè)類(lèi)型的請(qǐng)求后,Boa服務(wù)器會(huì)自動(dòng)進(jìn)行文件路徑重定向,調(diào)用相應(yīng)的CGI程序進(jìn)行處理,而用戶(hù)不會(huì)察覺(jué)到這一變化。從而使用戶(hù)無(wú)法得知源文件的路徑,增加了程序的隱蔽性和安全性。

 

  在源代碼判斷是否CGI程序之前添加判斷:如果文件路徑(req→pathname)的后綴代表本系統(tǒng)指定的靜態(tài)頁(yè)面,則將其修改為實(shí)際CGI程序所在路徑,并更改is_cgi變量為“CGI”。經(jīng)過(guò)這樣修改后,程序會(huì)調(diào)用CGI程序的處理函數(shù)init_cgi(),使原本的靜態(tài)請(qǐng)求變成動(dòng)態(tài)的CGI請(qǐng)求。修改后的Boa流程如圖4所示(虛線(xiàn)為添加部分)。

修改后的Boa流程

  4 CGI程序設(shè)計(jì)技術(shù)

  4.1 CGI簡(jiǎn)介

  到目前為止,實(shí)現(xiàn)動(dòng)態(tài)Web頁(yè)面有4種技術(shù)可供選擇:CGI,ASP,PHP和JSP。因?yàn)槟壳?mu;Clinux還不支持ASP,PHP等動(dòng)態(tài)Web頁(yè)面技術(shù),因此在該實(shí)現(xiàn)中選擇了CGI。

  CGI規(guī)定Web服務(wù)器調(diào)用其他可執(zhí)行程序的接口協(xié)議標(biāo)準(zhǔn),提供Web服務(wù)器一個(gè)執(zhí)行外部程序的通道。這種服務(wù)端技術(shù)使得瀏覽器和服務(wù)器之間具有交互性。CGI程序?qū)儆谝粋€(gè)外部程序,需要編譯成可執(zhí)行文件,以便在服務(wù)端運(yùn)行。Web服務(wù)器通過(guò)調(diào)用CGI程序?qū)崿F(xiàn)與Web瀏覽器的交互,也就是CGI程序接收Web瀏覽器發(fā)送給Web服務(wù)器的信息,進(jìn)行處理,將響應(yīng)結(jié)果再回送給Web服務(wù)器及Web瀏覽器。

  4.2 CGI程序工作原理

  CGI工作原理如下:客戶(hù)端的用戶(hù)通過(guò)瀏覽器完成一定輸入工作后,向服務(wù)器發(fā)出。HTTP請(qǐng)求(稱(chēng)為CGI請(qǐng)求),服務(wù)器守護(hù)進(jìn)程,接收到該請(qǐng)求后,就創(chuàng)建一個(gè)子進(jìn)程(稱(chēng)為CGI進(jìn)程)。該CGI子進(jìn)程將CGI請(qǐng)求的有關(guān)數(shù)據(jù)設(shè)置成環(huán)境變量,在CGI程序與服務(wù)器間建立兩臺(tái)數(shù)據(jù)通道,然后啟動(dòng)URL指定的CGI程序。子進(jìn)程通過(guò)標(biāo)準(zhǔn)輸出流將處理結(jié)果傳遞給服務(wù)器守護(hù)進(jìn)程,守護(hù)進(jìn)程再將處理結(jié)果作為應(yīng)答消息回送到客戶(hù)端。一個(gè)CGI程序的任務(wù)分為輸入任務(wù)和輸出任務(wù)。輸入任務(wù)根據(jù)請(qǐng)求方法的不同,從環(huán)境變量QUE-RY_STRING或標(biāo)準(zhǔn)輸入中讀取用戶(hù)輸入數(shù)據(jù)。輸出任務(wù)生成HTTP響應(yīng)頭標(biāo)內(nèi)容,如消息正文的數(shù)據(jù)類(lèi)型和數(shù)據(jù)長(zhǎng)度等;生成HTTP響應(yīng)消息正文內(nèi)容,如動(dòng)態(tài)生成的HTML文件內(nèi)容。

  4.3 CGI程序改進(jìn)方法

  傳統(tǒng)的CGI程序編寫(xiě)方法簡(jiǎn)單地用printf()函數(shù)來(lái)產(chǎn)生HTML源代碼。在輸出的字符串中如果有雙引號(hào),在其前面必須有一個(gè)后斜字符,這是因?yàn)檎麄€(gè)HTML代碼串已經(jīng)在雙引號(hào)內(nèi),所以HTML代碼串中的雙引號(hào)符必須用一個(gè)后斜字符來(lái)轉(zhuǎn)義。這樣的CGI程序代碼冗長(zhǎng),不利于閱讀,且容易出錯(cuò)。這里所采用的方法是預(yù)先將需要顯示的網(wǎng)頁(yè)保存成文件,采用仿“ASP”的技術(shù),將需要?jiǎng)討B(tài)顯示的內(nèi)容寫(xiě)入符號(hào)“|%”與“|”之間。并設(shè)計(jì)配置文件,指定替換內(nèi)容。CGI程序逐行讀取源文件,將符號(hào)“|%”與“|”之間的內(nèi)容替換成配置文件指定的內(nèi)容。

  HTML源文件的格式設(shè)計(jì)如下:

  單選按鈕:

程序

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

具體流程

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

演示程序頁(yè)面

  5 結(jié) 語(yǔ)

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

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
99精品免费| 欧美一区二区三区另类| 国产精品一二三视频| 欧美日本视频在线| 欧美夫妇交换俱乐部在线观看| 欧美在线影院在线视频| 午夜精品区一区二区三| 亚洲欧美日韩在线播放| 亚洲欧美日韩精品久久亚洲区| 亚洲午夜伦理| 亚洲网友自拍| 亚洲性感美女99在线| 亚洲视频第一页| 亚洲永久免费| 午夜精品国产精品大乳美女| 亚洲欧美另类在线| 午夜欧美大尺度福利影院在线看| 亚洲欧美日韩精品| 欧美一区在线看| 欧美一区二区视频网站| 欧美在线啊v一区| 久久久久一区| 乱人伦精品视频在线观看| 久久在线免费观看| 美女视频黄 久久| 免费人成精品欧美精品| 免费高清在线一区| 老司机午夜精品视频| 欧美丰满少妇xxxbbb| 蜜臀91精品一区二区三区| 久久日韩精品| 久久久久综合| 久久久蜜臀国产一区二区| 久久经典综合| 欧美资源在线观看| 久久国产精品99国产| 欧美一区国产一区| 欧美影院在线播放| 久久精品国产99| 久久影音先锋| 久久精品国产亚洲一区二区| 欧美专区福利在线| 久久国产精品久久久久久| 欧美专区亚洲专区| 欧美伊人久久久久久久久影院 | 亚洲美女在线一区| 亚洲精选久久| 日韩一区二区精品视频| 99成人在线| 亚洲一区二区免费在线| 亚洲一区二区三| 亚洲欧美一区在线| 久久久久成人精品| 老司机午夜免费精品视频| 久久亚洲春色中文字幕| 欧美成人r级一区二区三区| 欧美成ee人免费视频| 欧美精品www| 欧美精品首页| 欧美日韩在线三级| 亚洲欧美中文日韩v在线观看| 久久黄色小说| 欧美一区二区三区四区在线| 久久久久久久一区二区三区| 久久人人爽国产| 欧美另类亚洲| 国产精品视频免费一区| 国内精品久久久久久久影视麻豆| 亚洲高清视频在线观看| 在线视频欧美一区| 香蕉亚洲视频| 亚洲人午夜精品| 亚洲影院在线观看| 久久人人97超碰国产公开结果| 欧美金8天国| 国产精品美女久久久免费| 国内成人自拍视频| 亚洲精品日韩在线| 亚洲欧美精品在线| 亚洲精品久久久久久久久久久久| 一区二区三区免费在线观看| 欧美一区二区三区在| 免费在线亚洲欧美| 国产精品久久久久久久app| 狠狠狠色丁香婷婷综合久久五月 | 欧美一区二区在线观看| 亚洲精品无人区| 香蕉乱码成人久久天堂爱免费| 麻豆精品国产91久久久久久| 欧美亚日韩国产aⅴ精品中极品| 国产亚洲欧美色| 亚洲精品偷拍| 欧美一区亚洲二区| 一区二区三区视频在线看| 亚洲一区在线观看免费观看电影高清| 亚洲欧美一区二区精品久久久| 久久成人国产精品| 蜜臀av性久久久久蜜臀aⅴ| 国产精品亚发布| 在线免费高清一区二区三区| 亚洲一级黄色片| 亚洲夜晚福利在线观看| 久久综合狠狠| 国产精品入口66mio| 亚洲区在线播放| 亚洲性图久久| 欧美一区二区三区四区在线观看| 亚洲精品国产精品国自产在线 | 亚洲国产视频一区二区| 久久精品成人一区二区三区| 欧美日韩国产综合视频在线观看中文| 国产亚洲综合在线| 中国成人亚色综合网站| 亚洲日韩第九十九页| 久久精品夜色噜噜亚洲a∨| 欧美体内she精视频在线观看| 国产日韩欧美在线观看| 日韩视频一区二区在线观看| 久久av资源网| 欧美一区成人| 欧美午夜电影完整版| 亚洲黄色一区| 久久精品av麻豆的观看方式| 午夜精品视频网站| 欧美调教vk| 亚洲精品久久| 亚洲欧洲在线视频| 久久女同互慰一区二区三区| 国产嫩草一区二区三区在线观看| 一区二区高清视频在线观看| 亚洲人成网站在线播| 久久一区二区三区av| 国产夜色精品一区二区av| 亚洲自拍偷拍色片视频| 亚洲一区综合| 欧美日韩综合在线| 亚洲精品日韩激情在线电影| 亚洲精品免费看| 嫩草国产精品入口| 国产欧美亚洲视频| 欧美一区二区精品久久911| 欧美在线你懂的| 国产色视频一区| 欧美亚洲一区二区三区| 久久国产精品电影| 国产日韩一区| 久久国产精品久久久久久| 久久久久99| 尤物在线观看一区| 亚洲国产老妈| 欧美jizzhd精品欧美喷水| 在线精品国产欧美| 欧美一区免费视频| 欧美一区二区三区免费观看视频 | 免费观看成人网| 亚洲第一久久影院| 亚洲免费观看高清在线观看| 欧美激情精品| 日韩亚洲一区在线播放| 亚洲一区二区在线播放| 欧美日韩免费精品| 中国av一区| 欧美一区国产一区| 国语自产在线不卡| 91久久精品国产91久久性色tv| 欧美激情a∨在线视频播放| 99国内精品| 午夜精品久久久久久久久久久久| 国产精品你懂的| 欧美一区二区三区四区在线观看地址| 久久久噜噜噜久久人人看| 在线播放不卡| 欧美在线观看一二区| 久久久久国产精品厨房| 伊人一区二区三区久久精品| 日韩午夜高潮| 国产精品成人一区二区三区吃奶| 亚洲欧美成人一区二区在线电影| 久久精品91| 亚洲国产一区二区三区青草影视 | 欧美在线观看视频在线| 欧美成人蜜桃| 国产精品99久久久久久久vr| 亚洲男人的天堂在线观看| 国产视频一区二区三区在线观看| 午夜精品久久久久久久99水蜜桃| 久久午夜电影| 亚洲欧洲精品一区二区| 亚洲一区在线观看免费观看电影高清| 国产欧美69| 亚洲国产美女| 欧美吻胸吃奶大尺度电影| 性18欧美另类| 欧美精品亚洲一区二区在线播放| 亚洲性图久久| 免播放器亚洲一区| 亚洲精品九九| 久久国产日韩| 日韩午夜黄色| 久久视频一区二区|