如何保护站点和内部 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 站点?

Next.js 默认是同站点来源,但我仍然可以访问它

安全编码实践保护自己免受跨站点脚本攻击

Django网络安全跨站点请求伪造保护,CSRF如何正确使用

如何在 javascript 中保护 location.href 免受跨站点脚本的影响?