0

我正在构建一个使用贝宝支付系统的网站,但遇到了一个安全挑战问题:

我有以下来自贝宝 IPN 的表格:

<form class="form-horizontal" action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="ABCDEFEGDEDS">
<input type="hidden" name="on0" value="Balance">
<label>Amount</label>
    <select class="form-control"  name="os0" id="deposit_paypal">
        <option value="1000">$1000.00 USD</option>
        <option value="2000">$2000.00 USD</option>
    </select>
<input type="hidden" name="custom" value="<?php echo $user->id; ?>">
<input type="image" src="https://www.paypalobjects.com/ru_RU/i/btn/btn_buynow_SM.gif" border="0" name="submit" alt="PayPal">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">

我想知道哪个用户进行了交易。搜索互联网,我发现我可以像上面那样创建一个自定义字段。我跟踪用户的原因是我应该在购买完成后将余额添加到他的虚拟帐户中。

  1. 但问题是:如果恶意代码(javascript 恶意软件)只是将自定义表单字段中的用户 ID 更改为 4 怎么办?余额将添加到 id 为 4 而不是前一个的用户。

  2. 好的。有人会建议我在发送到贝宝以供以后比较之前将表单数据插入数据库。第二个问题出现了。如果用户在按下提交按钮后没有完成订单就退出了贝宝页面怎么办?这是我无法追踪的,因为 paypal 不属于我并且它在其他页面中打开。

请问,这些问题还有其他解决方案吗?我想要一些最佳实践,我可以安全地跟踪哪个用户通过贝宝 IPN 进行了购买。

4

1 回答 1

0

您可以将数据存储在临时表中的数据库中,然后在 IPN 完成后,您可以将其移动到永久表中。设置一个 cron 作业或计划任务以每 24 小时左右通过您的系统,并删除在那段时间内尚未完成的所有记录。

于 2013-08-05T13:15:41.563 回答