【问题标题】:Ways to allows requests to APIs only from internal in PHP仅允许来自 PHP 内部的 API 请求的方法
【发布时间】:2021-02-24 13:16:41
【问题描述】:

我知道 CURL 和 HTTP 身份验证只允许来自某些请求的 API 调用。

我有这样的事情

www.mysite.com/list

www.mysite.com/api

list 页面使用 jQuery Ajax 发布请求调用api 页面,api 页面回显 jSON 响应。

我已经在检查 HTTP 引荐来源网址以验证 Post 请求来自某些来源,但这些请求可能是伪造的。

我不能使用 $_SERVER['remote_addr'] 因为这将检查客户端 ip 而不是 API 请求的源 ip。

由于两个页面都托管在同一个 Web 服务器和相同的主机名中,因此无法根据主机名或 IP 地址进行限制。

I am aware of some alternatives like

cURL with HTTP Authentication.

JSON 响应加密和打印前解密。

但是有没有办法限制这些 API 页面以安全地阻止来自服务器或主机名之外的访问?

【问题讨论】:

    标签: php ajax api


    【解决方案1】:

    我可能错了,但我认为您正在尝试发明 csrf 令牌。但几乎没有修改:

    您应该在渲染/list 之前将生成的令牌存储在会话/cookie 中。我不确定jQuery是否默认发送带有ajax请求的会话/cookie,但我认为如果没有,追加它应该不是一个大问题。

    当您处理 /api 请求时,您还应该验证 cookie/会话是否存在令牌。

    【讨论】:

      【解决方案2】:

      假设您想限制访问“使用网络浏览器访问您网站的 Joe Random 用户”。

      不是真的。

      没有办法可靠地确定客户端是普通的网络浏览器。任何编写其他客户端来访问您的 API 的人都可以轻松地让它访问您的网站并获得他们需要的任何令牌来证明这一点。

      您能做的最好的事情是采用某种启发式方法来寻找异常流量模式(例如来自一个来源的异常大量的类似请求,或者请求之间的间隔非常稳定)。但是,您会从这种方法中得到误报和误报。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-07
        • 2020-12-29
        • 2020-10-18
        • 1970-01-01
        • 2016-07-16
        • 2016-12-12
        • 2018-08-24
        相关资源
        最近更新 更多