【问题标题】:How to send sensitive data to an Asp.net Web API server如何将敏感数据发送到 Asp.net Web API 服务器
【发布时间】:2013-04-20 07:33:16
【问题描述】:

我有一个 Asp.net Web API 项目。

项目通过接收名为sessionToken的参数来验证所有请求

http://myapi.com/api/applications/getApplications?sessionToken=xxx

但是,我听说通过公共 url 发送敏感参数是不安全的,我看到了一个 example,我可以在 HttpClient 请求的标头中添加 sessionToken 参数:

using (HttpClient client = new HttpClient())
{
    client.BaseAddress = new Uri("http://myapi.com/");
    client.DefaultRequestHeaders.Add("sessionToken", "xxx");

    HttpResponseMessage response = await client.GetAsync("api/applications/getApplications");
    string stringResponse = await response.Content.ReadAsStringAsync();
}

我很高兴现在我可以读取参数而无需将其放入 url。

通过 http 请求标头发送敏感数据是否安全? (当然,它们至少会被加密)

【问题讨论】:

    标签: asp.net http asp.net-web-api security


    【解决方案1】:

    除非连接是加密的,否则我认为在 url 或 header 中发送任何敏感信息都不是一个好主意。如果您仍想通过不安全的 http 发送它,请使用一些可以加密数据的公钥/私钥加密。我已经构建了一个应用程序,其中 url 包含一些在短时间内有效的加密数据(例如 2 分钟)。

    【讨论】:

      【解决方案2】:

      您说得对,将安全敏感信息放在 Url 上并不是一个好主意。可能导致信息泄露。

      建议将其放在页眉中。以下是一些进一步的建议:

      • 使用Authorize 标头而不是自定义标头。授权标头是为身份验证而设计的。您可以定义自己的方案,也可以使用 OAuth 2.0 中定义的 bearer 等现有方案,而不是重新发明所有轮子。

      • 客户端应始终使用 TLS 来防止MITM 攻击

      • 客户端在发出请求时应始终检查证书链以避免DNS hijacking 攻击

      • 将令牌的过期时间设置为短暂的以避免replay 攻击

      • 确保您的客户端代码不会将令牌存储到其他人可以访问的不安全位置

      【讨论】:

      • 谢谢你..我会研究他们每个人,看看我怎样才能正确地防守......到处都是危险!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      相关资源
      最近更新 更多