Passwortgenerator für .htpasswd in Python?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
genrich
User
Beiträge: 91
Registriert: Sonntag 27. Juni 2004, 17:46

Hi!

Gibt es eine Möglichkeit ein Passwort für .htpasswd zu "verschlüsseln" sodas man es auf einen Apache Server packen kann???

Mfg.

Genrich
genrich
User
Beiträge: 91
Registriert: Sonntag 27. Juni 2004, 17:46

Ah, schon was gefunden:

Code: Alles auswählen

>>> import crypt
>>> crypt.crypt('Dein PW','aZ'),
Ach schade, das gibt es nur unter UNIX...
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Wieso verschlüsseln? Normalerweise sollte die Datei .htaccess via http oder ftp nicht erreichbar sein. Da sind nur lokale Zugriffe erlaubt oder irre ich da etwa? Das interessiert mich jetzt aber wirklich.

Hier mal noch etwas Stoff zum Nachlesen http://de.selfhtml.org/diverses/htaccess.htm

Hans
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Hans,

also der Zugriff ist zumindest über ftp möglich, sonst könntest Du auf Deinen Webspace keine .htaccess hochladen.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
genrich
User
Beiträge: 91
Registriert: Sonntag 27. Juni 2004, 17:46

genrich
User
Beiträge: 91
Registriert: Sonntag 27. Juni 2004, 17:46

hans hat geschrieben:Wieso verschlüsseln? Normalerweise sollte die Datei .htaccess via http oder ftp nicht erreichbar sein.
Was mir da gerade auffällt.... User und Passwort werden dabei in Klartext durch's Netz geschickt... Das gefällt mich nicht so ganz...
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi,
Was mir da gerade auffällt.... User und Passwort werden dabei in Klartext durch's Netz geschickt... Das gefällt mich nicht so ganz...
Das lässt sich aber durch verwendung eines https-Servers leicht ändern.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
genrich
User
Beiträge: 91
Registriert: Sonntag 27. Juni 2004, 17:46

Dookie hat geschrieben: Das lässt sich aber durch verwendung eines https-Servers leicht ändern.
Theoretisch schon... Bei Hosteurope kann man allerdings nur ein SSL-Proxy einrichten... Bei dem werden wohl Form.-Daten nicht verschlüßelt übertragen... Zumindest warnt Firefox davor!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Tja, HTTP ist halt nicht geeignet sensible daten zu verschichen. Abhilfe: SLL Tunnels -> HTTPS, SSH Tunnels -> stunnel.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
genrich
User
Beiträge: 91
Registriert: Sonntag 27. Juni 2004, 17:46

Kann man mit Python SSL Verbindungen herstellen??? Ich hab was gefunden von httplib.HTTPSConnection:
http://aspn.activestate.com/ASPN/Cookbo ... ipe/117004

Code: Alles auswählen

#!/usr/bin/env python

import httplib

CERTFILE = '/home/robr/mycert'
HOSTNAME = 'localhost'

conn = httplib.HTTPSConnection(
	HOSTNAME,
	key_file = CERTFILE,
	cert_file = CERTFILE
)
conn.putrequest('GET', '/ssltest/')
conn.endheaders()
response = conn.getresponse()
print response.read()
Erst mal weiß ich nicht wie man das CERTFILE erstellen kann... Zweitens weiß ich nicht ob man damit eine richtige Kommunikation zwischen Server und Client (Browser) Aufbauen kann...


Was ich überhaupt erreichen will, ist ja nicht die sichere Authentifizierung, sondern ehr die möglichkeit verschlüßelt Daten von Server zu Client und zurück schicken zu können... Ist das mit "httplib.HTTPSConnection" möglich oder muß man da an "socket.ssl" ran?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

du kannst die Daten auch pgp oder gpg verschlüsseln.
[code]#!/usr/bin/env python
import this[/code]
genrich
User
Beiträge: 91
Registriert: Sonntag 27. Juni 2004, 17:46

Dookie hat geschrieben:du kannst die Daten auch pgp oder gpg verschlüsseln.
Aber kann das Firefox ohne Plugins senden???

Ich will ja nur ein paar Formulardaten nicht in planetext hin und her übermitteln...
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

hmm nö, da müsstest wohl eher was mit Javascript basteln.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
genrich
User
Beiträge: 91
Registriert: Sonntag 27. Juni 2004, 17:46

Dookie hat geschrieben:hmm nö, da müsstest wohl eher was mit Javascript basteln.
Naja, was mann auch mit Javascript anfängt, im grunde bekommt man damit nichts hin was wirklich sicher ist...
Ich meine wenn einer schon soviel energie aufbringen würde, den Datenverkehr zwischen Client und Server zu belauschen, dann kommt er doch ziemlich schnell darauf, das mit dem JS die wichtigen Daten (bsp. Passwort) entschlüsseln kann...
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

und da beisst sich die Python wieder in den Schwanz, http is eben nicht sicher, darum gibts https


Dookie
[code]#!/usr/bin/env python
import this[/code]
genrich
User
Beiträge: 91
Registriert: Sonntag 27. Juni 2004, 17:46

