【问题标题】:How can I make sure that my PHP api can only be used by a specific javascript page如何确保我的 PHP api 只能由特定的 javascript 页面使用
【发布时间】:2011-06-05 22:21:56
【问题描述】:

我有一个 PHP 页面(“一个 API”),它基于 GET 字符串输入执行服务器端的工作(例如,将信息输入数据库)。

我是否可以保护它,以便只有特定站点上的 JavaScript 代码才能访问 api,包括保护它免受例如在站点上键入 JavaScript 控制台的人的影响?

【问题讨论】:

  • 我想这就是 API 通常具有“API 密钥”的原因。这样他们就可以将它的使用限制在某些人身上,并跟踪谁在使用它。
  • @Nick 但是当 api 密钥存储在 javascript 中时,它对用户/黑客不可见吗?
  • 是的,这是 DRM 的根本问题。你可以混淆它以使其变得困难,但你不能让它变得不可能。

标签: php javascript get security


【解决方案1】:

不,不可能完全防止这种情况发生。

但是,您可能会使其变得更加困难。例如:

  • 要求Referer 标头指向该页面(但有些浏览器不发送Referer
  • 您还可以检查 X-Requested-With 是否等于 XMLHttpRequest 如果您使用的 JS 库设置了它。

【讨论】:

    【解决方案2】:

    你可以,但只是部分。例如,Google 使用了一种与 $_SERVER["HTTP REFERER"] 匹配的 API 密钥方法,但这些东西很容易被伪造。只需确保用户需要真正的身份验证来处理需要真正安全的事情(更新/编辑/删除等)

    【讨论】:

      【解决方案3】:

      很简单,如果您将页面公开给公众,则将输入视为不受信任。礼貌地要求用户不要看密钥是行不通的。始终验证您根据用户凭据获得的任何输入。

      我将使用已建立的方法(不是您自己的方法)使用用户的凭据登录并验证服务器端的输入。客户端无法强制用户不采取特定操作(例如,调用您的页面或 * 咳嗽 * 复制音乐文件 * 咳嗽 *)。这种技术将被称为 DRM 或类似的东西

      另一个问题是您正在使用 GET 请求来永久更改服务器上的状态。不要那样做:改用 POST(或 PUT 或 DELETE)请求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-06
        • 1970-01-01
        • 2013-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-29
        • 2020-08-25
        相关资源
        最近更新 更多