Boa Web Server 缺陷報告及其修正方法

2021-05-22 02:53:29 字數 4084 閱讀 4338

綜述

boa 作為一種輕巧實用的 web 伺服器廣泛應用於嵌入式裝置上,

但 boa 對實現動態網頁的 cgi  的支援上仍存在一些缺陷,

本文描述了 boa 對 cgi 的 status/location 的支援的缺陷及其修正方法.

版本:所有版本 (0.94.13)

缺陷:boa 解析 cgi 應答頭時不能完整處理 status 和 location

缺陷描述:

cgi/1.1 標準規定, cgi 指令碼可以通過 status 設定 http 應答狀態(如, status: 500 internal error) 和

location 進行位址重定向 (如, location: www.***.com), 而不管它們在應答頭中的位置.

boa 支援 stauts 和 location 兩種應答頭, 但它的實現僅能正確處理 stauts 和 location 在應答第一行的

cgi 應答. 這將給 cgi 程式的移植帶來很多不便, 進而影響 boa 作為web server 的功能的發揮.

影響功能:

asp/php/jsp/perl/... 等的 header, redirect, ... 等都會應用到 stauts/location 進行設定應答狀態和

位址重定向. boa 的該實現將影響 cgi 指令碼正常功能的使用.

缺陷功能對比(對status/location的支援程式):

完全支援                        完全支援                * 部分支援                 完全支援               完全支援

缺陷分析

cgi 應用程式進行應答時, 可以 http 頭進行有限的控制. 如,設定客戶端不快取頁面可用下面的 c 指令碼,

http/1.0: printf("pragma: no-cache/n"); 或

如果, 同時還需要告訴瀏覽器進行設定 cookie 和控制相應狀態(200 ok) 或位址重定向,

那麼就必須輸出多行 http 頭控制語句, cgi 支援兩個解析頭 "status: " 和 "loction: ",

即協議規定, web 伺服器支援解析頭時能使用 "status: " 進行應答狀態控制, 使用 "location: " 進行位址重定向,

並為應答新增狀態頭 "http/1.0 302 moved temporarily/n" 或 "http/1.1 302 found/n".

而不管它們在 cgi 應答頭的什麼位置.

分析 boa source code:

cgi_header.c  line 82-136 容易發現, boa 只解析 cgi 應答的第一行, 是否為 "status: ", "location: ", 如下所示

2324         int process_cgi_header(request * req)

25        

47             }

48             if (req->******)

55             if (!strncasecmp(buf, "status: ", 8)) else if (!strncasecmp(buf, "location: ", 10)) else

107                req->status = done;

108                return 1;

109            } else

127                howmuch = req->header_end - req->header_line;

128       

129                if (dest + howmuch > req->buffer + buffer_size)

138          memmove(dest, req->header_line, howmuch);

139          req->buffer_end += howmuch;

140          req->header_line = req->buffer + req->buffer_end;

141          req->header_end = req->header_line;

142          req_flush(req);

143          if (req->method == m_head)

144              return 0;

145      }

146      return 1;

147  }

148149

修正方法

cgi 應答頭包括多行, 我們必須對其進行逐行分析, 並作出正確的應答.

下面是修改好的源程式, 即將原來的 82-136 (即相當下文#else, #endif內部分) 替換成如下**:

複製**

缺陷和缺陷報告

文章目錄 一 缺陷的基本概述 1 缺陷的定義 重要 2 缺陷屬性 二 缺陷的生命週期 重要 三 缺陷的識別 四 缺陷報告 五 測試需求 測試用例 缺陷報告的關係?軟體未實現產品說明書要求的功能 軟體出現了產品說明書指明不該出現的功能 軟體實現了產品說明書未提到的功能 軟體未實現產品說明書雖未明確提及...

缺陷型別 缺陷種類介紹

軟體缺陷的定義 軟體缺陷,常常又被叫做bug,從產品內部看,缺陷是軟體產品開發或維護過程中存在的錯誤 毛病等各種問題 從產品外部看,缺陷是系統所需要實現的某種功能的失效或違背。按照軟體缺陷的產生原因,可以將其劃分為不同的缺陷類別 1 功能不正常 簡單地說就是所應提供的功能,在使用上並不符合產品設計規...

晶體缺陷 點缺陷

在晶體中,位於點陣結點上的原子並非是靜止的,而是以其平衡位置為中心做熱振動。原子的振動能是按機率分布,有起伏漲落的。當某一原子具有足夠大的振動能而使振幅增大到一定限度時,就可能克服周圍原子對它的制約作用,跳離其原來的位置,使點陣中形成空結點,稱為空位。離開平衡位置的原子有三個去處 一是躍遷到晶體表面...