4

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

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

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

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

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 请求标头发送敏感数据是否安全?(当然,它们至少会被加密)

4

2 回答 2

2

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

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

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

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

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

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

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

于 2013-04-29T22:25:36.797 回答
1

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

于 2013-04-29T22:35:34.307 回答