我有一个asp.net web api项目。
项目通过接收名为sessionToken
的参数来验证所有请求。http://myapi.com/api/applications/getApplications?sessionToken=xxx
但是,我听说通过公共url发送敏感参数是不安全的,我看到了一个example可以在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请求头发送敏感数据是否安全?(当然,它们至少会被加密)
最佳答案
你说的对,把安全敏感信息放在url上不是一个好主意。它会导致信息披露。
建议将其置于页眉。以下是一些进一步的建议:
使用Authorize头而不是自定义头。authorize头是为身份验证而设计的。您可以定义自己的方案,也可以使用OAuth2中定义的“AA>”这样的现有方案,而不是重新发明所有的轮子。
客户端应始终使用tls来防止bearer攻击
客户端在发出请求时应始终检查证书链,以避免MITM攻击
将令牌的过期时间设置为短暂,以避免DNS hijacking攻击
确保客户端代码不会将令牌存储到其他人可以访问的不安全位置