如何防止直接访问我的JSON服务?

Fra*_*kLy 7 javascript security json web-services

我有一个JSON Web服务来返回要在我的Google地图上显示的家庭标记.

从本质上讲,http://example.com调用Web服务来找出所有地图标记的位置,如下所示:

http://example.com/json/?zipcode=12345
Run Code Online (Sandbox Code Playgroud)

它返回一个JSON字符串,例如:

{"address": "321 Main St, Mountain View, CA, USA", ...}
Run Code Online (Sandbox Code Playgroud)

所以在我的index.html页面上,我接受了JSON字符串并放置了地图标记.

但是,我不希望发生的是人们直接呼叫我的JSON Web服务.

我只想http://example.com/index.html打电话给我的http://example.com/json/网络服务...而不是一些随意的老兄/json/直接打电话.

Quesiton:我如何阻止直接呼叫/访问我的http://example.com/json/网络服务?


更新:

为了更清晰,http://example.com/index.html请调用http://example.com/json/?zipcode=12345...和JSON服务
- 返回半敏感数据,
- 返回JSON数组,
- 响应GET请求,
- 使请求启用JavaScript的浏览器

同样,我不希望发生的是人们只是查看我的index.html源代码然后直接调用JSON服务.

Die*_*Epp 9

有一些很好的方法来验证客户端.

  • 按IP地址.在Apache中,使用Allow/Deny指令.
  • 通过HTTP身份验证:基本或摘要.这很好并且标准化,并使用用户名/密码进行身份验证.
  • 通过cookie.你必须拿出cookie.
  • 通过您发明的自定义HTTP标头.

编辑:

我一开始并没有意识到客户端代码正在调用您的Web服务.如果您让客户端Javascript这样做,那么阻止人们直接调用您的Web服务实际上是不可能的.有人可以阅读源代码.

  • 正确,没办法预防.这就像交给某人一把钥匙,并告诉他们只在星期四打开门. (2认同)

Mat*_*chu 5

这里有一些更具体的答案,但我想提出以下一般观点:

通过AJAX完成的任何操作都由用户的浏览器加载.如果你愿意的话,你可以让黑客的生活变得艰难,但是,最终,没有办法阻止我获取你已经免费提供给我的数据.任何公开可用的服务都是公开的,简单明了.


Jos*_*ith 3

如果您使用 Apache,您可以在位置上设置允许/拒绝。

http://www.apachesecurity.net/

或者这里是关于 Deny 指令的 apache 文档的链接

http://httpd.apache.org/docs/2.0/mod/mod_access.html#deny

编辑(回应新信息)。

Deny 指令也适用于环境变量。您可以根据浏览器字符串限制访问(并不真正安全,但不鼓励随意浏览),这仍然允许 XHR 调用。

我建议实现此目的的最佳方法是拥有某种令牌来验证请求是“好”请求。您可以使用 cookie、某种会话存储或参数(或某种组合)来做到这一点。

对于这样的事情,我建议是为服务生成一个唯一的 URL,该 URL 会在短时间内过期。使用 Memcache 可以轻松完成类似的事情。此策略还可用于混淆服务 URL(这不会提供任何实际的安全性,但会提高想要直接调用的人的门槛)。

最后,您还可以使用公钥加密来执行此操作,但这会非常繁重。您需要为每个请求生成一个新的 pub/priv 密钥对,并将 pubkey 返回到 js 客户端(这里是 javascript 中实现的链接)http://www.cs.pitt.edu/~kirk/cs1501 /笔记/rsademo/