【问题标题】:Cross-Site Scripting requirement makes my API useless跨站点脚本要求使我的 API 无用
【发布时间】:2013-01-02 06:27:09
【问题描述】:

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

但这是我的问题:这不会违背 API 的目的吗?如果我想从我的站点调用 reddit API,这被认为是跨站点脚本,这不仅是一种糟糕的安全做法,而且在某些情况下是不可能的。

如果需要 XSS 来执行此操作,那是否会使 AJAX 整体上毫无用处?

【问题讨论】:

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


    【解决方案1】:

    简单回答:当然不是!!几乎整个现代 Web 都是基于 AJAX 构建的,如果它如此毫无意义,它就永远不会从 MS 专有 API 转变为 Web 2.0 的骨干以及此后的一切。

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-08-25
        • 1970-01-01
        • 1970-01-01
        • 2014-01-27
        • 2011-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-28
        相关资源
        最近更新 更多