php 个漏洞中的工单系统
Ticket system in php vulnerabilities
我正在为某个网站构建票务系统,用户可以从该网站预订某些活动的门票。我的预订机制是这样的:
- 用户点击立即购买按钮。
- PayPal 处理付款。
- PayPal 在成功结帐后将用户重定向到生成票号的某个 "generate_ticket.php" 页面。
- 用户被重定向到第一页,其中显示了票号。
问题在于:任何恶意用户都可以通过观察开发者工具中的网络分路器,知道 url 成功结账被重定向到哪个页面,并向此页面发送请求 "generate_ticket.php"并获得免费门票。
以下是我想解决的问题:
- 检查引用 URL 的
$_SERVER['HTTP_REFERER']
变量并将其与来自 paypal 的 URL 进行比较。但问题是,正如manual. 中提到的
The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.
这个变量可以修改。所以,不靠谱,至少不靠谱。
- 当用户点击“立即购买”按钮时,我停止提交表单并在某些 "token.php" 文件中生成一个令牌,将其附加到表单,使用 PayPal 功能将自定义变量附加到 url 从表单中提取,并将其存储在某个会话中,然后提交表单。当 "generate_ticket.php" 页面被请求时,它将会话中的令牌与来自 URL 的令牌进行比较。但同样,任何用户都可以单击该按钮,使 "token.php" 文件生成令牌并将其附加到表单。然后获取该令牌,将其附加到 url,并使用第一个漏洞请求一张票。
那么,有没有人有任何解决方案来修复这些漏洞或阻止用户请求免费门票?
Paypal 有一个叫做 IPN 的功能,一旦你在 generate_ticket.php 上获得数据,基本上你不会直接向用户发送票证,一旦交易被创建,你可能会在数据库中插入一条处于待处理状态的记录并更新它根据 paypal 的响应,这里 IPN 开始发挥作用,在交易完成后,paypal 将发送一个 post 请求,您提供为 notify_url,您将在其中处理向用户发送他的门票的脚本。
我正在为某个网站构建票务系统,用户可以从该网站预订某些活动的门票。我的预订机制是这样的:
- 用户点击立即购买按钮。
- PayPal 处理付款。
- PayPal 在成功结帐后将用户重定向到生成票号的某个 "generate_ticket.php" 页面。
- 用户被重定向到第一页,其中显示了票号。
问题在于:任何恶意用户都可以通过观察开发者工具中的网络分路器,知道 url 成功结账被重定向到哪个页面,并向此页面发送请求 "generate_ticket.php"并获得免费门票。
以下是我想解决的问题:
- 检查引用 URL 的
$_SERVER['HTTP_REFERER']
变量并将其与来自 paypal 的 URL 进行比较。但问题是,正如manual. 中提到的
The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.
这个变量可以修改。所以,不靠谱,至少不靠谱。
- 当用户点击“立即购买”按钮时,我停止提交表单并在某些 "token.php" 文件中生成一个令牌,将其附加到表单,使用 PayPal 功能将自定义变量附加到 url 从表单中提取,并将其存储在某个会话中,然后提交表单。当 "generate_ticket.php" 页面被请求时,它将会话中的令牌与来自 URL 的令牌进行比较。但同样,任何用户都可以单击该按钮,使 "token.php" 文件生成令牌并将其附加到表单。然后获取该令牌,将其附加到 url,并使用第一个漏洞请求一张票。
那么,有没有人有任何解决方案来修复这些漏洞或阻止用户请求免费门票?
Paypal 有一个叫做 IPN 的功能,一旦你在 generate_ticket.php 上获得数据,基本上你不会直接向用户发送票证,一旦交易被创建,你可能会在数据库中插入一条处于待处理状态的记录并更新它根据 paypal 的响应,这里 IPN 开始发挥作用,在交易完成后,paypal 将发送一个 post 请求,您提供为 notify_url,您将在其中处理向用户发送他的门票的脚本。