2011-06-05 62 views
0

我有一个基于GET字符串做服务器端的东西(例如输入信息到数据库)的PHP页面(“一个API”)输入。我怎样才能确保我的PHP API只能被特定的JavaScript页面使用

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

+0

我想这就是为什么API通常有一个“API密钥”。这样他们就可以限制它被某些人使用,并跟踪谁在使用它。 – 2011-06-05 22:24:43

+0

@Nick但是,当API密钥存储在JavaScript中,是不是可见的用户/黑客? – JJJollyjim 2011-06-05 22:26:05

+0

是的,这是DRM的根本问题。你可以混淆它来使困难,但你不能让它变得不可能。 – 2011-06-06 19:24:09

回答

3

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

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

  • 要求的Referer头指向该页面(有些浏览器不发送Referer,不过)
  • 你也可以检查X-Requested-With等于XMLHttpRequest如果JS库您正在使用设置。
1

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

0

非常简单,如果您向公众公开页面将输入视为不可信。有礼貌地询问用户不看钥匙是行不通的。总是验证无论您对用户的凭据获得什么输入。

我会使用已建立的方法(不是自己推出的)用用户凭据登录并验证服务器端的输入。客户端没有办法强制用户不采取特定的行动(比如说,打电话给你的网页或*咳嗽*复制音乐文件*咳嗽*)。这种技术将被称为DRM或类似的东西

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