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服务.
有一些很好的方法来验证客户端.
编辑:
我一开始并没有意识到客户端代码正在调用您的Web服务.如果您让客户端Javascript这样做,那么阻止人们直接调用您的Web服务实际上是不可能的.有人可以阅读源代码.
这里有一些更具体的答案,但我想提出以下一般观点:
通过AJAX完成的任何操作都由用户的浏览器加载.如果你愿意的话,你可以让黑客的生活变得艰难,但是,最终,没有办法阻止我获取你已经免费提供给我的数据.任何公开可用的服务都是公开的,简单明了.
如果您使用 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/
归档时间: |
|
查看次数: |
7589 次 |
最近记录: |