Joh*_*ith 1 .net c# security credentials httprequest
如果我需要对需要登录凭据的站点进行HttpRequest,我可以使用类似于以下的代码,但是你可以看到用户名和密码只是base64编码,这意味着如果有人要拦截http请求全部他们要做的是搜索与"授权"标题相关联的值,并且他们有我的登录信息.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://...");
request.Headers.Add("Authorization",
string.Format("Basic {0}", Convert.ToBase64String(Encoding.Default.GetBytes(
string.Format("{0}:{1}", username, password)))));
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream s = response.GetResponseStream())
{
using (StreamReader r = new StreamReader(s))
{
DoSomething(r.ReadToEnd());
}
}
}
Run Code Online (Sandbox Code Playgroud)
以下代码是更好的替代方案,还是使用"基本"授权标头发出http请求?
WebClient wc = new WebClient();
wc.Credentials = new NetworkCredential(username, password);
DoSomething(wc.DownloadString("https://..."));
Run Code Online (Sandbox Code Playgroud)
如果两个代码都没有导致http请求"隐藏"登录凭据,并且实际上有一种方法可以"隐藏"它们,那么正确的方法是什么?
如果您使用HTTPS向服务器发出webrequest,则包括标头在内的整个邮件都会被加密.因此,您基本上无需担心加密数据.如果您打开Wireshark并尝试嗅探数据包,您会发现它们不可读.
.NET Framework将根据您发送请求的URL来处理引擎盖下所需的SSL加密.
更多信息可以在MSDN上找到:http://msdn.microsoft.com/en-us/library/ds8bxk2a.aspx