在我的网站,我已经集成接收的IPN通知,并发送许可证密钥给客户一个PHP脚本。 这个脚本是由PHP脚本所需的其他2 PHP文件的文件夹中...我怎么能保护这个文件夹? 如果我把它的.htaccess
有:
order allow,deny
deny from all
我阻止了贝宝的通知了。
我该如何保护呢? 我是否需要?
在我的网站,我已经集成接收的IPN通知,并发送许可证密钥给客户一个PHP脚本。 这个脚本是由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地址的这份名单已经相当稳定了多年。 在情况下,如果贝宝添加了一个新的地址,你可以添加报告的电子邮件和人工审查此类案件。
有很多事情可以做:
为什么你试图做到这一点?
在IPN系统,首先只是反弹正在使用卷曲或fshock或什么都传递到您的IPN脚本回PayPal的变量...寻找到的响应,你可以告诉我们,如果它是一个有效的交易或不...有人不能假并不在贝宝本身存在交易变量......所有他们能做的就是重新重用旧的交易信息来欺骗你的脚本..因为它存在于你的贝宝脚本将被假定它是一个全成金...
所以你可以通过对你的数据库进行比较,txn_id防止这一点,如果在你的数据库已经存在,这意味着有人试图使用已记录的交易信息,以欺骗你...
因为你做谁在乎这些称之为IPN脚本的那些那些检查?它不会为他们工作,因为你检查变量对PayPal和你的数据库...
在任何异常打印出一个漂亮的句子,告诉他们“这个剧本是强大的!不要试图愚弄我们!”
如果你知道从哪个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&content_ID=developer/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文件。