order allow,deny
deny from all
我也会屏蔽 PayPal 的通知。
我该如何保护它?需要吗?
order allow,deny
deny from all
我也会屏蔽 PayPal 的通知。
我该如何保护它?需要吗?
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添加了新的地址,您可以通过电子邮件进行报告,并手动审查此类情况。
你为什么要这样做呢?
在IPN系统中,你首先需要使用cURL或fshock等工具将传递到你的ipn脚本的变量反弹回paypal...通过检查响应,你可以确定它是否是有效的交易...某人无法伪造一个在paypal本身不存在的交易变量...他们所能做的就是重新使用旧的交易信息来欺骗你的脚本...由于它存在于paypal上,你的脚本会认为它是一笔成功的付款...
因此,你可以通过将txn_id与你的数据库进行比较来防止这种情况,如果已经存在于你的数据库中,这意味着有人正在尝试使用已记录的交易信息来欺骗你...
既然你进行了这些检查,谁还关心调用这个ipn脚本的人呢...对他们来说,它不起作用,因为你检查变量是否与paypal和你的数据库匹配...
在任何异常情况下,打印出一个好的句子告诉他们“这个脚本很强大!别想愚弄我们!”
有很多事情你可以做:
order deny, allow
deny from all
allow from [Paypal-IP]
现在我已经这样做了:
在存储 PHP 脚本和 2 个配置文件的文件夹中,我创建了另一个文件夹,将这两个配置文件移动到其中,并放置了一个 .htaccess 文件,其中包含以下代码:
order allow,deny
deny from all
现在两个配置文件都有很好的保护!...但是接收通知的脚本没有!如果我尝试使用以下方式阻止目录列表(对于包含php脚本和config文件夹的文件夹):
IndexIgnore *
Paypal沙盒给我返回了500错误!
所以,为了保护脚本,我唯一能做的就是在脚本头部放置一个条件来验证通知是否来自paypal.com?
最后,我在php脚本头部添加了一个基于远程主机名的if语句:
$remote_host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$_SERVER['REMOTE_HOST']
,但必须在服务器上配置httpd.conf文件。