微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – PayPal IPN安全

PayPal IPN向通知URL发送带有可变数量字段的POST请求,为了确认POST请求是合法的,我们需要将相同的请求以及另外的cmd = _notify-validate字段重新提交给PayPal,然后PayPal回复验证或无效.

我的问题是,为什么我们需要将请求重新发送给PayPal?这样的东西不会这样吗?

if (preg_match('~^(?:.+[.])?paypal[.]com$~i',gethostbyaddr($_SERVER['REMOTE_ADDR'])) > 0)
{
    // request came from PayPal,it's legit.
}

我们可以信任服务器正确解析IP,我认为我们可以信任来自PayPal的所有请求,不是吗?

我知道这个问题很老,但是:

攻击者甚至不需要欺骗他的ip或执行任何类型的MITM来通过验证:

>他从自己的机器连接IP地址x.y.z.t.

>您的服务器调用gethostbyaddr(“x.y.z.t”),它发送名称为t.z.y.x.in-addr.arpa的dns查询.

>如果x.y.z.t属于攻击者,则他很可能控制(至少)dns域名z.y.x.in-addr.arpa(因为它包含自己的ip).所以他可以回复“paypal.com”以回应该查询.

>您的服务器从攻击者的DNS服务器收到“paypal.com”,验证检查成功.

按照Lobos的建议,向paypal发送请求会导致此攻击失败.

原文地址:https://www.jb51.cc/php/135923.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