我使用paypal在我的网站上使用PHP结帐。它的工作正常,但我有一个问题。因为我没有在网站结账使用所以我去paypal网站结账,所以我必须传递隐藏的价值观。因为金额也是使用隐藏价值发送的,所以如果有人使用firebug更改金额,然后转到paypal,那么他将能够支付该金额。我在通知网址中处理此问题以验证付款,但无论如何都要在不发送隐藏变量的情况下执行此操作?我知道用户正在改变价值观,所以如果他付出了他的头痛,他的钱将是无用的,因为我在通知网址验证,但我希望网站阻止去结账。类似的接收者电子邮件也可以更改,我也在通知网址验证这一点,但这很关键,它不应该允许。
考虑如果我是用户,我有两个paypal帐户,我在firebug中更改为我的一个paypal电子邮件,我输入价格$ 1并使用我的第二封电子邮件结帐,如果有人未在后端验证它我会得到那个产品是免费的。或者,如果我只更改金额,我将以1美元的价格购买该产品。
有什么方法?如果有任何值发生变化,我希望我的网站不会进入结帐页面。
由于
答案 0 :(得分:0)
将价格保存在您自己的数据库中。将支付的金额与数据库中的价格进行比较。这样,您就可以检测已修改的付款并取消付款。
答案 1 :(得分:0)
为了防止用户更改隐藏值或URL变量,我通常会在处理之前传递散列并验证它。
I.e.
//Combine values that you want to protect and create a hash.
$email = 'someone@domain.com';
$cost = 15;
$hash = sha1(md5($email.$cost.'some-secret-key'));
On the other page I will verify the hash,
$hash = sha1(md5($_REQUEST['email'].$_REQUEST['cost'].'some-secret-key'));
if($_REQUEST['hash'] != $hash){
echo 'Values changed';
exit();
}
您可以将哈希传递给URL,POST,表单隐藏变量或SESSION。希望这会有所帮助。