php – PayPal IPN安全

前端之家收集整理的这篇文章主要介绍了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发送请求会导致此攻击失败.

猜你在找的PHP相关文章