3

我们有 REST API,我们只希望我们的域可以访问并且不发送欺骗请求。为此,我唯一想到的就是检查 referer $_SERVER['HTTP_REFERER']。但是文档说

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

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

www.example.com/api/gate.php

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

4

4 回答 4

5

如前所述,HTTP_REFERRER并且REMOTE_ADDR可能被欺骗,因此不能被信任来实现所述功能。还要记住,在共享主机上下文中,同一服务器中的其他帐户也具有相同的 IP。

一个快速的解决方案可能是使用基本身份验证来验证对 API 的请求。这不会按 IP 或引用 URL/IP 过滤,但会确保请求来自受信任的来源。

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

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

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

username:password@example.com

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

在此处输入图像描述

于 2012-04-09T15:42:33.257 回答
2

我相信HTTP_REFERRERandREMOTE_ADDR只是在请求标头中发送,这意味着它们可以被欺骗。如果您的网站在 Internet 上,并且您想限制对其的访问,那么这不是这样做的方法。必须使用凭据进行完全身份验证。

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

于 2012-04-09T15:20:30.473 回答
2

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>
于 2012-04-09T18:14:46.597 回答
0

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

信任 $_SERVER['REMOTE_ADDR'] 是否安全?

于 2012-04-09T15:17:50.880 回答