如何保护站点和内部 API?
Posted
技术标签:
【中文标题】如何保护站点和内部 API?【英文标题】:How to secure a site and internal API? 【发布时间】:2012-02-12 00:21:56 【问题描述】:如果标题就内容而言是纯白痴,请原谅。
我们正在讨论 一个模型,以建立一个交互密集的网站,其中将有
site.com
api.site.com
在同一台服务器上。 site.com 由 php 提供支持,而 api.site.com 将由另一个 Web 框架提供支持。相同或不同的服务器应答这两个域。
呈现的网站对 api.site.com 进行 AJAX 调用。
如果应用程序是“全 PHP”,那么确保这一点很容易。会话功能可以阻止允许的 HTTP 请求:
未登录的陌生人访问用户数据 合法登录的用户请求其他用户的数据问题 1:您如何保护内部 API,以便我们可以确定每个请求的合法性?
我已经用谷歌搜索了 AJAX 和同源策略,但我没有深入了解它们。
我在想随机生成的“令牌”会被两个域承认。
问题 2:此型号有具体名称吗?
【问题讨论】:
【参考方案1】:你应该看看 JSONP。 jQuery 有一个很好的例子:http://api.jquery.com/jQuery.getJSON/
你需要添加 jsoncallback=?到 URL 以使其工作。
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?"
有了这个,你可以避免Same origin Policy
jsoncallback 将是一个时间戳,它应该是 echo-ed
由 PHP 脚本输出 JSON 如下:
jsonp1277656587731(/* rest of the JSON here */);
这里的数字当然是随机生成的字符串,或者是 jQuery JSONP 的时间戳
【讨论】:
以上是关于如何保护站点和内部 API?的主要内容,如果未能解决你的问题,请参考以下文章
从javascript传递到web api 2时如何隐藏或保护令牌
如何在 apache vhost 中使用密码保护 Laravel 站点?