我正在建立一个利用PayPal支付系统的网站,我提出了一个安全挑战问题:
我从paypal 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">
我想知道哪个用户进行了交易。搜索互联网,我发现我可以像上面那样创建自定义字段。我跟踪用户的原因是我应该在购买完成后为他的虚拟账户添加余额。
但问题是:如果恶意代码(javascript恶意软件)只是将客户表单字段中的用户ID更改为4,该怎么办? 余额将添加到id为4而不是之前的用户。
确定。有人会建议我在发送到PayPal之前将表单数据插入db,以便以后进行比较。 出现第二个问题。如果用户在按下提交按钮后退出paypal页面而未完成订单会怎么样?这是我无法追踪的,因为paypal不属于我,而是在其他页面中打开。
请问,这些问题的其他任何解决方案?我想要一些最佳实践,我可以安全地跟踪哪个用户通过PayPal IPN进行购买。
答案 0 :(得分:0)
您可以将数据存储在临时表中的数据库中,然后一旦IPN完成,您就可以将其移动到永久表中。设置一个cron作业或计划任务,每24小时左右通过一次系统,并删除那段时间内未完成的记录。