保护接收 paypal IPN 通知的 php 脚本
-
13-09-2019 - |
题
在我的网站中,我集成了一个 PHP 脚本,用于接收 IPN 通知并向客户发送许可证密钥。该脚本与 php 脚本所需的其他 2 个 php 文件位于一个文件夹中...如何保护该文件夹?如果我在里面放一个 .htaccess
和:
order allow,deny
deny from all
我也屏蔽了贝宝的通知。
我该如何保护它?我需要吗?
解决方案
您可以安全地限制到您的IPN脚本只有IP的下面的列表访问地址:
216.113.188.202
216.113.188.203
216.113.188.204
66.211.170.66
这可以通过以下方式来完成:
if (!in_array($_SERVER['REMOTE_ADDR'],array('216.113.188.202','216.113.188.203','216.113.188.204','66.211.170.66')) {
header("HTTP/1.0 404 Not Found");
exit();
}
以这种方式仅贝宝将能够访问IPN脚本。
IP地址的这份名单已经相当稳定了多年。在情况下,如果贝宝添加了一个新的地址,你可以添加报告的电子邮件和人工审核这样的情况。
其他提示
您可以做很多事情:
- 给你的脚本起一个不起眼的名字,这样就不容易被猜到。
- 禁用文件夹中的目录列表
- 检查调用站点是否为 paypal.com(或相关 IP 地址等)
为什么要试图做到这一点?
在IPN系统,首先只是反弹正在使用卷曲或fshock或什么都传递到您的IPN脚本回PayPal的变量...寻找到你能告诉我们,如果这是一个有效的交易或不回应...有人能不假,不以贝宝本身存在交易变量......所有他们能做的就是重新重用旧的交易信息来欺骗你的脚本..因为它存在于你的贝宝脚本将被假定它是一个全成金...
这样就可以防止这只是对你的数据库进行比较,txn_id,如果在你的数据库已经存在,这意味着有人试图使用已记录的交易信息,以欺骗你...
因为你做谁在乎这些称之为IPN脚本的那些那些检查?它不会为他们工作,因为你核对贝宝的变量和数据库...
在任何异常打印出一个漂亮的句子,告诉他们“这个剧本是强大的!不要试图愚弄我们!”
如果您知道从哪个PayPal将使用该脚本尝试IP:
order deny, allow
deny from all
allow from [Paypal-IP]
我不建议关闭了所有的IP地址,因为你不能确保支付宝将继续从同一个IP来所有的时间要求。如果他们决定要改变自己的IP范围内,您的设置将打破,可能不通知你。
我认为处理贝宝请求脚本来处理这个的地方 - 在脚本中,您需要确保该请求实际上是从贝宝的到来。您可以通过使用不容易猜到因为已经提出了一些晦涩的URL做到这一点。
如果可能的话,考虑的共享密钥设置为IPN - 这种方式,您有检查的要求实际上是从贝宝未来的一个更好的办法,虽然这是一个有点难以建立
希望这有助于!
退房去住清单:
https://cms.paypal.com / US /的cgi-bin /?CMD = _render含量&CONTENT_ID =显影剂/ howto_api_golivechecklist
(开发者主页>如何> API>去住清单)
有IP地址的列表,以允许
现在我已经做到这一点:
,其中存储在PHP脚本和我已经创建其中I移动的2个配置文件,并且其中我已经放在用下面的代码。htaccess的另一文件夹中的2的配置文件的文件夹中:
order allow,deny
deny from all
现在的2的配置文件有很好的保护! ...但不接收通知的脚本! 如果我试图阻止目录列表(为包含PHP脚本和config文件夹中的文件夹)有:
IndexIgnore *
在贝宝沙箱给我一个错误500!
所以,我可以做些什么来保护脚本中的唯一的事情就是到另一个地方,在它的头上,这验证通知来自paypal.com?
条件最后,我在PHP脚本的头部添加了如果基于远程主机名的语句:
$remote_host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
如果有人有兴趣,它也可以查询$_SERVER['REMOTE_HOST']
但必须在服务器上配置的httpd.conf文件。