7

PayPal IPN は、可変数のフィールドを持つ POST リクエストを通知 URL に送信します。POST リクエストが正当であることを確認するために、追加のcmd=_notify-validateフィールドとともに同じリクエストを PayPalに再送信する必要がありVERIFIEDますINVALID

私の質問は、なぜリクエストを PayPal に再送信する必要があるのですか? このようなもので十分ではないでしょうか?

if (preg_match('~^(?:.+[.])?paypal[.]com$~i', gethostbyaddr($_SERVER['REMOTE_ADDR'])) > 0)
{
    // request came from PayPal, it's legit.
}

サーバーが IP を正しく解決することを信頼できれば、PayPal からのすべての要求を信頼できると思いますよね?

4

6 に答える 6

6

これは私が見つけた最も簡単な方法で、PayPal も提案しています。http_build_query() を使用して、paypal からサイトに送信された投稿から URL を作成します。Paypal のドキュメントには、検証のためにこれを返送する必要があると記載されており、それが file_get_contents で行うことです。strstr を使用して「VERIFIED」という単語が存在するかどうかを確認しているため、関数を続行します。存在しない場合は false を返します...

$verify_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_notify-validate&' . http_build_query( $_POST );   

if( !strstr( file_get_contents( $verify_url ), 'VERIFIED' ) ) return false;
于 2011-07-15T16:30:39.707 に答える
5

PayPal は、お客様のサイト/アプリケーションの利益のために、より高いセキュリティ基準を適用しているだけです。

IP スプーフィングはサンプル関数を簡単にだますことができます。これは、単独で依存するREMOTE_ADDRESSと攻撃を受けやすいためです。

金融取引を扱う場合、セキュリティは非常に重要です。IPN リクエストをスプーフィングできれば、あなたのサイトやアプリケーションをだまして偽のトランザクションを実行させることができます。既知の信頼できる場所に追加のリクエストを送信することで、行動するためのはるかに高い基準の認証情報を取得します。元の IPN リクエスト全体がこの確認で送信されるため、PayPal はすべてのトランザクションの詳細が実際に有効であることを確認できるため、攻撃者が詳細を変更する (価格や数量の変更など) 中間者攻撃を防ぐことができます。 ) PayPal からお客様のサーバーに送信される、それ以外の場合は有効なリクエストです。

于 2010-05-18T16:11:10.810 に答える
4

この質問はかなり古いことは知っていますが、

攻撃者は、IP をスプーフィングしたり、検証に合格するために何らかの MITM を実行したりする必要さえありません。

  1. 彼は自分のマシンから IP アドレス xyzt で接続します
  2. サーバーは gethostbyaddr("xyzt") を呼び出し、tzyxin-addr.arpa という名前の DNS クエリを送信します。
  3. xyzt が攻撃者に属している場合、攻撃者は (少なくとも) DNS ドメイン zyxin-addr.arpa も制御している可能性があります (これには彼自身の IP が含まれているため)。したがって、彼はそのクエリに応答して「paypal.com」を返すことができます。
  4. あなたのサーバーは攻撃者の DNS サーバーから "paypal.com" を受信し、検証チェックは成功します。

この攻撃は、Lobos が推奨するようにペイパルにリクエストを送信することで無効になります。

于 2013-01-03T15:03:35.460 に答える
2

誰かがipnリスナーを実行しているマシンのhostsファイルを変更すると、すべてが崩壊します。

  • 悪意のある人が虚偽の支払い通知を送信する

  • 侵害されたサーバーは、実際には悪意のある人のマシンを指している「paypal.com」に複製を送信します

  • 悪い人は確認済みと返信し、支払ったかのように商品を受け取ります。

これは大した問題ではなく、ある人がホスト ファイルに r/w アクセスできる場合、支払い記録を手動でデータベースに入力したり、その他の多くの損害を与える可能性があります。

ちょっとした考え。

于 2010-09-28T19:47:20.443 に答える
1

IPNガイドからPOSTに返信する理由は次のとおりです。

リスナーは、メッセージを処理するかどうかに関係なく、各メッセージに応答する必要があります。応答しない場合、PayPalはメッセージが受信されなかったと見なし、メッセージを再送信します。PayPalは、リスナーが正しいメッセージを送り返すまで定期的にメッセージを再送信し続けますが、再送信されるメッセージの間隔は毎回増加します。

重要:PayPalは、30秒以内にIPNメッセージへの応答を受信することを期待しています。

于 2010-05-18T11:50:22.397 に答える