セキュリティで保護された支払いソリューションとの HTTPS 接続を開始するスクリプトを Web サーバーに持っています。支払いソリューションでは、ユーザーがクレジット カードの資格情報を保存できるため、スクリプトの整合性が必須です。
スクリプトは、Web から、および iPhone アプリケーションによる Web ブラウザーの起動から呼び出されます。エントリにはいくつかの POST 値が必要です。
- ユーザーID
- 価値
- 通貨…など
支払いソリューションで最初のリクエストを生成します。
私の目標は、攻撃を回避するためにスクリプトに送信される POST 値を可能な限り保護することです。これは基本的に、単純な Firebug を使用してエントリに含まれる POST 変数を誰でも見ることができるためです。
スクリプトは HTTPS プロトコル経由で到達します。これは、コンテンツ データを保護するために私が思いついたものです。
if (!empty($_POST)) {
$uid = $_POST['uid'];
$nonce = $_POST['nonce'];
$request_timestamp = $_POST['time'];
//other useful values ...
}
/*
* Test 1 : is the nonce correct ? (Example of possible hash)
*/
if (strcmp(md5($uid . $request_timestamp . 'mygrE4TpassPhraZ'), $nonce) !== 0) {
echo 'Bad nonce';
exit;
}
/*
* Test 2 : is the timestamp value acceptable ? 10 seconds maximum here.
*/
if (time() - $request_timestamp > 10) {
echo 'Request too old';
exit;
}
/*
* Test 3 : is this request is the first valid one that I receive with those credentials for this user ?
*/
if (strcmp(User::getOnGoingNonce($uid), $nonce) === 0) {
echo 'Request already registered';
exit;
}
//direct database access
User::setOnGoingNonce($uid,$nonce);
/*
* Finally, chat granted with the payment solution ...
*/
これで十分安全だと思いますか? よりクリーンなソリューションはありますか?
ご意見をお待ちしております。よろしくお願いいたします。