Frage von Adrian2310, 63

Passwörter im Programmcode?

Hallo Community! Meine Frage in letzter Zeit ist, ob es irgendwelche Auswirkungen hat, wenn ich Passwörter (z.B. FTP-Daten) im Programmcode einbinde. Mit Auswirkungen meine ich, ob der Nutzer des Programms das Passwort irgendwie anfangen kann.

Wenn ja, gibt es dafür eine andere Lösung?

Antwort
von AurieMatise123, 44

Passwörter sollten niemals im Quellcode hinterlegt werden; zur Abfrage braucht man nicht einmal zu dekompilieren - ein simpler Hex-Editor genügt.....

Liebe Grüße, Aurie

Kommentar von Adrian2310 ,

Hallo AurieMatise123! Danke für deine Antwort! Würde es sonst noch irgendwelche Varianten geben z.B. eine Datei auf einen Server hochzuladen, ohne das Passwort im Code einzubinden?

Kommentar von AurieMatise123 ,

Es besteht die Möglichkeit, Passwörter verschlüsselt in Datenbanken zu speichern, die dann vom Programm abgefragt werden können; dabei sollte man aber schon eine sichere asymmetrische Verschlüsselung nehmen;

diese Methode ist relativ sicher - allerdings wäre es besser, auf Features dieser Art ganz zu verzichten.....  

Expertenantwort
von TeeTier, Community-Experte für programmieren, 31

Ich suche beruflich nach Sicherheitslücken in Software, und hartkodierte Passwörter sind einer meiner Lieblinge! :)

Um deine Frage zu beantworten: So etwas tut man nicht! :)

Und noch ein kleiner HInweis: Vergleiche eingegebene Passwörter - auch wenn die Referenz verschlüsselt im Quelltext vorliegt, und erst im Speicher zur Laufzeit in Klartext umgewandelt wird - NIEMALS mit gängigen Stringvergleichsmethoden! Das ist so ziemlich das erste, wonach bei einer Analyse automatisiert gesucht wird. Das dauert nur Bruchteile von Sekunden!

In einer Schleife Buchstabe für Buchstabe zu überprüfen, ist aber auch nicht optimal.

Naja, oder du machst es wie FileZilla, und schreibst die Passwörter im Klartext in eine XML-Datei ... die sind wenigstens so ehrlich, und benennen dieses "Problem" auch an verschiedenen Stellen, wobei deine Anferderung ja eine andere als deine ist. :)

Fazit: Lass es sein! :)

Kommentar von CrystalixXx ,

Noch eine kleine Ergänzung:

Entweder man versucht eine halbwegs sichere Implementierung über ein ByteArray oder man nutzt die SecureString-Klasse, wenn es um eine .NET Sprache geht.

Antwort
von 3v1lH4x0R, 33

passwörter NIE hardcoden
lässt sich auslesen (muss nichmal irgendwas gemacht werden, dekompilieren total unnötig -- steht ja im klartext drin)

Antwort
von xGlumi, 18

Ich hoffe du willst keinen 0815-Stealer schreiben ^^

Deine Frage wurde hier ja jetzt zu genüge beantwortet, nur du weisst immernoch nicht was du nun nutzen sollst.

Ich würde dir zu einem PHP Upload raten (Setzt natürlich minimale Grundkenntnisse in PHP & MySQL vorraus)

Ablauf:
- Du suchst dir nen Webspace
- Erstellst eine .php-Datei in der du nach bestimmten
  GET oder POST-Parametern abfragst, und diese in eine MySQL-Datenbank   schreibst.
- In VisualBasic selbst schreibst du jetzt entweder einen HTTPWebRequest-Aufruf an deine Seite mit den GET/POST-Parametern oder du nutzt die "WebClient"-Klasse von VB.

Hier mal einpaar Code-Snippets die ich eben zusammengeschrieben habe.

(Also noch nicht auf funktionalität getestet, sollte aber klappen ^^)
Funktioniert gut, wenn du Informationen hochladen möchtest.

'Code by xGlumi (Nutzen der WebClient-Klasse für einen Aufruf)
dim client as new Net.WebClient
dim ausgabe as string = client.downloadString("http://deineseite.de/upload.php?name=INFO&nachname=INFO")
'Code by xGlumi (HTTPWebRequest zum Aufruf benutzen)
Dim Request As System.Net.HttpWebRequest = CType(System.Net.WebRequest.Create("http://deineseite.de/upload.php"), System.Net.HttpWebRequest)
Request.Method = "POST" 'Hier wird festgelegt, ob du einen POST oder GET-Request durchführen möchtest.
'Bei GET musst du die Parameter mit in die URL nehmen, anstatt in den Post-String
Request.ContentType = "application/x-www-form-urlencoded"
Dim Post As String = "name=INFO&nachname=INFO"
Dim byteArray() As Byte = System.Text.Encoding.UTF8.GetBytes(Post)
Request.ContentLength = byteArray.Length
Dim DataStream As System.IO.Stream = Request.GetRequestStream()
DataStream.Write(byteArray, 0, byteArray.Length)
DataStream.Close()
Dim Response As System.Net.HttpWebResponse = Request.GetResponse()
DataStream = Response.GetResponseStream()
Dim reader As New System.IO.StreamReader(DataStream)
Dim ServerResponse As String = reader.ReadToEnd()
reader.Close()
DataStream.Close()
Response.Close()
<?php
//Code by xGlumi (Simpler Grundaufbau eines PHP-Upload)
$mysql_host = "localhost"
$mysql_user = "meinUser"
$mysql_pass = "meinPasswort"
$mysql_db = "meinDatenbankName"
mysql_connect($mysql_host, $mysql_user ,$mysql_pass);
mysql_select_db($mysql_db);
if (isset($_GET["name"]) && isset($_GET["nachname"])){
$name = mysql_real_escape_string($_GET["name"]);
$nachname = mysql_real_escape_string($_GET["nachname"]);
$eintrag = mysql_query("INSERT INTO benutzer(name, nachname) VALUES('".$name."','".$nachname."')");
}
?>

P.S. Wer jetzt mit einer Argumentation wegen mysql/mysqli ankommt ->
Verkriecht euch bitte wieder unter eure Steine, danke.

MFG xGlumi

Antwort
von Harvix, 44

In welchem Programmcode?

Kommentar von Adrian2310 ,

In dem Programmcode, den man in Visual Basic erstellt. Sorry, das habe ich vergessen.

Kommentar von Harvix ,

Kann ich fragen was du vor hast? Warum willst du dein FTP Passwort dort einbinden?

Keine passende Antwort gefunden?

Fragen Sie die Community