我的网络服务器上有一个脚本,用于启动与安全支付解决方案的 HTTPS 连接。支付解决方案允许用户存储其信用卡凭证,因此脚本的完整性是强制性的。
该脚本是从 Web 和由 iPhone 应用程序启动的 Web 浏览器调用的。它在条目中需要几个 POST 值:
- 用户身份
- 价值
- 货币...等
使用支付解决方案生成初始请求。
我的目标是尽可能保护发送到脚本的 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 ...
*/
你认为这足够安全吗?你有更清洁的解决方案吗?
输入将不胜感激,在此先感谢您。