0

IPN を使用して「今すぐ購入」(PayPal アカウントに保存されていない) 動的ボタンを実装しましたが、正常に動作します (そうです!)。

誰かがファイアバグで (たとえば) 金額を変更した場合、私の IPN リスナーが金額に問題があると言った場合でも、取引はペイパルに対して有効であるため、今、私は彼のセキュリティに疑問を持っています。

私の質問は、「フォームを 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;
            }
        }
    }

}
4

2 に答える 2

0

ライブラリを使用して暗号化を行うのが難しすぎる、またはそれを機能させるのにホスティング要件の問題がある人のために、もう 1 つのトリックは、暗号化せずに渡すハッシュを作成して、改ざんを検出できるようにすることです。次に、IPN が処理のために入ってきたときに、このハッシュを検証します。ここでこれを説明します:

カスタム フィールドを使用して PayPal で暗号化された [今すぐ購入] ボタンを作成するにはどうすればよいですか?

于 2013-01-24T16:30:38.130 に答える
0

ボタンを動的に暗号化して、Firebug (または同様のソフトウェア) を使用しているユーザーがボタンを編集できないようにすることができます。PayPal API ライブラリには、これを使用できる例がありますが、今のところ見つけることができません。

この PayPal ヘルプ ファイルでは、サーバー コマンド ラインを使用して必要なさまざまなキーを取得する方法について説明しています。

チュートリアル証明書ビルダーも見つけました(使用していないため、安全性を確認できません...)

キーと証明書を生成したら、それらをサーバーに配置し、関連ファイルに設定する必要がありDEFAULT_EWP_PRIVATE_KEY_PATHますDEFAULT_EWP_CERT_PATH

パブリック証明書を PayPal にアップロードし (リンクされたチュートリアルの手順)、DEFAULT_CERT_IDそのファイルに対して提供される証明書 ID に設定します。また、ダウンロードできるファイルも提供されます。それをサーバーに追加し、PAYPAL_CERT_PATHそのファイルのパスに設定します。

于 2012-09-11T14:43:07.243 に答える