2012-09-11 2 views
0

IPN을 사용하여 "지금 구매"(내 PayPal 계정에 저장되지 않음) 동적 버튼을 구현했으며 정상적으로 작동합니다 (예!).페이팔 - 암호화되지 않은 버튼 보안

누군가가 방화범 (예 : 금액)을 변경하면 내 IPN 청취자가 금액에 문제가 있다고 말하는 경우에도 거래가 paypal에도 유효하기 때문에 그의 보안에 대해서는 의문을 품습니다.

제 질문은 "php/codeigniter 라이브러리로 양식을 암호화 할 수 있습니까?"

IPN 리스너에서 금액을 확인하려했으나 paypal에서의 트랜잭션이 올바르게 계속되고 IPN에서 차단되지 않았기 때문에. 파이어 버그 (또는 유사한 소프트웨어)을 가진 사람들이 그들을 편집 할 수 있도록 동적으로 버튼을 암호화 할 수 있습니다

private function isVerifiedIPN(){ 

    $req = 'cmd=_notify-validate'; 
    $posts = $this->input->post(); 
    foreach ($posts as $key => $value){ 
     $value = urlencode(stripslashes($value)); 
     $req .= "&$key=$value"; 
    } 

    if($this->config->item('SIMULATION')) 
     $url = $this->config->item('SIMULATION_URL'); 
    else 
     $url = $this->config->item('PRODUCTION_URL'); 


    if(!$this->isVerifiedAmmount() || 
    !$this->isPrimaryPayPalEmail() || 
    !$this->isNotProcessed()){ 
     $req = ''; 
    } 

    $header = "POST /cgi-bin/webscr HTTP/1.0\r\n"; 
    $header .= "Host: $url\r\n"; //443 
    $header .= "Content-type: application/x-www-form-urlencoded\r\n"; 
    $header .= "Content-length: " . strlen($req) . "\r\n\r\n"; 

    $fp = fsockopen ("ssl://$url", 443, $errno, $errstr, 30); 

    if (!$fp) 
    { 
     $this->sendReport("Errore connessione socket"); 
     return FALSE; 
    } 
    else 
    { 
     fputs ($fp, $header . $req); 
     while (!feof($fp)) 
     { 
      $res = fgets ($fp, 1024); 
      if (strcmp($res, "VERIFIED") == 0) 
      { 
       // transizione valida 
       fclose ($fp); 
       return TRUE; 
      } 
      else if (strcmp ($res, "INVALID") == 0) 
      { 
       $this->sendReport('Transizione non valida'); 
       fclose ($fp); 
       return FALSE; 
      } 
     } 
    } 

} 

답변

0

: 여기

, 내 리스너 코드의 일부를 찾을 수 있습니다. PayPal API 라이브러리에는 사용할 수있는 예제가 있지만 지금은 다시 찾을 수 없습니다.

This PayPal help file은 서버 명령 줄을 사용하여 필요한 다양한 키를 얻는 방법을 설명합니다.

는 또한 발견 a tutoriala certificate builder (내가 사용하지 않은, 그래서 그것이 얼마나 안전하게 확인할 수 없습니다 ...)

당신이 당신의 키와 인증서를 생성하면

, 당신이 그들에 넣어 필요 서버를 설정하고 DEFAULT_EWP_PRIVATE_KEY_PATHDEFAULT_EWP_CERT_PATH을 관련 파일에 설정하십시오.

PayPal에 공개 인증서 (링크 된 자습서의 지침)를 업로드하고 DEFAULT_CERT_ID을 해당 파일에 대해 제공 한 Cert ID로 설정하십시오. 또한 다운로드 할 수있는 파일을 서버에 추가하고 PAYPAL_CERT_PATH을 해당 파일의 경로로 설정합니다.

+0

감사합니다 yoda! 그러나 당신은 링크를 잊어 버렸습니다! : P 고마워요 :) –

+0

그건 나에게 특별했습니다. 그들은 지금 거기에있다. – Yoda

0

암호화를 사용하기에 라이브러리를 사용하기가 너무 어려워하거나 작동에 문제가 있다는 호스팅 요구 사항이있는 사람들은 다른 트릭은 암호화하지 않고 전달하는 해시를 만듭니다. 변조를 탐지 한 다음 IPN이 처리를 위해 들어올 때이 해시를 확인합니다. 여기에 설명해 드리겠습니다 :

How do I make a PayPal encrypted buy now button with custom fields?

관련 문제