如果用户不是来自这里,那么不要处理 - 如何?

时间:2010-10-30 15:47:16

标签: php security paypal

我尝试使用$_SERVER,但它对我不起作用。

我需要的是:

要访问我网站上的网页,用户必须从Paypal返回。如果他没有从Paypal重定向到我的网站,那么不要执行该文件,而是给用户一个错误。

我该怎么做?

我尝试了以下内容:

 $url = 'paypal';
 if(strstr($_SERVER['HTTP_REFERER'], $url)) {
     // my code
 } else {
    // my error
 }

这对我不起作用,我怎样才能完成这项工作,来自paypal的示例链接是(它很长):

https://www.paypal.com/us/cgi-bin/webscr?cmd=_flow&SESSION=39QzTUoR0GugSwdZjeJ5zf4EkFIa2-rlRsdrqxfx4O3ibIMuzY3Eab7y6Dq&dispatch=5885d80a13c0db1f8e263663d3faee8dc60d77e6184470d515cedf52660ea0cd

请帮助,这是我正在处理的事情的安全漏洞。

5 个答案:

答案 0 :(得分:5)

你不能可靠地保证。通常,在这些情况下,您可以使用支付网关进行服务器端检查,以查看交易ID (或传回给您的任何内容)是否有效,以及该金额是否已成功支付

您应该考虑检查PayPal的Instant Payment Notification服务,并为此实现一个监听器。 PayPal以各种语言提供some sample code。这是IPN协议的简要概述:

  1. PayPal会向您的IPN监听器发送一条消息,通知您该事件(例如收到的付款)。

  2. 您的侦听器将完整的未更改的消息发送回PayPal;邮件必须包含相同顺序的相同字段,并以与原始邮件相同的方式进行编码。

  3. PayPal会发回一个单词,如果邮件来自PayPal,则为VERIFIED;如果与最初发送的内容有任何差异,则为INVALID

  4. 验证IPN后,您可以解锁用户付费的功能/选项,@cHao suggested in the other answer

  5. 进一步阅读:

答案 1 :(得分:1)

任何检查用户来自哪个网站的方法都可能被用户捏造,无论是出于利用原因(绕过“支付我的东西”部分)还是隐私(“这不是我的业务,​​我只是在寻找在”)。不要把它放在关键的东西上。

最好从Paypal收听IPN帖子并使用它们来解锁人们付费的功能。可能会有一点延迟,但通常很短。通常在用户退回到“感谢您的订单!”时。页面,并点击链接访问他们购买的东西,IPN已经通过。

答案 2 :(得分:1)

推荐人不可靠。他们经常被阻止或更换。并且用户客户端可以用他想要的任何东西替换它们。

您信任客户哪个错误。

您需要直接从paypal获得确认,或PayPal需要为用户提供难以忘记的令牌。

您还需要验证付款金额。此外,用户只需支付1美分。

答案 3 :(得分:1)

老实说,如果你认为

 $url = 'paypal';
 if(strstr($_SERVER['HTTP_REFERER'], $url)) {
   // my code
 } else {
   // my error
 }

将停止安全漏洞利用,我建议你为经验丰富的人付费,因为很可能你的系统中还有其他漏洞。付款安全非常重要。

如果您仍想自己动手,请阅读PayPal IPN here

答案 4 :(得分:0)