產生原因:對使用者提交的非法字元沒有做過濾,主要是cr,lf字元的輸入。
實現方法:通過構造request,使伺服器返回響應時,將構造的request中資料一併返回,構造的資料可能是乙個http響應的資料報,這樣伺服器就等於返回了兩個response。
例如:request a -----> web server (r1, r2)
request b -----> web server (本應該是r3)
web server(r1) -----> a
web server (r2) -----> b
頁面:/redir_lang.jsp
<% response.sendredirect(「/by_lang.jsp lang=」+request.getparameter(「lang」)); %>
當提交english作為引數時,會轉到/by_lang.jsp?lang=english,常規的響應如下:
……………………….略
當提交english時,該輸入的資料會傳給web伺服器,然後web伺服器會返回相應的響應,因為該響應是乙個跳轉響應,所以他會攜帶輸入的內容。所以如果輸入的不是english,而是乙個http響應包同時通過cr和lf截斷資料報,那麼就可以為造出來乙個頁面或者響應。
例如,在request的lang後追加如下內容:
伺服器返回的數
connection:close第乙個響應是真實的跳轉響應
第二個響應則是我們構造的乙個響應包
還可以構造乙個偽造的web頁面
request請求:
這樣伺服器對於第乙個請求返回:
對於第二個請求返回:
shamaz這樣就可以給使用者乙個偽造的頁面。
參考:
http請求,響應
http請求頭 accept 用於告訴伺服器,客戶機所支援的資料型別 accept charset 用於告訴伺服器,客戶機所採用的碼表 accept encoding 用於告訴伺服器,客戶機所支援的資料壓縮格式 accept language 用於告訴伺服器,客戶機的語法環境 host 用於告訴伺服...
Http響應協議
響應首行 響應頭資訊 server apache coyote 1.1 content type text html charset utf 8 content length 777 date sat,09 feb 2012 18 30 52 gmt 空行,下面是響應正文,即html 響應協議為ht...
HTTP響應訊息
http協議 1.請求訊息 客戶端給伺服器端的資料 資料格式 1.請求行 2.請求頭 3.請求空行 4.請求體 2.伺服器端傳送給客戶端的資料 資料格式 1.響應行 1.組成 協議 版本 響應狀態碼 狀態碼描述行 2.狀態碼 伺服器告訴客戶端瀏覽器本次請求和響應的乙個狀態 1.狀態碼都是3位數字 2...