我们有REST API,我们只希望我们的域有权访问,并且不会发送欺骗请求。要做到这一点,我脑海中唯一想到的就是检查引用者$_SERVER['HTTP_REFERER']
。但是docs say that:
将用户代理引用到的页面地址(如果有) 当前页面。这是由用户代理设置的。 并非所有用户代理都会 设置这个,有些提供修改HTTP_REFERER的能力 特征。简而言之,它无法真正被信任。
因此,假设我们的主要API请求/门文件是:
www.example.com/api/gate.php
如何使其安全,以便只提供来自自己域的请求,而忽略所有其他请求。我已经阅读了一些关于http身份验证和设置私钥或秘密的内容,但我正在寻找一种简单的方法,因此只有我们自己的域可以向该文件发送请求。感谢
答案 0 :(得分:5)
如前所述,HTTP_REFERRER
和REMOTE_ADDR
可能会被欺骗,因此无法信任实现所述功能。另请注意,在共享主机环境中,同一服务器中的其他帐户也具有相同的IP。
快速解决方案可能是使用Basic Authentication来验证对API的请求。这不会按IP或引荐来源URL / IP进行过滤,但会确保请求来自可靠来源。
在Apache环境中设置基本身份验证就像创建.htaccess
和.htpasswd
文件一样简单,并将它们放在API的根目录中。
您可以使用以下生成器创建两个文件:
.htaccess generator
.htpasswd generator
设置基本身份验证后,在PHP中验证请求就像以下方式访问API一样简单:
username:password@example.com
因此,不需要开发额外的代码来设置任何标头来验证您的请求。任何访问该URL的人都将被提示输入凭据,如果身份验证失败则拒绝访问。
答案 1 :(得分:2)
我认为HTTP_REFERRER
和REMOTE_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']不太可能被欺骗。