在我的网站中,我集成了一个 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地址的这份名单已经相当稳定了多年。在情况下,如果贝宝添加了一个新的地址,你可以添加报告的电子邮件和人工审核这样的情况。

其他提示

您可以做很多事情:

  1. 给你的脚本起一个不起眼的名字,这样就不容易被猜到。
  2. 禁用文件夹中的目录列表
  3. 检查调用站点是否为 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文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top