我使用PayPal作为支付网关。我在查询字符串的notify_url
参数中传递了我网站的一个不可浏览页面的地址,以及其他信息。在我的通知页面上收到来自PayPal服务器的ping后,我会采取适当的措施将用户标记为成员。
现在我想问的问题是:如果有人从原始查询字符串中读取notify_url
参数的值,并使用假交易ID,金额等从他的浏览器手动ping该页面,该怎么办?我如何确保这一点呼叫实际上来自PayPal服务器?
我想到的一个初步检查是检查Request.UserHostAddress
并将其与PayPal server's IP address进行比较。我实现了这一点,但仍希望听取专家的意见。它足够安全吗?人们在拨打网页时可以假冒UserHostAddress
吗?
答案 0 :(得分:1)
只有当我知道这被称为欺骗时,我才会更早地用Google搜索。从PayPal本身(这里是link),它们提供了一种简单(回发)和复杂(共享密钥)方式,以确保通知实际上是由PayPal转发的。
答案 1 :(得分:1)
UserHostAddress
只能在理论上被欺骗 - 实际上这几乎是不可能的,因为TCP连接设置(三次握手)必须被欺骗,以及正确的序列号,这不会被称为回复数据包将被发送到欺骗的IP地址而不是攻击者。有关有趣的帖子,请参阅here:Can I trust the source IP of an HTTP request?
您可以将此UserHostAddress
验证(假设IP始终相同)与your answer中的共享密钥方法结合使用作为双层安全性。
此外,如果您的notify_url
受TLS保护(即HTTPS),则会更安全。例如<input name="notify_url" value="https://www.example.com/notify_url.php" type="hidden" />
。这有助于保护您的通知ping MITM攻击。