php – PayPal IPN安全
发布时间:2020-12-13 18:27:58 所属栏目:PHP教程 来源:网络整理
导读:PayPal IPN向通知URL发送带有可变数量字段的POST请求,为了确认POST请求是合法的,我们需要将相同的请求以及另外的cmd = _notify-validate字段重新提交给PayPal,然后PayPal回复验证或无效. 我的问题是,为什么我们需要将请求重新发送给PayPal?这样的东西不会这
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发送请求会导致此攻击失败. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |