【发布时间】:2020-04-18 11:35:57
【问题描述】:
我正在为某个网站构建一个票务系统,用户可以从中预订某些活动的门票。我的预订机制是这样的:
- 用户点击立即购买按钮。
- PayPal 处理付款。
- PayPal 在成功结账后将用户重定向到生成票号的“generate_ticket.php”页面。
- 用户将被重定向到显示票号的第一页。
问题出在:任何恶意用户都可以通过观察开发者工具中的网络点击,知道成功结账被重定向到的 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