PHP漏洞全解 八 HTTP響應拆分

2021-06-22 17:02:33 字數 3698 閱讀 4375

http請求的格式

1)請求資訊:例如「get /index.php http/1.1」,請求index.php檔案

2)表頭:例如「host: localhost」,表示伺服器位址

3)空白行

4)資訊正文

「請求資訊」和「表頭」都必須使用換行字元(crlf)來結尾,空白行只能包含換行符,不可以有其他空格符。

下面例子傳送http請求給伺服器www.yhsafe.com

get /index.php http/1.1↙ //請求資訊

host:www.yhsafe.com↙ //表頭

↙ //空格行

↙↙符號表示回車鍵,在空白行之後還要在按乙個空格才會傳送http請求,http請求的表頭中只有host表頭是必要的餓,其餘的http表頭則是根據http請求的內容而定。

http請求的方法

1)get:請求響應

2)head:與get相同的響應,只要求響應表頭

3)post:傳送資料給伺服器處理,資料報含在http資訊正文中

4)put:上傳檔案

5)delete:刪除檔案

6)trace:追蹤收到的請求

7)options:返回伺服器所支援的http請求的方法

8)connect:將http請求的連線轉換成透明的tcp/ip通道

http響應的格式

伺服器在處理完客戶端所提出的http請求後,會傳送下列響應。

1)第一行是狀態碼

2)第二行開始是其他資訊

狀態碼包含乙個標識狀態的數字和乙個描述狀態的單詞。例如:

200是標識狀態的是數字,ok則是描述狀態的單詞,這個狀態碼標識請求成功。

http請求和響應的例子

開啟cmd輸入telnet,輸入open www.00aq.com 80

開啟連線後輸入

返回http響應的表頭

返回的首頁內容

使用php來傳送http請求

header函式可以用來傳送http請求和響應的表頭

函式原型

string是http表頭的字串

如果replace為true,表示要用目前的表頭替換之前相似的表頭;如果replace為false,表示要使用多個相似的表頭,預設值為true

http_response_code用來強制http響應碼使用http_response_code的值

例項:

// 開啟internet socket連線

$fp= 

fsockopen

(www.00aq.com, 80); 

// 寫入http請求表頭

); // http響應的字串

// 關閉internet socket連線

fclose($fp

); // 顯示http響應資訊

http響應拆分攻擊

http響應拆分是由於攻擊者經過精心設計利用電子郵件或者鏈結,讓目標使用者利用乙個請求產生兩個響應,前乙個響應是伺服器的響應,而後乙個則是攻擊者設計的響應。此攻擊之所以會發生,是因為web程式將使用者的資料置於http響應表頭中,這些使用者的資料是有攻擊者精心設計的。

可能遭受http請求響應拆分的函式包括以下幾個:

header(); setcookie(); session_id(); setrawcookie();

http響應拆分通常發生在:

location表頭:將使用者的資料寫入重定向的url位址內

set-cookie表頭:將使用者的資料寫入cookies內

例項:

header("location: "

. $_get

['page'

]); 

?> 

請求

host: localhost↙↙返回

訪問下面的鏈結,會直接出現乙個登陸視窗

轉換成可讀字串為:

content-type: text/html

content-type: text/html

content-length: 158

乙個http請求產生了兩個響應

防範的方法:

1)替換crlf換行字元

header("location: "

. strtr

($_get

['page'

], array

("\r"

=>

"",    

"\n"

=>

""))); 

?> 

2)使用最新版本的php

php最新版中,已經不允許在http表頭內出現換行字元

隱藏http響應表頭

apache中httpd.conf,選項servertokens = prod, serversignature = off

php中php.ini,選項expose_php = off

PHP漏洞全解

server php self 變數的值為當前頁面名稱 例 get.php中上述的表單 那麼我們提交 mysql close conn 使用post,不要使用get 傳遞表單字段時,一定要是用post,不要使用get,處理變數也不要直接使用 request http響應拆分 http請求的格式 1 ...

PHP漏洞全解 五 SQL注入

sql注入攻擊 sql injection 是攻擊者在表單中提交精心構造的sql語句,改動原來的sql語句,如果web程式沒有對提交的資料經過檢查,那麼就會造成sql注入攻擊。sql注入攻擊的一般步驟 1 攻擊者訪問有sql注入漏洞的站點,尋找注入點 2 攻擊者構造注入語句,注入語句和程式中的sql...

PHP漏洞全解 五 SQL注入

本文主要介紹針對php 的sql注入攻擊。所謂的sql注入攻擊,即一部分程式設計師在編寫 的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。使用者可以提交一段資料庫查詢 根據程式返回的結果,獲得某些他想得知的資料。sql注入攻擊 sql injection 是攻擊者在表單中提交精...