代码之家  ›  专栏  ›  技术社区  ›  aborted

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

  •  0
  • aborted  · 技术社区  · 14 年前

    我试着利用 $_SERVER ,但对我不起作用。

    我需要的是:

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

    我该怎么做?

    我尝试了以下方法:

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

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

    请帮忙,这是我正在研究的一个安全漏洞。

    5 回复  |  直到 14 年前
        1
  •  5
  •   Community c0D3l0g1c    7 年前

    你不能可靠地保证。一般来说,在这些场景中,您可以对支付网关进行服务器端检查,以查看 事务id

    你应该考虑看看贝宝的 Instant Payment Notification 为此服务并实现侦听器。贝宝有 some sample code 用不同的语言。这是IPN协议的简要概述:

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

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

    3. 贝宝只回一个字 VERIFIED 如果邮件来自PayPal或 INVALID

    4. 一旦IPN得到验证,您就可以解锁用户付费的功能/选项,如下所示 @cHao suggested in the other answer .

    进一步阅读:

        2
  •  1
  •   cHao Hammerite    14 年前

    任何检查用户来自哪个网站的方法都可能被用户篡改,无论是出于利用漏洞的原因(绕过“为我的东西付费”部分)还是出于隐私(“我只是在看的东西不关你的事”)。重要的事情不要依赖它。

    你最好听听Paypal上的IPN帖子,然后用它们解锁人们付费的功能。可能会有点耽搁,但一般都很短。通常当用户回复到“谢谢您的订单!”页面上,点击一个链接访问他们买的东西,IPN已经通过了。

        3
  •  1
  •   CodesInChaos    14 年前

    你信任错的客户。

    你需要直接从贝宝获得确认,或者贝宝需要给用户一个不可伪造的令牌。

    你还需要验证付款金额。否则用户只需支付1美分。

        4
  •  1
  •   houbysoft    14 年前

    老实说,如果你认为

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

    如果你还想自己做,看看贝宝IPN here .