2014-01-21 3 views
0

Phil Sturgeon의 REST 컨트롤러를 사용하여 API를 작성하고 있습니다. API 인증은 API 키를 사용하여 수행됩니다. 현재이 데이터베이스에 api_keys 테이블에 정의 된 하나 개의 열쇠는 내가 설정 한 내 클라이언트를 다음 컬 요청을 통해이 키를 사용하여 API에 액세스 할 수 :Codeigniter 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) 

실제로 설정되어 있지 않습니다. 우리 사무실의 3 명은 소스 관리 저장소에서 체크 아웃 한 것과 정확히 똑같은 코드를 가지고 있습니다. 우리 중 2 명은 Apache 2.4.4를 실행하고 다른 하나는 Apache 2.2.24를 실행하고 있습니다. 2.4.4를 실행하는 우리 둘 다 잘못된 API 키 오류가 계속 발생하지만 2.2.24를 실행하는 사람에게는 문제가 없지만 아파치 문제라고 제안 할 수는 있지만 모든 문제를 해결할 수는 없습니다.

누구에게도 이런 식으로 일어나는 이유는 무엇입니까?

미리 감사드립니다.

답변

1

동일한 문제가있을 수있는 다른 사용자의 문제를 발견했습니다. Apache 2.4.x는 이제 헤더 삽입을 통한 일부 교차 사이트 스크립팅 공격을 완화하기 위해 헤더의 환경 변수에 대한 엄격한 변환을 시행합니다. 참조 :

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

"(밑줄 포함) 잘못된 문자가 포함 된 헤더는 지금 자동으로 삭제됩니다."