WorldPay を使用して段階的なメンバーシップ システムの支払いを処理しています。支払い金額は、選択したメンバーシップの段階によって異なります。
支払いは、以下を含む多くの非表示フィールドからフォーム ポストを介して WorldPay に渡されます。
<input type="hidden" name="amount" value="295.00" />
基本的に、フォームは POST 経由で WorldPay に送信され、ユーザーはいくつかの手順に従って支払いを処理します。完了すると、ユーザーは指定された確認ページにリダイレクトされます。
これは、WorldPay が支払いを受け入れる典型的な方法のようです。ここには明らかな問題があります。非表示フィールドの値は、HTML の基本的な知識があれば誰でも簡単に改ざんできます。フォームは WorldPay に直接投稿されるため、メンバーシップ ティアに対して金額を検証するポストバックはありません。
確認ページの前にハンドラーを介してコールバックをルーティングすることにより、WorldPay から支払い通知が返されたときに支払い金額を検証するオプションがあります。ただし、ユーザーが改ざんされたフォームを送信し、間違った金額を支払い、メンバーシップを取得せず、会社に連絡して返金してもらう必要があるという状況は避けたいと思います。
支払いを処理する前に、提出された金額が正しいことをどのように検証できますか?
アップデート
サーバー側でフォーム ポストを検証しても、悪意のあるユーザーが WorldPay に直接フォーム ポストを偽装するのを止めることはできないという追加の問題があることがわかりました。