【问题标题】:Ticket system in php vulnerabilities票务系统中的php漏洞
【发布时间】:2020-04-18 11:35:57
【问题描述】:

我正在为某个网站构建一个票务系统,用户可以从中预订某些活动的门票。我的预订机制是这样的:

  1. 用户点击立即购买按钮。
  2. PayPal 处理付款。
  3. PayPal 在成功结账后将用户重定向到生成票号的“generate_ticket.php”页面。
  4. 用户将被重定向到显示票号的第一页。

问题出在:任何恶意用户都可以通过观察开发者工具中的网络点击,知道成功结账被重定向到的 url,并向此页面“generate_ticket.php”发送请求并获得免费门票。

这是我想解决这个问题的方法:

  • 检查引用 URL 的 $_SERVER['HTTP_REFERER'] 变量并将其与来自贝宝的 URL 进行比较。但问题是,正如manual 中提到的那样。

将用户代理引向当前页面的页面地址(如果有)。这是由用户代理设置的。不是所有的用户代理都会设置这个,有些提供修改 HTTP_REFERER 作为一个特性的能力。简而言之,它不能真正被信任。

这个变量可以修改。所以,它是不​​可靠的,至少不是单独的。

  • 当用户单击立即购买按钮时,我停止提交表单并在某个“token.php”文件中生成一个令牌,将其附加到表单,使用 PayPal 将自定义变量附加到来自表单,并将其存储在某个会话中,然后提交表单。当请求“generate_ticket.php”页面时,它会将会话中的令牌与 URL 中的令牌进行比较。但同样,任何用户都可以单击该按钮,使“token.php”文件生成令牌并将其附加到表单中。然后获取该令牌,将其附加到 url,并使用第一个漏洞请求票证。

那么,是否有人有任何解决方案来修复这些漏洞或阻止用户请求免费门票?

【问题讨论】:

    标签: php paypal ticket-system


    【解决方案1】:

    Paypal 有一个称为 IPN 的功能,基本上,一旦您在 generate_ticket.php 上获取数据,您就不会直接向用户发送票证,一旦创建交易,您可能会在数据库中插入一条处于待处理状态的记录,并根据贝宝的响应更新它,这里 IPN 发挥作用,交易完成后,paypal 将发送一个您提供为 notify_url 的发布请求,您将在其中处理向用户发送门票的脚本。

    【讨论】:

    • once a transaction is created 是否意味着点击立即购买按钮? transaction gets completed 表示结帐成功?
    • 交易创建后是否意味着点击立即购买按钮? YESSS 交易完成意味着结账成功?是的,但是您没有在贝宝重定向时获取状态并提供票证,当 IPN 向您的网站发送通知时,您将处理它。
    猜你喜欢
    • 1970-01-01
    • 2012-08-16
    • 2022-06-17
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多