跨站点脚本编写要求使我的API无用

时间:2013-01-18 14:13:10

标签: ajax cross-domain asp.net-web-api xss

也许我只是不理解这一点,但这对我来说似乎没有意义。 我有一个暴露ASP.NET WebApi的MVC4项目。它可以很好地调用该项目中的API,但显然从另一个正在运行的项目(在另一个端口上)调用它需要跨站点脚本。

但这是我的问题:这不会破坏API的目的吗?如果我想从我的站点调用reddit API,那么这被认为是跨站点脚本编写的事实使得它不仅是一种糟糕的安全实践,而且在某些情况下是不可能的。

如果要求XSS这样做,那么这不会使AJAX整体上毫无用处吗?

2 个答案:

答案 0 :(得分:1)

简单回答:当然不是!!几乎整个现代网站都是建立在AJAX之上的,如果它是如此毫无意义,它将永远不会从MS专有API变成Web 2.0的骨干,而且从那时起就一直存在。

复杂答案:首先,XSS是一种攻击/漏洞形式,而不是一种请求形式。你所指的是same-origin policy,出于安全原因,它将AJAX请求限制在同一个域中。

JSONP通常用于向第三方API发出异步请求。您的自己的 API通常与您的网站位于同一个域中,因此您不会遇到任何问题。如果您的API必须位于其他域中,您可以查看CORS或设置transparent reverse代理,将您的请求转发给其他域。

希望这一切都有意义,它至少可以为你提供良好的知识基础。

答案 1 :(得分:1)

传统上,大多数应用程序都有服务器和客户端组件。服务器组件将完成所有繁重工作,包括向其他API发出请求。由于API请求是在服务器端完成的,因此请求可以发送到任何远程API服务器。从来没有想过从客户端访问API,因为人们期望服务器这样做。

近年来,我们看到越来越多的功能从服务器推送到客户端,特别是通过JavaScript。但是,由于浏览器same-origin policy,发出远程请求是无法移动到客户端的事情之一。因此,并不是说API的目的被打败了,我们现在正在以我们以前没想过的方式使用API​​。

浏览器突然忽略同源策略是不负责任的。这将打破那些依赖同源策略进行安全保护的数千个网站。因此,W3C提出了Cross-Origin Resource Sharing(CORS)规范。 CORS规范允许跨域进行请求,但通过让服务器对谁可以访问API有最终决定权来安全地执行。这使得跨域请求成为可能,而不会破坏现有的API。