【问题标题】:Paypal integration hidden values贝宝集成隐藏值
【发布时间】:2014-05-19 16:18:57
【问题描述】:

我在使用 PHP 的网站上使用 paypal 进行结帐。它工作正常,但我有一个担心。由于我没有使用现场结帐,所以我去贝宝网站结帐,所以我必须传递隐藏的值。由于金额也是使用隐藏值发送的,因此如果有人使用萤火虫更改金额然后转到贝宝,那么他将能够支付该金额。我在通知 url 中处理此问题以验证付款,但无论如何可以在不发送隐藏变量的情况下执行此操作?我知道用户正在更改值,所以如果他支付那让他很头疼的是,他的钱将一文不值,因为我在通知 url 中进行验证,但我希望该网站阻止结帐。同样,接收者的电子邮件也可以更改,我也在通知 url 上验证这一点,但这很关键,它不应该允许。

考虑如果我是用户,我有两个 paypal 帐户,我在 firebug 中更改为我的一个 paypal 电子邮件,我输入价格 1 美元并使用我的第二个电子邮件结帐,如果有人没有在后端验证它,我会得到该产品是免费的。或者,如果我只更改金额,我将以 1 美元的价格获得产品。

有什么办法吗?如果任何值发生更改,我希望我的网站不会转到结帐页面。

谢谢

【问题讨论】:

    标签: php security paypal paypal-ipn paypal-sandbox


    【解决方案1】:

    将价格保存在您自己的数据库中。将支付的金额与数据库中的价格进行比较。这样您就可以检测到修改过的付款并取消它们。

    【讨论】:

    • 我也在做同样的事情,但我想知道“如果任何值发生变化,我希望我的网站不要进入结帐页面”。我想那是不可能的
    【解决方案2】:

    为了防止用户更改隐藏值或 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。希望这会有所帮助。

    【讨论】:

    • 我正在验证电子邮件和费用,但我喜欢你的方法,但假设用户更改了价值,他将能够支付.. 我想阻止用户去结帐页面,就像我一样在贝宝的网站上做,所以唯一的方法是使用隐藏值,我认为这是验证它的唯一方法
    • 我尝试的解决方法是转到其他页面,如果值正确,则重定向(自动提交)到结帐页面,但在某些浏览器(如 Firefox)中,它会发出警告“您正在被重定向。”
    • @Hamza 您需要在结帐前添加一个页面。在此页面上,您将验证哈希。如果哈希不匹配,您将显示错误,否则此页面上将有一个隐藏表单,您将使用 javascript 提交该表单。因此,您的所有值都将被检查并发布到贝宝。
    • @Hamza 在此页面上,您还可以显示“请稍候...处理您的请求”之类的消息,然后在后台使用 JavaScript 在页面加载时提交表单。
    猜你喜欢
    • 2011-08-01
    • 2011-11-03
    • 2016-08-18
    • 2013-05-13
    • 2011-05-24
    • 2013-07-10
    • 2015-09-08
    • 2012-10-05
    • 2012-03-13
    相关资源
    最近更新 更多