【问题标题】:Asp .net Web api how to avoid url hit from browser?Asp .net Web api如何避免浏览器的url命中?
【发布时间】:2014-10-20 12:44:39
【问题描述】:

我正在使用 web api 1. 对于获取 api,我可以在浏览器地址栏中输入 url (servername:portno/api/Controllername/apiname/) 并直接从浏览器调用 api 并获取 json 输出

这似乎是一个安全问题。如何限制此 url 命中?

但我不能在 Web api 中使用任何身份验证或授权,因为它是从 UI 端(移动性)处理的

【问题讨论】:

  • 为什么不能对 web api 使用身份验证或授权?如何认为动词是安全的?
  • 仅从 UI 端保护 Web 服务实际上并不安全。没有人会阻止其他人查看来自您的 UI 应用程序的请求,并且正如您发现的那样,从浏览器或其他应用程序复制它们。您可以尝试检查某些特定的标头字段作为一种身份验证,但这很容易被第三方发现。

标签: asp.net-web-api asp.net-web-api2


【解决方案1】:

有多种方法可以保护您的 Web API。实际上,您不需要一些“HTML UI”来完成它们。

  • 您可以使用 HTML UI,您的用户将在其中使用 HTTP POST 表单并将登录名/密码交换为某个令牌(会话 ID、OAuth 单点登录令牌等)。
  • 您也可以在没有用户的情况下使用 HTTP POST 表单,只需使用您的代码即可。结果将是相同的,凭据被交换为一些令牌,这些令牌包含在 HTTP 标头中的每个下一个请求中
  • 您可以通过编程方式限制从某些 IP 地址或服务访问您的 API

无论如何,实现身份验证和/或授权技术需要所有方式。而您在 HTML UI 中看到的只是冰山一角,无需用户即可完成。

当您需要关闭来自浏览器的 HTTP 请求时,只需使用浏览器代理检查 HTTP 标头。

authentication 或只是浏览器代理 HTTP 标头的特殊处理程序,您至少都需要 MessageHandlers。

开始深入了解 WebAPI 身份验证的 URL http://www.asp.net/web-api/overview/security

【讨论】:

  • 还有一个信息是我们已经使用 web.config 实现了 cors,如下所示
  • 但我仍然可以使用 IE 访问 get api。由于来自 IE 的请求不包含来源,因此无法解决。有没有办法在不进行身份验证的情况下解决这个问题。此外,我们仅使用 web api 1,因此高级 cors 概念不起作用。
猜你喜欢
  • 2020-05-01
  • 2019-04-05
  • 2015-02-19
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 2017-07-11
  • 1970-01-01
  • 2016-08-11
相关资源
最近更新 更多