私有REST API

时间:2012-04-09 15:15:15

标签: php api rest

我们有REST API,我们只希望我们的域有权访问,并且不会发送欺骗请求。要做到这一点,我脑海中唯一想到的就是检查引用者$_SERVER['HTTP_REFERER']。但是docs say that

  

将用户代理引用到的页面地址(如果有)   当前页面。这是由用户代理设置的。 并非所有用户代理都会   设置这个,有些提供修改HTTP_REFERER的能力   特征。简而言之,它无法真正被信任。

因此,假设我们的主要API请求/门文件是:

www.example.com/api/gate.php

如何使其安全,以便只提供来自自己域的请求,而忽略所有其他请求。我已经阅读了一些关于http身份验证和设置私钥或秘密的内容,但我正在寻找一种简单的方法,因此只有我们自己的域可以向该文件发送请求。感谢

4 个答案:

答案 0 :(得分:5)

如前所述,HTTP_REFERRERREMOTE_ADDR可能会被欺骗,因此无法信任实现所述功能。另请注意,在共享主机环境中,同一服务器中的其他帐户也具有相同的IP。

快速解决方案可能是使用Basic Authentication来验证对API的请求。这不会按IP或引荐来源URL / IP进行过滤,但会确保请求来自可靠来源。

在Apache环境中设置基本身份验证就像创建.htaccess.htpasswd文件一样简单,并将它们放在API的根目录中。

您可以使用以下生成器创建两个文件:
.htaccess generator
.htpasswd generator

设置基本身份验证后,在PHP中验证请求就像以下方式访问API一样简单:

username:password@example.com

因此,不需要开发额外的代码来设置任何标头来验证您的请求。任何访问该URL的人都将被提示输入凭据,如果身份验证失败则拒绝访问。

enter image description here

答案 1 :(得分:2)

我认为HTTP_REFERRERREMOTE_ADDR只是在请求标头中发送,这意味着它们可能会被欺骗。如果您的网站在互联网上并且您想限制对它的访问,则不是这样做的方法。使用凭证需要完全身份验证。

如果您不想设置身份验证或密钥,则可以将其托管在公司的LAN上。

答案 2 :(得分:2)

允许访问localhost的public_html / api子文件夹中的简单.htaccess不会只是这样做吗?

order deny,allow
deny from all
allow from 127.0.0.1

或者,如果你只访问gate.php文件并且需要文件夹中的其他文件可以访问,你可以只定位一个文件

<files "gate.php">
    order deny,allow
    deny from all
    allow from 127.0.0.1
</files>

答案 3 :(得分:0)

还有$ _SERVER ['REMOTE_ADDR']不太可能被欺骗。

Is it safe to trust $_SERVER['REMOTE_ADDR']?