2014-01-21 142 views
0

我使用菲爾鱘魚的REST控制器構建一個API。 API認證使用API​​密鑰執行。目前有在數據庫上api_keys表只定義了一個鍵,我已經建立我的客戶通過以下捲曲請求訪問使用該密鑰的API:笨REST API管和認證

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $uri); 
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE); 
curl_setopt($ch, CURLOPT_MAXREDIRS, 1); 
curl_setopt($ch, CURLOPT_HEADER, TRUE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($ch, CURLOPT_TIMEOUT, 45); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/html; charset=utf-8', 
    'Accept: application/html', 
    'X_API_PREFIX: ' . $this->apiPrefix(), 
    'X_API_KEY: ' . $this->apiKey(), 
    "User-Agent: ShowHouse/" . ShowhouseClient::API_CLIENT_VERSION . '; PHP ' . phpversion() . ' [' . php_uname('s') . ']'; 
    'Accept-Language: ' . $this->_acceptLanguage 
)); 
    curl_setopt($ch, CURLOPT_USERPWD, $this->apiKey()); 

    if ('POST' == $method) 
    { 
     curl_setopt($ch, CURLOPT_POST, TRUE); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    } 
    else if ('PUT' == $method) 
    { 
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    } 
    else if('GET' != $method) 
    { 
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); 
    } 

    $response = curl_exec($ch); 

不過,我不斷收到無效的API密鑰從API服務器迴應。這個問題似乎是對在REST_Controller.php以下行:

if (($key = isset($this->_args[$api_key_variable]) ? $this->_args[$api_key_variable] : $this->input->server($key_name))) 

兩個

$this->_args[$api_key_variable] 

$this->input->server($key_name) 

實際上並沒有設置。辦公室裏我們三個人的代碼完全一樣,都是從源代碼控制庫中檢出的,唯一的區別是我們兩個人運行Apache 2.4.4,另一個運行Apache 2.2.24。我們兩個運行2.4.4的人都會得到一個無效的API密鑰錯誤,但對於運行2.2.24的人來說,這一切都可以正常工作,這意味着這是一個Apache問題,但我們無法深入其中。

任何人任何想法,爲什麼會發生這樣嗎?

在此先感謝。

回答

1

發現問題爲別人誰可能有同樣的問題。 Apache 2.4.x現在強制將頭部更嚴格地轉換爲環境變量,以通過頭部注入來緩解一些跨站點腳本攻擊。請參閱:

http://httpd.apache.org/docs/trunk/new_features_2_4.html

「包含無效字符(包括下劃線)插頭現在直接丟棄。」