Ein ganz klares Jein von meiner Seite aus :cry:

Hosteurope bietet leider kein echtes https an, sondern nur ein sog. SSL-proxy: http://www.hosteurope.de/?direct=225

Mit dem werden aber nur die Daten vom Server zum Client verschlüsselt, aber nicht anders herrum... Doch gerade beim Einloggen, werden User und Passwort vom Client zum Server geschickt. Das ist somit trotz "https" nur im Plaintext möglich...

Wenn es keine Möglichkeit gibt mittels Python und socket.ssl() etwas zu basteln, dann werde ich einfach .htaccess nutzen :(
Doch ich hab noch nirgends eine einfache beschreibung gefunden, wie man mit socket.ssl() umgehen muß...
genrich
User
Beiträge: 91
Registriert: Sonntag 27. Juni 2004, 17:46

Mir fällt da gerade eine Lösung ein, auch wenn diese nicht wirklich Sicher ist... Es werden zumindest keine Passwörter in Plaintext übermittelt...

Die Idee:

Das Pythonskript auf dem Server schickt ein normales HTML-Formular zum einloggen zum Client.
Darin befindet sich eine "zufällige" Zeichenkette.

In diesem LogIn-Formular wird per JavaScript das eingegebene Passwort mit der Zufälligen Zeichenkette "verschlüsselt".

Zum Server wird nur der Username und das "verschlüßelte" Passwort geschickt (nicht aber die "zufällige" Zeichenkette -> Schlüssel)

Da der Server die "zufällige" Zeichenkette sich gemerkt hat, kann er das Passwort entschlüsseln...


Wie gesagt, es ist nicht wirklich sicher... Wer den Datenverkehr in beiden Richtungen abhöhrt, der kommt auch rein :( Es reicht allerdings nicht, nur die gesendeten Daten einfach noch mal an den Server zu schicken, weil die "zufällige" Zeichenkette ihre gültigkeit verloren hat.
Zum "knacken" der Passwortes muß man vielmehr die Daten vom Server zum Client und die zurückgeschickten Daten abfangen. Dann muß man sich aber noch mal mit dem JavaScript außeinander setzten. Auch wenn es für Programmiere ein großes Problem ergeben sollte, das JavaScript so umzustricken, das man das Passwort zurück entschlüßeln kann...

Zumindest setzt diese kompleziertere Methode sehr viel Kriminelle energie vorraus. Es ist nicht ganz so "einfach", als eine Absicherung nur mit .htaccess
genrich
User
Beiträge: 91
Registriert: Sonntag 27. Juni 2004, 17:46

Vergessen zu erwähnen.... Das User-Passwort ist natürlich auf dem Server als md5, hashwert oder per crypt() abgespeichert und sollte danach verglichen werden :)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Sehr Interessant, du bringst mich da auf eine Idee...

Absolut richtig, das ohne SSL keine richtige Sicherheit gewährleistet ist... Allerdings stinkt es mir auch, das bei meinen kleinen Python-cgi-Homepage-Tools der Login mit dem senden von User/Passwort im Klartext erfolg...

Es gibt doch da von Ralf Mieke die Implementierung des MD5-Fingerprint in JavaScript:
http://www.miekenet.de/publikationen/publi01.html
Ich hab es getestet und es funktioniert! Die MD5 Checksummen sind identisch mit der Python MD5-Summe.

Das könnte man nutzen um zumindest das Passwort nicht mehr im Klartext übermitteln zu müssen...


Also meine Idee ist es, das Passwort vom JavaScript als MD5 zum Server zu senden...
Den UserNamen könnte man nach genrichs Idee mit dieser "Zufälligen Zeichenkette verschlüsseln"...

Auf dem Server wird der UserName entschlüßelt. Mit dem entschlüsselten UserNamen schaut man dann in eine art htaccess-Datei nach dem MD5-Passwort und vergleicht es mit dem geschickten...

Jetzt ist nur ein Problem, das auf dem Server im Klartext der UserName und das MD5-Passwort stehen... Kommt man an diese Daten herran, könnte man sich damit einloggen....
Um das zu verhinden, werden nicht die MD5-Passwörter, die man vom JavaScript erhält, direkt auf dem Server gespeichert, sondern davon wieder ein MD5-Fingerprint...


Wenn ich mir das recht überlege ist die Sicherheit nur gerinfügig höher als in deiner Variante... Aber mit gefällt das besser :) Ich werd das mal versuchen umzusetzten...
Master_of_Mechanic
User
Beiträge: 5
Registriert: Samstag 12. Mai 2007, 18:35

Hallo
wäre eine schöne Sache mit hilfe des Moduls crypt verschlüsselte Passwörter für die .htpasswd Datei zu erstellen. Leider bleibe ich als Windows user dabei aussen vor. :(

was gibt es da für alternativen. ich möchte einfach nur ein Passwort (welches ich mit einem Pythonskript "verwalte") so verschlüsseln das es in die .htpasswd Datei auf meiner Webpage "passt"

Das DOS-Utility HTPASSWD.EXE finde ich nicht gerade ansprechend, vorallem da es sich nicht in Python einbauen läst. :D
Antworten