command-line input - Eingabe des Befehlszeilenpassworts in Python




password asterisk (5)

Verwenden Sie getpass.getpass() für diesen Zweck.

getpass.getpass - Fordert den Benutzer zur Eingabe eines Passworts auf, ohne dass ein Echo ausgegeben wird

Sie wissen, wie in Linux, wenn Sie einige Sudo-Sachen versuchen, sagt es Ihnen, das Passwort einzugeben und während Sie tippen, wird nichts im Terminalfenster gezeigt (das Passwort wird nicht gezeigt)?

Gibt es eine Möglichkeit, das in Python zu tun? Ich arbeite an einem Skript, das so sensible Informationen benötigt und möchte, dass es beim Eintippen verborgen bleibt.

Mit anderen Worten, ich möchte das Passwort vom Benutzer erhalten, ohne das Passwort zu zeigen.


import sys
import msvcrt

passwor = ''
while True:
    x = msvcrt.getch()
    if x == '\r':
        break
    sys.stdout.write('*')
    passwor +=x

print '\n'+passwor

Dieser Code wird anstelle von jedem Buchstaben Astrix drucken



import getpass

pswd = getpass.getpass('Password:')

Dies funktioniert unter Linux, Windows und Mac.


Die Antwort wurde bereits gegeben, aber ich möchte ein Thema teilen, das ich kürzlich mit Java-Standardbibliotheken entdeckt habe. Während sie jetzt mit großer Sorgfalt darauf achten, Passwortzeichenfolgen überall durch char[] ersetzen (was natürlich eine gute Sache ist), scheinen andere sicherheitskritische Daten übersehen zu werden, wenn sie aus dem Speicher gelöscht werden.

Ich denke an zB die PrivateKey Klasse. Stellen Sie sich ein Szenario vor, in dem Sie einen privaten RSA-Schlüssel aus einer PKCS # 12-Datei laden und diesen verwenden, um einen Vorgang auszuführen. In diesem Fall würde das Sniffing des Kennworts allein nicht viel helfen, solange der physische Zugriff auf die Schlüsseldatei ordnungsgemäß eingeschränkt ist. Als Angreifer wäre es viel besser, wenn Sie den Schlüssel direkt anstelle des Kennworts erhalten. Die gewünschten Informationen können durchgesickert sein, Kerndumps, eine Debugger-Sitzung oder Auslagerungsdateien sind nur einige Beispiele.

Wie sich herausstellt, können Sie die privaten Informationen eines PrivateKey aus dem Speicher PrivateKey , da es keine API gibt, mit der Sie die Bytes PrivateKey aus denen die entsprechenden Informationen bestehen.

Dies ist eine schlechte Situation, da in diesem paper beschrieben wird, wie dieser Umstand potenziell ausgenutzt werden kann.

Die OpenSSL-Bibliothek beispielsweise überschreibt kritische Speicherbereiche, bevor private Schlüssel freigegeben werden. Da Java nicht mehr vorhanden ist, benötigen wir explizite Methoden, um private Informationen für Java-Schlüssel zu löschen und für ungültig zu erklären, die unmittelbar nach der Verwendung des Schlüssels angewendet werden müssen.





python command-line passwords hidden