2017-10-09 3 views
1

ich eine Asynchron-Methode, die Httpclient verwendet:Wechsel von Httpclient zu Webclient, das Passwort im Klartext sendet

private static HttpClient client = new HttpClient(); //As pointed by @maccettura 
private async Task<string> GetResult(Uri url, string user, string pass) 
{ 

    var PassArray = new UTF8Encoding().GetBytes(user + ":" + pass); 

     client.BaseAddress = url; 

     client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(_passArray)); 

     string result; 

     using (HttpResponseMessage response = await client.GetAsync(url)) 
     using (HttpContent content = response.Content) 
     { 
      result = await content.ReadAsStringAsync(); 
     } 
     return result; 
    } 

Dass ich

synchrones WebClient zu ändern hatte
 private string GetResult(Uri url, string user, string pass) 
    { 
     using (var client = new WebClient()) 
     { 
      client.UseDefaultCredentials = true; 
      client.Credentials = new NetworkCredential(user, pass); 
      using (var stream = client.OpenRead(url)) 
      using (var streamReader = new StreamReader(stream, Encoding.UTF8, true)) 
      { 
       return streamReader.ReadToEnd(); 
      } 
     } 
    } 

Bin Kompromisse ich Sicherheit durch Einfacher Benutzername und Passwort senden? Wenn ja, gibt es eine Möglichkeit, die Sicherheit zu erhöhen? (Die URL ist eine Https-Adresse)

+0

FYI, [Sie verwenden Httpclient falsch] (https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/). – maccettura

+0

@maccettura Oooo ... Interessant. Vielen Dank! – Yasskier

+0

Es ist die Verwendung von HTTPS, nicht die von Ihnen verwendete Bibliothek, die die Anmeldeinformationen schützt. Base64-Kodierung ist sowieso kein Schutz. – Crowcoder

Antwort

0

Ja, Sie sind Kompromisse durch Klartext Benutzernamen und Passwort zu senden. Es kann Netzwerk-Sniffer geben, die die Pakete, die Sie über HTTP senden, abholen und lesen können. Wenn der Benutzername und die Passwörter klar sind, dann äh-oh. Schnüffler schnüffeln normalerweise an öffentlichen Orten wie Bibliotheken und Cafés.

+0

Und Ihre Lösung wäre ....? – Yasskier

+0

Sie haben Recht, aber es hat nichts mit WebClient vs HttpClient zu tun. – Crowcoder

+0

die Lösung ist, was Sie erwähnt, indem Sie ein Geheimnis und Algorithmus verschlüsseln mit Ihrem Geheimnis dann entschlüsseln, wenn Sie erhalten. – sdfbhg

1

In beiden Fällen Anmeldeinformationen in „Klartext“ zu senden. In beiden Fällen werden sie vor dem Senden in base-64 konvertiert, was sie jedoch nicht sicherer macht. Der einzige Unterschied besteht darin, dass der Webclient im zweiten Fall (WebClient) zuerst eine Anfrage ohne Anmeldeinformationen durchführt. Dann wird es 401 Unauthorized Antwort erhalten und danach wird es zweite Anforderung mit den exakt gleichen Authorization Basic <base64_here> Header machen, so ist es irgendwie weniger effizient als dieser Header sofort anwenden. Aber wieder senden beide Fälle genau den gleichen Berechtigungsheader. Wie bereits gesagt - wenn Sie eine Anfrage an den https-Endpunkt stellen, sollten Ihre Anmeldeinformationen sicher sein, dass sie von Dritten nicht abgefangen werden. Sie müssen Ihre eigene Verschlüsselung nicht implementieren, wenn Sie bereits einen verschlüsselten Kanal verwenden.

Verwandte Themen