在我的网站中,我集成了一个接收IPN通知的PHP脚本,并向客户发送许可证密钥。此脚本位于php脚本所需的其他2个php文件的文件夹中...如何保护此文件夹?如果我在其中放置一个.htaccess
,其中包含:
order allow,deny
deny from all
我也阻止了PayPal通知。
我该如何保护它?我需要吗?
答案 0 :(得分:7)
您可以安全地将对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();
}
通过这种方式,只有Paypal才能访问IPN脚本。
这个IP地址列表多年来一直相当稳定。如果Paypal添加了新地址,您可以将报告添加到电子邮件中并手动查看此类案例。
答案 1 :(得分:3)
你可以做很多事情:
答案 2 :(得分:3)
为什么要这样做?
在IPN系统中,你首先只是使用cURL或fshock将传递给你的ipn脚本的变量反弹回paypal ...或者看看你能判断它是否是有效交易的响应...有人不能伪造一个在paypal本身不存在的交易变量......他们所能做的只是重复使用旧的交易信息来欺骗你的脚本..因为它存在于paypal上你的脚本将假设它是一个成功的付款...
所以你可以通过将txn_id与你的数据库进行比较来防止这种情况,如果数据库中已经存在,这意味着有人试图用已经记录的交易信息欺骗你......
因为你做了那些关心那些调用这个ipn脚本的人的检查......因为你检查了对paypal和你的数据库的变量,所以它不会为他们工作......
在任何例外中打印出一个好句子告诉他们“这个剧本很健壮!不要试图欺骗我们!”
答案 3 :(得分:2)
如果您知道PayPal将使用该脚本的IP,请尝试:
order deny, allow
deny from all
allow from [Paypal-IP]
答案 4 :(得分:2)
我不建议关闭所有IP,因为您无法确定Paypal是否会始终保持来自同一IP的请求。如果他们决定更改他们的IP范围,您的设置将会中断,可能没有通知您。
我认为处理Paypal请求的脚本是处理此问题的地方 - 在该脚本中,您需要确保该请求实际上来自Paypal。你可以使用一些不容易猜到的模糊URL来做到这一点。
如果可能的话,请查看IPN的共享密钥设置 - 通过这种方式,您可以更好地检查请求是否实际来自Paypal,尽管设置起来有点困难。
希望这有帮助!
答案 5 :(得分:2)
查看现场检查清单:
(开发者主页>如何> API> Go Live Checklist)
获取允许的IP地址列表
答案 6 :(得分:1)
现在我这样做了:
在存放php脚本和2个配置文件的文件夹中我创建了另一个文件夹,我在其中移动了2个配置文件,并在那里放置了一个带有以下代码的.htaccess:
order allow,deny
deny from all
现在2个配置文件有很好的保护! ...但不是接收通知的脚本! 如果我尝试阻止目录列表(对于包含php脚本和配置文件夹的文件夹):
IndexIgnore *
paypal沙盒给我一个错误500!
所以,我唯一可以做的就是保护脚本,在它的头上放置一个验证来自paypal.com的通知的条件?
最后,我在php脚本的头部添加了一个基于远程主机名的if语句:
$remote_host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
如果有人感兴趣,也可以查询$_SERVER['REMOTE_HOST']
,但必须在服务器上配置httpd.conf文件。