【问题标题】:How to limit consuming of cross domain web service to certain requests如何将跨域 Web 服务的使用限制为某些请求
【发布时间】:2013-12-05 07:08:25
【问题描述】:

如果我在 .NET 中有一个 Web 服务,例如 WCFASMX,当在服务器上发布此服务时,您将无法从托管它的应用程序以外的任何地方访问它,除非您更改允许跨域访问的安全设置。

如果地址已知,现在任何应用程序都可以使用此 Web 服务,对吗? 例如,您可以在本地浏览器中调用此服务器 Web 服务并查看它的作用...

问题是 我怎样才能保护这个网络服务......并限制对某些定义的应用程序或已经预定义到网络服务的请求的消费?

【问题讨论】:

  • 不确定您的意思是 XSS... XSS 指的是安全漏洞。您打算做什么 - 在我看来,您的网站向一个域发出 AJAX 请求,但您现在想引入一个移动应用程序以使用相同的 API?这实际上是一个不同的域(例如 foo.com 与 bar.com)?
  • XSS 表示跨站点脚本...是的,它是一个安全漏洞...我想做的是防止任何人在您知道它的元数据地址时使用我的 Web 服务(告诉我在你的网络上找到 HTTP 请求有多难 :))
  • en.wikipedia.org/wiki/Cross-site_scripting - 这与允许来自不同应用程序(或域)的 Web 服务不同。

标签: ajax wcf web-services security cross-domain


【解决方案1】:

现代浏览器默认阻止跨域访问。这可以通过利用CORS 规范定义的Access-Control-Allow-Origin 标头有条件地放宽。具体来说,来自现代浏览器的跨域 XHR 请求将始终包含一个 Origin 标头,您的服务器代码可以使用它来根据发出请求的页面的域来过滤请求。您的服务器可以拒绝请求,例如,以 401(未授权)响应状态响应),或者通过返回与 Origin 请求标头中的值相同的 Access-Control-Allow-Origin 标头来兑现请求。

请注意,但是,通过 CORS 放宽对系统的访问 - 从安全角度来看 - 与使用某种形式的身份验证来限制访问非常不同。您依赖客户在声明其来源时表现良好,但这并不总是一个有效的假设。

【讨论】:

  • CORS 是关于放松客户端的同源策略,而不是保护服务器端。虽然 OP 可能需要 CORS,但仍然需要服务器解决方案。
【解决方案2】:

您需要将身份验证添加到您的网络服务。因此,对每个方法的请求都将通过 cookie 中发送的令牌进行身份验证。

对于网站,这可以使用网站其余部分使用的身份验证 cookie。如果用户必须登录移动应用程序,那么您还需要对他们进行身份验证。

这将阻止任何无法访问您的网站或移动应用程序的人使用您的网络服务。

我还强烈建议使用 TLS (SSL) 保护您的 Web 服务和站点,以便通过 HTTPS 访问所有内容。

【讨论】:

猜你喜欢
  • 2010-12-01
  • 2014-01-20
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多