Connect failed: Connection timed out

[GastForen Archiv Perl und CGI Passwort ändern

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Archiv - Archivierte Foren
Themen
Beiträge
Moderatoren
Letzter Beitrag

Passwort ändern

Anonym
Beiträge gesamt: 22827

1. Dez 2002, 20:14
Beitrag # 1 von 29
Bewertung:
(7541 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich denke, das hat mit dem alten Thema (siehe http://www.hilfdirselbst.ch/...18&topic_id=3615 ) nix mehr zu tun, deshalb mach ich mal nen neuen Threat draus... Damit jeder weiß, worum es geht: Ein Bereich einer Website ist mit .htaccess und .htpasswd geschützt und die Benutzer sollen ihre Passwörter selbstständig ändern können.

Also Ollli, ich hab mir dein "Anfängerscript" mal zu Gemüte geführt, check es aber doch nicht so ganz. Nur mal im groben, Schritt für Schritt:

Du hast eine Seite mit einem Formular mit 4 Eingabefeldern:
Benutzername; Altes Passwort; Neues Passwort; Neues Passwort wiederholen

Die eingegebenen Daten werden mit POST an das Script übergeben. Dieses vergleicht den Benutzername und das alte Passwort mit den Daten in der Datei, die die Zugangsdaten enthält. Sind die Daten vorhanden/korrekt, wird das alte Passwort ersetzt und es kommt eine Bestätigungsseite. Soweit sogut.

Jetzt mal zum eigentlichen Script - ich kommentier mal etwas :)
Langsam, ausführlich und der Reihe nach, soweit ich eben weiß...
(Hab SelfHTML neben mir legen, ich versuch mal selber rauszu-
kriegen, was das Zeug alles bewirkt ;)

$passwd_pfad = "/....../ollli/.htpasswd";
$passwdbackup = "/......./ollli/.htpass2";
# Damit werden die Adressen in Variablen gespeichert.

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
# Damit werden die übertragenen Formulardaten ausgelesen.
# Read heißt lesen, STDIN weiß ich nimma (01)
# $ENV ist eine CGI-Umgebungsvariable,
# CONTEN_LENGTH enthält die Anzahl der Zeichen, die mit POST
# übertragen wurden.
# Diese Daten werden im Skalar (in der Variablen) $buffer ge-
# speichert.
# Damit ergibt sich Frage (01): Was war nochmal STDIN?

@pairs = split(/&/, $buffer);
# Im Arrey @pairs werden die übertragenen Daten aus $buffer
# gesplittet und einzeln gespeichert. Also z.B.
# my @pairs = ("Benutzername", "Klaus", "Altes_Passwort", ...);
# Frage 02: Wäre es hier nicht sinnvoller, einen Hash zu "dekla-
# rieren"? Also z.B. my %Daten = split(...); Und was heißt /&/ ?

foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/<([^>]|\n)*>//g;
$FORM{$name} = $value;
}
# foreach ist eine Schleife, die Listen und Arrays durchläuft.
# In diesem Fall wird der Array @pairs durchlaufen, und der
# jeweils aktuelle Wert des Schleifendurchlaufs wird im Skalar
# $pairs gespeichert. Ich glaub, jetzt weiß ich auch, warum du
# oben keinen Hash verwendest, den kann man nicht so einfach mit
# foreach durchlaufen.
# Aber was macht die Schleife? Bitte das Zeug in der geschweiften
# Klammer mal erklären (3). Was heißt /=/ ? und der ganze Rest?
# Das ist mir irgendwie schon zuviel :(

- - - - - - - - - - - - - - - - - -
Erst mal soweit. Wenn du mir hier kurz weiterhilfst, mach ich weiter. Ich weiß, dass die Schleife die Daten in Formularfeldernamen und Werte trennt, aber die Befehle verstehe ich nicht so recht.
- - - - - - - - - - - - - - - - - -
X

Passwort ändern

Anonym
Beiträge gesamt: 22827

1. Dez 2002, 20:17
Beitrag # 2 von 29
Beitrag ID: #18190
Bewertung:
(7539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich bin nicht annonym, bin Hanü!!!!
Wenn kommen endlich die Cookies?!

Gruß Andreas

P.S. hab die Antwort offline verfasst, dann eingewählt und gesendet. So ein Mist ;)


als Antwort auf: [#18188]

Passwort ändern

Ollli
Beiträge gesamt: 458

2. Dez 2002, 00:47
Beitrag # 3 von 29
Beitrag ID: #18201
Bewertung:
(7539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Hanü!

Ist nicht so schlimm wegen dem Script. Als ich jetzt durchgegangen bin habe ich mir teilweise auch an den Kopf gegriffen.
Aber ich habe hier mal eine kommentierte Version des Scriptes, die dich hoffentlich zufrieden stellt ;-)
Wenn nicht, dann meld dich einfach nochmal!

--- Code ---
#!/usr/local/bin/perl

$passwd_pfad = "/....../ollli/.htpasswd";
# ist klar
$passwdbackup = "/......./ollli/.htpass2";
# genauso klar

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
# Einlesen der gesendeten Daten
# STDIN ist der StandardInput, sprich die Daten, die empfangen werden

@pairs = split(/&/, $buffer);
# splittet die Daten auf, sprich aus
# name=ollli&pass1=123456&pass2=123456&passold=654321
# wird @paris = ("name=ollli","pass1=123456" .....
# es wird also ein array erzeugt, wobei immer nach dem "&" abgeschnitten wird
# und das "&" auch noch entfernt wird

foreach $pair (@pairs)
# für jedes Array-Element
{
($name, $value) = split(/=/, $pair);
# jetzt kommt die Aufteilung
# in feldname und dem dazugehörigen Wert diesmal ist "=" das Trennzeichen
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/<([^>]|\n)*>//g;
# diese Anweisungen eben haben die Inhalte der Fomulare wieder
# "brauchbar" gemacht - es wurden zum Beispiel die + durch Leerzeichen
# ersetzt oder html-tags entfernt und die Hex-Codes zu den ent-
# sprechenden Zeichen umgewandelt
$FORM{$name} = $value;
# hier kommt dann dein gewünschter Hash ;-)
}

# die folgenden Variablenzuweisungen sind eigentlich nicht nötig, doch
# damals hielt ich es eben für nötig ;-)
$passold = $FORM{'passold'};
$pass1 = $FORM{'pass1'};
$pass2 = $FORM{'pass2'};
$name = $FORM{'name'};
$i = 0;
# frag mich nicht, warum ich diese Zeile eingebaut hatte, die kannste
# rauslöschen


&candc;
# prozeduraufruf oder auch Aufruf der Subroutine ;-)

sub austausch()
# Prozedur für Passwortänderung
{
open(PWL, "$passwd_pfad") || &error("Kann Passwort-Datei nicht öffnen: $!");
@pwl = <PWL>;
close(PWL) || &error("Kann Passwort-Datei nicht schließen: $!");
# die drei Zeilen erklärten sich von selbst, oder?
open(BKP,">$passwdbackup") || &error("Kann Sicherungsdatei nicht öffnen: $!");
#noch fix ein Backup anfertigen, sowas ist immer wichtig
open(PWL,">$passwd_pfad") || &error("Kann PWL-DAT nicht öffnen: $!");
foreach $line (@pwl) # jetzt jede Zeile der Datei durchgehen
{
print BKP $line;
# die Zeile komplett ohne Änderungen ins Backup schreiben
($user, $pw) = split(/:/,$line);
# jetzt username und pw trennen
chomp($pw);
# newline am Ende des pw entfernen
if($user eq $name && $pw eq $cpassold)
# verlgeichen der Daten
{
print PWL "$name:$cpassnew\n";
# neue Daten schreiben, wenn Vergleich
# erfolgreich war
}
else
{
print PWL $line;
# anderfalls die Zeile aus der alten Datei übernehmen
}
}
# Statusvericht --> der ist ja variabel
print "Content-type: text/html\n\n";
print "<html><head><title>Alles glatt verlaufen</title></head>\n";
print "<body>Das Passwort wurde geändert!</body>";
print "\n</html>";
}

sub candc()
# Prozedur zum Checken der Eingaben und zum verschlüsseln vom pw
{
$vorhanden = "nein";
# für spätere Abfrage nötig
$cpassold = crypt($passold, "YL");
# eingegebenes pw verschlüsseln
if($pass1 ne $pass2)
# die neuen pws vergleichen
{
&error("Die beiden neuen Passw&ouml;rter stimmen nicht &uuml;berein, bitte korrigieren Sie");
# Fehlermeldung wenn sie unterschiedlich sind
}
else
{
open(PWL,"/data1/virtualave.net/ollli/.htpasswd") || &error("Kann PWL-DAT nicht öffnen: $!");
@pwlist = <PWL>;
close(PWL);
# pw-Datei öffnen und auslesen
foreach $pl (@pwlist)
# jede Zeile in der pw-Datei durchgehen
{
($user, $pw) = split(/:/, $pl);
chomp($pw);
# die beiden Zeilen siehe oben
if(($user eq $name) && ($pw eq $cpassold))
# vergleichen von pw und
# username
{
$cpassnew = crypt($pass1, "YL");
# neues pw verschlüsseln
$vorhanden = "ja";
# status ändern
}
}
if($vorhanden eq "ja")
# status checken
{
&austausch;
# pw ändern
}
else
# oder Fehlermeldung ausgeben
{
&error("Benutzername und Kennwort passen nicht zueinander, bitte beide Eingaben &uuml;berpr&uuml;fen!");
}
}
}

sub error()
# Fehlermeldung, selbsterklärend würde ich sagen
{
print "Content-type: text/html\n\n";
$message = $_[0];
if($message =~ /Kann/)
# ein Tipp, er sucht nach "Kann" in der mitgeliferten
# Fehlermeldung und entscheided sich dann für eine Ausgabe oder nicht
# diese Abfrage ist letztendlich auch sinnlos, da teilweise kein "Kann" in
# den Meldungen enthalten ist
{
print $message;
}
else
{
print ("
<html>
<head>
<meta http-equiv=\"content-type\" content=\"text/html;charset=iso-8859-1\">
<title>Passwort&auml;nderung</title>
</head>
<body bgcolor=\"#ffffff\">
<form name=\"formular\" action=\"/cgi-bin/htpwch.pl\" method=\"post\">
<p>$message<br>
<br>
Benutzername: <input type=\"text\" name=\"name\" size=\"24\" value=\"$name\"><br>Altes Passwort: <input type=\"password\" name=\"passold\" size=\"24\" value=\"\"><br>
Neues Passwort: <input type=\"password\" name=\"pass1\" size=\"24\" value=\"\"><br>
Neues Passwort wiederholen: <input type=\"password\" name=\"pass2\" size=\"24\" value=\"\"><br>
<br>
<input type=\"submit\"> <input type=\"reset\"></p>
</form>
<p></p>
</body>
</html>

")

}
}
--- Code End ---

Nochmal kurz zu meinen "Anfangszeiten":
Man sieht es zum Beispiel an dem sinnlos deklariertem "$i" oder daran, dass ich in Prozeduren mit globalen Variablen arbeite oder an meiner "Message-Abfrage". Dann sicherlich noch an ein paar anderen Punkten, welche mir jetzt um diese Zeit nicht aufgefallen sind ;-)
Du kannst es also nur noch besser machen, das Script! :-)

Tschö
Olli


als Antwort auf: [#18188]

Passwort ändern

Hanü
Beiträge gesamt: 219

4. Dez 2002, 00:42
Beitrag # 4 von 29
Beitrag ID: #18390
Bewertung:
(7539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Als ob ich's nicht geahnt hätte - bei mir funktioniert es natürlich wieder nicht, dein tolles Script. Hab den Spaß mal Online gesetzt, um es auszuprobieren. Ebenso ist auch gleich Sabine's Script zum Einsatz gekommen, das funktioniert ausnahmsweise. ;)

[//edit: URL und Zugangsdaten entfernt, da geändert]

Ist man eingeloggt, kommt ein Formular zum ändern des Passwortes. Wenn man auf Ändern klickt, kommt ne Serverfehlermeldung. Ich hab jetzt folgendes Script verwendet:

//:edit
habe das Script wieder rausgenommen, da wird der Threat so ewig lang :)
//:edit

Rechte auf 755 und eine htpasswd existiert auch. Ich weiß ja nicht.....

Gruß Andreas


als Antwort auf: [#18188]
(Dieser Beitrag wurde von Hanü am 10. Dez 2002, 02:24 geändert)

Passwort ändern

oesi50
  
Beiträge gesamt: 2315

4. Dez 2002, 01:16
Beitrag # 5 von 29
Beitrag ID: #18393
Bewertung:
(7539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü,

versuch mal die erste Zeile in

#!/usr/bin/perl

zu ändern.

Grüße oesi


als Antwort auf: [#18188]

Passwort ändern

Ollli
Beiträge gesamt: 458

4. Dez 2002, 17:47
Beitrag # 6 von 29
Beitrag ID: #18499
Bewertung:
(7539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Genau, das hatte ich vergessen zu ändern, denn bei virtualave.net brauchste das local noch mit drin, im Perl-Pfad.

Es müsste also nur am Perl-Pfad liegen, allerdings müssen die Passwort- und die Backup-Datei auch Schreibzugriff haben, damit die Scripte draufschreiben können.
Es müsste also in der Art "chmod 606 datei" sein, damit es funktioniert.

Ollli


als Antwort auf: [#18188]

Passwort ändern

Hanü
Beiträge gesamt: 219

5. Dez 2002, 02:26
Beitrag # 7 von 29
Beitrag ID: #18533
Bewertung:
(7539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das das Script nicht funzt lag tatsächlich an dem local. Jetzt wird es angesprochen, bringt aber 2 der Scripteigenen Fehlermeldungen:

Kann PWL-DAT nicht öffnen: No such file or directoryContent-type: text/html
Benutzername und Kennwort passen nicht zueinander, bitte beide Eingaben überprüfen!

Zweiteres kann aber nicht sein. Aber probiert es einfach selbst. URL und Zugangsdaten dto. und nach "erfolgreichem" ändern bitte wieder altes PW festlegen.

Achso, und ich kann die Rechte der .htpasswd irgendwie nicht ändern!? Das geht net!? Liegt vielleicht am Hoster. Muss ich die Backup datei vorher beim ersten gebrauch von Hand anlegen, oder erstellt die das Script?

Gruß Hanü


als Antwort auf: [#18188]
(Dieser Beitrag wurde von Hanü am 5. Dez 2002, 02:28 geändert)

Passwort ändern

oesi50
  
Beiträge gesamt: 2315

5. Dez 2002, 10:28
Beitrag # 8 von 29
Beitrag ID: #18555
Bewertung:
(7539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü,

such mal diese Zeile:
open(PWL,"/data1/virtualave.net/ollli/.htpasswd") || &error("Kann PWL-DAT nicht öffnen: $!");

und ersetze sie durch:
open(PWL, "$passwd_pfad") || &error("Kann Passwort-Datei nicht öffnen: $!");

Grüße oesi


als Antwort auf: [#18188]

Passwort ändern

Ollli
Beiträge gesamt: 458

5. Dez 2002, 18:04
Beitrag # 9 von 29
Beitrag ID: #18632
Bewertung:
(7539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So ein Mist, hatte ich doch noch eine Zeile übersehen, sorry!

Ollli


als Antwort auf: [#18188]

Passwort ändern

Hanü
Beiträge gesamt: 219

6. Dez 2002, 00:45
Beitrag # 10 von 29
Beitrag ID: #18669
Bewertung:
(7539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Habs geändert, funktioniert aber trotzdem nicht :(

Kleine Bitte: Könntet ihr den Teil nochmal genauer erklären (Zeilenweise)?! Was ist eigentlich PWL und BKP? Danke.


_________________________________________
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/<([^>]|\n)*>//g;

$FORM{$name} = $value;
}

&candc;

sub austausch()
{
open(PWL, "$passwd_pfad") || &error("Kann Passwort-Datei nicht öffnen: $!");
@pwl = <PWL>;
close(PWL) || &error("Kann Passwort-Datei nicht schließen: $!");
open(BKP,">$passwdbackup") || &error("Kann Sicherungsdatei nicht öffnen: $!");
open(PWL,">$passwd_pfad") || &error("Kann PWL-DAT nicht öffnen: $!");

foreach $line (@pwl)
{
print BKP $line;
($user, $pw) = split(/:/,$line);
chomp($pw);
if($user eq $name && $pw eq $cpassold)
{
print PWL "$name:$cpassnew\n";
}
else
{
print PWL $line;
}
[..]

sub candc()
{
$vorhanden = "nein";
$cpassold = crypt($passold, "YL");
if($pass1 ne $pass2)
{
&error("Die beiden neuen Passw&ouml;rter stimmen nicht &uuml;berein, bitte korrigieren Sie");
}
else
{
open(PWL, "$passwd_pfad") || &error("Kann Passwort-Datei nicht öffnen: $!");
@pwlist = <PWL>;
close(PWL);

foreach $pl (@pwlist)
{
($user, $pw) = split(/:/, $pl);
chomp($pw);
if(($user eq $name) && ($pw eq $cpassold))
{
$cpassnew = crypt($pass1, "YL");
$vorhanden = "ja";
}
}
if($vorhanden eq "ja")
{
&austausch;
}
else
{
&error("Benutzername und Kennwort passen nicht zueinander, bitte beide Eingaben &uuml;berpr&uuml;fen!");


als Antwort auf: [#18188]
(Dieser Beitrag wurde von Hanü am 6. Dez 2002, 01:35 geändert)

Passwort ändern

oesi50
  
Beiträge gesamt: 2315

6. Dez 2002, 13:04
Beitrag # 11 von 29
Beitrag ID: #18718
Bewertung:
(7539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo hanü,
probier mal das hier:
#!/usr/bin/perl
$loginurl ="http://abi.hanue.de/...ty/anmeldung.shtml"; # URL zum Loginformular
$passwd_pfad = ".htpasswd"; # Pfad zur Passwortdatei
################################
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs){
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/<([^>]|\n)*>//g;
$FORM{$name} = $value;
}
$passold = $FORM{'passold'};
$pass1 = $FORM{'pass1'};
$pass2 = $FORM{'pass2'};
$name = $ENV{'REMOTE_USER'};
print qq|Content-type: text/html;charset=iso-8859-1\n\n|;
print qq|<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n|;
print qq|<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<title>Passwort&auml;nderung</title>
</head>
<body bgcolor="#ffffff">
|;
if($pass1 ne '' && $pass2 ne ''){
if ($pass1 ne $pass2) {
$meldung = "Die beiden neuen Passw&ouml;rter stimmen nicht &uuml;berein, bitte korrigieren Sie";
}else {
&pwaend;
if($vorhanden eq 'ja'){
$meldung = qq|Das Passwort wurde geändert, bitte neu anmelden!<br><a href="$loginurl">zum Loginformular</a>|;
}else{
$meldung = "Benutzername und Kennwort passen nicht zueinander, bitte beide Eingaben &uuml;berpr&uuml;fen!";
}
}
}
print qq|
<h4>$name ist angemeldet</h4>
<h5><font color="red">$meldung</font></h5>
|;
if ($vorhanden ne "ja"){
print qq|
<form name="formular" action="pwaendern.pl" method="post">
<table>
<tr><td>Altes Passwort:</td><td><input type="password" name="passold" size="24" value=""></td></tr>
<tr><td>Neues Passwort:</td><td><input type="password" name="pass1" size="24" value=""></td></tr>
<tr><td>Neues Passwort wiederholen:</td><td><input type="password" name="pass2" size="24" value=""></td></tr>
<tr><td><input type="submit"></td><td><input type="reset"></td></tr>
</table>
</form>
</body>
</html>
|;
}
exit;
sub pwaend{
open(PWL,"+<$passwd_pfad") || &error("Kann PWL-DAT nicht öffnen: $!");
flock (PWL,2);
@pwlist = <PWL>;
$vorhanden = "nein";
for ($i=0;$i<=$#pwlist;$i++){
$pl = $pwlist[$i];
chomp($pl);
($user, $pw) = split(/:/, $pl);
next if($user ne $name);
$cpassold = crypt($passold, $pw);
if($pw eq $cpassold){
$cpassnew = crypt($pass1, $pw);
splice @pwlist,$i,1, "$name:$cpassnew\n";
seek (PWL ,0,0 );
truncate (PWL,0);
print PWL @pwlist;
$vorhanden = "ja";
last;
}
}
close(PWL);
}
sub error{
$meldung = shift(@_);
print $meldung;
exit;
}


Backup der Passwortdatei ist nicht sinnvoll, weil ich das Script multitaskingfähig gemacht habe.
Sinnvoll wäre evtl. eine Logdatei(History) ALLER Passwortänderungen.

Grüße oesi


als Antwort auf: [#18188]
(Dieser Beitrag wurde von oesi50 am 6. Dez 2002, 13:39 geändert)

Passwort ändern

Hanü
Beiträge gesamt: 219

7. Dez 2002, 00:58
Beitrag # 12 von 29
Beitrag ID: #18779
Bewertung:
(7539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Aha. ^^ *staun*

Bei dem Script blicke ich leider noch weniger durch.
Da sind ein paar Dinge dabei, mit denen ich überhaupt
nix anfangen kann. Aussehen tut es aber gut :)

Was bedeuten qq| und |; ???
Und was meinst du mit multitaskingfähig?

Das mit der Logdatei wäre echt ne feine Sache :)
Danke auf jeden Fall mal, ich werde das ausprobieren!
Gruß Andreas

- - - - - - - - - - - - - - - - - - - - - - - - - - -

So, Nachtrag (2:30 Uhr):
Hab das Script unter pw.pl gespeichert, die URL für
die .htpasswd angepasst und den Spaß hochgeladen. Achso,
und dann hab ich noch in dem Formular auf der Loginseite
die URL zum Script angepasst.

Funzt aber trotzdem irgendwie net. Hab ich was falsch ge-
macht?

Eine Sache noch: Die erste Variable ist net so geeignet,
weil ich die Einlogg-Felder auf ALLEN Seiten verwenden will,
dass man sich jederzeit überall einloggen kann.

Deshalb hat mir Sabine ja bei einem Script dazu geholfen (siehe "Einloggen auf (s)HTML-Seite" unter http://www.hilfdirselbst.ch/...18&topic_id=3615 )

Der Link macht also net viel Sinn!?

Gruß Andreas

P.S. Eine kleine Bitte nochmals: Da ich ja blutiger Anfänger
bin, bitte immer alles etwas genauer erklären :) Danke!


als Antwort auf: [#18188]
(Dieser Beitrag wurde von Hanü am 10. Dez 2002, 02:26 geändert)

Passwort ändern

oesi50
  
Beiträge gesamt: 2315

7. Dez 2002, 12:37
Beitrag # 13 von 29
Beitrag ID: #18787
Bewertung:
(7539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo hanü,
>> Was bedeuten qq| und |; ???
Das ist meine Faulheit, weil ich keine Lust habe jedesmal \" zu schreiben,
nehme ich qq um "...." in |...| umzudefinieren.

>>Und was meinst du mit multitaskingfähig?
Damit meine ich, daß dieses Script WIRKLICH GLEICHZEITIG mehrfach ausgeführt werden kann.
Die Passwortdatei ist dabei vor Datenverlust geschützt.
Im allgemeinen sind solche Scripte so programmiert, daß sie nur hintereinander ausgeführt werden können.
Wenn in diesem Fall viele gleichzeitige Zugriffe erfolgen, ensteht ziemlich oft
ein für den Webmaster unerklärlicher Datenverlust.

>>Das mit der Logdatei wäre echt ne feine Sache :)
setze einfach nach Zeile 76 folgenden Code ein:
--------------------------
open (LOG,">>pw.log");
print LOG localtime(time)." $name $cpassold $cpassnew\n";
close(LOG);
------------------------
>> Funzt aber trotzdem irgendwie net. Hab ich was falsch gemacht?
Wenn du den Namen des Scriptes änderst, muss auch in der Zeile 46 die Action geändert werden.
Trotzdem sollte dieses Script in deinem geschützten Verzeichnis liegen, weil nur so sichergestellt wird, daß
nur die User Ihr Passwort ändern können, die auch schon in der Passwortdatei drinstehen.
Wie sieht denn der Pfad zu Deiner .htpasswd aus?

>>Der Link macht also net viel Sinn!?
Der Link macht sehr viel Sinn, weil sich die User nach einer Passwortänderung unbedingt neu einloggen müssen.
Hier kannst Du zu irgendeiner Einlogseite Deiner Wahl linken.

>> bitte immer alles etwas genauer erklären
Das ist für mich etwas schwierig, da ich Deine Vorkenntnisse nicht kenne(semantisch und syntaktisch).
Eine allgemeine und allumfassende Erklärung würde den Rahmen des Forums sprengen.

Grüße oesi



als Antwort auf: [#18188]
(Dieser Beitrag wurde von oesi50 am 7. Dez 2002, 12:44 geändert)

Passwort ändern

SabineP
Beiträge gesamt: 7586

7. Dez 2002, 13:31
Beitrag # 14 von 29
Beitrag ID: #18790
Bewertung:
(7539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hanü, ich hab das Script mal ausprobiert. Es funktioniert einwandfrei :-))
http://cgi.gmxhome.de/members/pwaendern.pl
Username:tester
Passwort:tester
Du kannst das Passwort ändern, ich hab ja die Log-Datei.
Da steht dann das alte Passwort drin.

Grüße von Sabine


als Antwort auf: [#18188]

Passwort ändern

Hanü
Beiträge gesamt: 219

7. Dez 2002, 14:12
Beitrag # 15 von 29
Beitrag ID: #18791
Bewertung:
(7539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
cool. probier ich heute Abend/Nacht mal aus :)
des krieg ich schon auch noch irgendwie zum laufen

ok, mit den allgemeinen erklärungen lass mal gut sein,
ich probier, alles selber zu "entschlüsseln" und frag
nur nach, wenn ich was wirklich nicht weiß oder keine
Erklärung finde.

Danke. Bis später
Andreas


als Antwort auf: [#18188]

Passwort ändern

Hanü
Beiträge gesamt: 219

8. Dez 2002, 10:16
Beitrag # 16 von 29
Beitrag ID: #18809
Bewertung:
(6633 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Also, die pwaendern funktioniert bei mir auch soweit, abgesehen von folgender Fehlermeldung, die kommt, wenn man das neue Passwort festlegen will:

Kann PWL-DAT nicht öffnen: No such file or directory

>>Wie sieht denn der Pfad zu Deiner .htpasswd aus?
http:// domain.de /login /.htpasswd

Hab auch gleich mal den Code meiner pwaendern.pl in einer Extradatei reingesetzt. Der Fehler kommt, weil...?

Gruß Hanü

P.S. Was für Rechte genau müssen die .htaccess und .htpasswd haben?


als Antwort auf: [#18188]
(Dieser Beitrag wurde von Hanü am 10. Dez 2002, 02:27 geändert)

Passwort ändern

oesi50
  
Beiträge gesamt: 2315

8. Dez 2002, 11:57
Beitrag # 17 von 29
Beitrag ID: #18812
Bewertung:
(6633 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo hanue,

>>Der Fehler kommt, weil...?
eine URL kein Pfad ist.

Ich vermute mal, deine .htpasswd liegt im login Verzeichnis.
dann gehts so:

$passwd_pfad = "../.htpasswd"; # Pfad zur Passwortdatei

Hier kommt noch ein Sicherheitsupdate(ist mir leider etwas später erst aufgefallen):
Ersetze bitte:
open (LOG,">>pw.log");
mit
open (LOG,">>.htpw.log");

In der 1. Variante kann jeder deine Logdatei aufrufen mit: abi.hanue.de/login/pw.log
Bei deinem Provider sind dagegen alle Dateien mit .ht am Anfang gegen Zugriffe von außen gesichert.

Grüße Oesi


als Antwort auf: [#18188]

Passwort ändern

Hanü
Beiträge gesamt: 219

8. Dez 2002, 17:33
Beitrag # 18 von 29
Beitrag ID: #18834
Bewertung:
(6633 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hab noch ne Kleinigkeit an der LOGdatei geändert:
print LOG localtime(time)." | Benutzer: $name | Altes Passwort: $passold | Neues Passwort: $pass1\n";

Vor allem die Variablen hab ich geändert, weil ich selbst mit dem verschlüsselten Zeug ja nix anfangen kann :)

Muss man eigentlich im Code des Perlscriptes den senkrechten Strich (|) auch "verschöüsseln" mit /| oder so? Glaub nicht...

Danke
Hanü


als Antwort auf: [#18188]

Passwort ändern

oesi50
  
Beiträge gesamt: 2315

8. Dez 2002, 17:57
Beitrag # 19 von 29
Beitrag ID: #18837
Bewertung:
(6633 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo hanue,
setz doch bitte mal noch die .htpasswd Rechte mit chmod
mindestens auf 600
wenn das nicht geht auf 660
oder auf 666.
Die | brauchen in dem Kontext nicht mit dem Zeichen \ maskiert werden.

In die Logdatei habe ich absichtlich Keinen Klartext reingeschrieben(Sicherheit).

Grüße oesi


als Antwort auf: [#18188]

Passwort ändern

Anonym
Beiträge gesamt: 22827

8. Dez 2002, 19:45
Beitrag # 20 von 29
Beitrag ID: #18854
Bewertung:
(6633 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Tja, da hab ich dann ein Problem. Den Passwortschutz hab ich (bisher) bequem über eine Benutzeroberfläche bei meinem Provider eingerichtet. Allerdings verbietet er mir, die Rechte der von ihm erstellten .ht-Dateien zu ändern. Das kann ich nur, wenn ich die .ht-Dateien selbst erstelle und hochlade. (So hab ich es jetzt gemacht)

Umständlich wird das ganze aber, wenn da 60 Leute und mehr angemeldet sind, und ich User löschen oder neu anlegen will...

>> In die Logdatei habe ich absichtlich Keinen Klartext reingeschrieben(Sicherheit).
Warum macht man dann überhaupt eine LOG-Datei? Außerdem hast du doch selbst gesagt, dass mein Provider es verbietet, .ht-Dateien zu öffnen :)

Mit dem Programmieren hab ich es (noch) nicht sehr drauf, wie gesagt, blutiger Anfänger. Aber ich will es schon lernen, auch wenn ich nicht muss. Ich versuch halt alles selbst irgendwie zu lernen...

So hab ich jetzt auch mal probiert/angefangen, ein eigenes Script zum ändern der .htpasswd bzw. löschen/anlegen der User zu schreiben. Beruhend auf der Vorlage deines Passwort-ändern-Skriptes :)
Code siehe http://abi.hanue.de/scripte/user.html - Kannst es dir ja mal anschauen.

Weit bin ich nicht gekommen, die eigentlichen Funktionen fehlen. Toll wäre es da auch noch, wenn man alle User (mit Passwörtern vielleicht) aufgelistet zu sehen bekommt und wie gesagt vorhandene User auch löschen kann.

Hab da noch ziemliche Probleme mit allem. Was heißt z.B. dieses "PWL"???

Danke für alles!!!!!
Gruß Andreas


als Antwort auf: [#18188]

Passwort ändern

oesi50
  
Beiträge gesamt: 2315

8. Dez 2002, 20:23
Beitrag # 21 von 29
Beitrag ID: #18858
Bewertung:
(6628 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü,

>>Warum macht man dann überhaupt eine LOG-Datei?
Die Logdatei kann man zum zurücksetzen der Passworter verwenden.

>> Außerdem hast du doch selbst gesagt, dass mein Provider es verbietet, .ht-Dateien zu öffnen :)
Im Browser zu öffnen ist gesperrt. Im Script natürlich nicht.

>>Was heißt z.B. dieses "PWL"???
Das heißt gar nichts, das ist ein Filehandle, da kann auch UHU stehen oder so was.
Ich hab die Bezeichnung einfach vom Ollli-Script übernommen, weil's mir halt gefallen hat.

60 Leute sind kein Problem.

Zur Zeit programmiere ich gerade sowas.
Unter http://usr.vsrv.net/ zu besichtigen.
Das ist allerdings noch nicht ganz fertig und auch nicht kostenlos.
Das Ding hab ich bisher mit 4000 Usern getestet.
Wenn du daran Interesse hast kannst du mir ja mal ne Mail schicken.

Grüße oesi



als Antwort auf: [#18188]

Passwort ändern

Hanü
Beiträge gesamt: 219

8. Dez 2002, 22:00
Beitrag # 22 von 29
Beitrag ID: #18862
Bewertung:
(6628 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
>> Im Browser zu öffnen ist gesperrt. Im Script natürlich nicht.
Ja aber das funktioniert doch nur, wenn das Script von meinem Server bzw. meinem Webspace kommt und die entsprechenden Rechte hat, oder nicht? Oder meinst du, dass man dann von einer anderen Website mit einem Script aus auf die Log-Datei zugreifen kann? (wenn das geht, muss derjenige sich schon gut mit programmieren auskennen, und derjenige weiß dann auch, wie er die Passwörter entschlüsseln kann, würd ich mal sagen)

Programmierst du eigentlich alles Freihand aus dem Kopf raus? Ich nehm mal an, dann du studierst was in Richtung Informatik?! Respekt sag ich da nur!

Gruß Hanü


als Antwort auf: [#18188]

Passwort ändern

Ollli
Beiträge gesamt: 458

8. Dez 2002, 22:59
Beitrag # 23 von 29
Beitrag ID: #18864
Bewertung:
(6628 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
nur so btw:
PWL steht für PassWordList ;-) (also ich versuche immer halbwegs ordentliche Bezeichner zu verwenden und da viel mit das halt ein, denn PASSWORDLIST wäre mir zu lang gewesen *g*)

kurz was anderes:
@oesi50
also das mit flock habe ich schonmal gelesen und ich dachte auch, dass ich das verstanden hätte doch irgendwie steige ich da bei deinem Script nicht dahinter, wäre nett, wenn du mir da mal kurz eine Denkhilfe geben könntest (kann auch per Mail sein - es passt ja nicht gerade zum Topic).

Ollli


als Antwort auf: [#18188]

Passwort ändern

Hanü
Beiträge gesamt: 219

29. Apr 2003, 08:25
Beitrag # 24 von 29
Beitrag ID: #33297
Bewertung:
(6628 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich habe eben mal versucht, das Script in eine Seite mit <!--#exec cgi="/login/scripte/pwaendern.pl"--> einzubinden. Die vorgefertigte Seite (mit Menü etc.) wird geladen, das Script nicht. Was muss ich denn an dem Script ändern, dass es in eine vorgefertigte Seite geladen wird? (ebenso die Meldungen wie z.B. Passwörter stimmen nicht überein o.ä.)

Gruß Andreas



Nachtrag: Habe mir mal nen Kopf drüber gemacht. Anstelle von
print qq|<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<title>Passwort&auml;nderung</title>
</head>
<body bgcolor="#ffffff">
|;
müsste man dem Script sagen, es soll die Vorlage-Seite mit dem Menü öffnen und die Meldungen bzw. das Formular an einer vordefinierten Stelle (z.B. einem Kommentar) einfügen. Nur wie... (der Laie denkt :)


als Antwort auf: [#18188]
(Dieser Beitrag wurde von Hanü am 29. Apr 2003, 08:57 geändert)

Passwort ändern

SabineP
Beiträge gesamt: 7586

29. Apr 2003, 10:56
Beitrag # 25 von 29
Beitrag ID: #33317
Bewertung:
(6628 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hanü,

der HTML-Code, der an den Browser gesendet wird steht immer zwischen print qq| und |;

Schreib also den HTML-Code in das Perl-Script.

Gruß Sabine


als Antwort auf: [#18188]

Passwort ändern

Hanü
Beiträge gesamt: 219

29. Apr 2003, 15:08
Beitrag # 26 von 29
Beitrag ID: #33363
Bewertung:
(6628 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ok, danke. Das habe ich soweit hingekriegt.
Neue Frage: Anstelle der Meldung "Das Passwort wurde geändert, bitte neu einloggen" soll eine neue Seite geladen werden. Wie mach ich das? Also anstelle Textausgabe eine Art Goto mit Link...


als Antwort auf: [#18188]

Passwort ändern

SabineP
Beiträge gesamt: 7586

29. Apr 2003, 16:05
Beitrag # 27 von 29
Beitrag ID: #33379
Bewertung:
(6628 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Andreas,
dazu sind zwei Änderungen im Script nötig:

1. Diese Zeile ändern:
$meldung = qq|Das Passwort wurde geändert, bitte neu anmelden!<br><a href="$loginurl">zum Loginformular</a>|;

Änderung:
print "Location: http://www.domain.de/seite.html\n\n";

2. Diesen Abschnitt auschneiden ...

print qq|Content-type: text/html;charset=iso-8859-1\n\n|;
print qq|<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n|;
print qq|<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<title>Passwort&auml;nderung</title>
</head>
<body bgcolor="#ffffff">
|;

----------------------------------------------------------------------


}else{
$meldung = "Benutzername und Kennwort passen nicht zueinander, bitte beide Eingaben &uuml;berpr&uuml;fen!";
}
}
}

... und hier einfügen.

Gruß Sabine


als Antwort auf: [#18188]
(Dieser Beitrag wurde von SabineP am 29. Apr 2003, 16:06 geändert)

Passwort ändern

Hanü
Beiträge gesamt: 219

29. Apr 2003, 19:53
Beitrag # 28 von 29
Beitrag ID: #33409
Bewertung:
(6628 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das find ich ja mal praktisch. Gefällt mir viel besser, als den ganzen Quellcode ins Script zu schreiben (zumal ich mit GoLive arbeite und es sehr aufwendig wird, wenn ich z.B. am Menü was ändere.

Ich habe jetzt 4 normale Seiten erstellt:
Seite A (im PW-geschützten Verzeichnis) enthält das PW-Formular
Seite B (im PW-geschützten Verzeichnis) enthält die Meldung, dass die beiden neuen PW nicht übereinstimmen und ein PW-Formular
Seite C (im PW-geschützten Verzeichnis) enthält die Meldung, dass Username und Passwort nicht zueinander passen und ein PW-Formular
Seite D (im öffentlichen Bereich) enthält die Meldung, dass das Passwort geändert wurde und ein Formular zum erneuten Einloggen.

Das Script hat noch irgend einen Fehler, vielleicht kannst du mal danach schauen:

#!/usr/bin/perl
$passwd_pfad = "../.htpasswd"; # Pfad zur Passwortdatei
#################################
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs){
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/<([^>]|\n)*>//g;
$FORM{$name} = $value;
}
$passold = $FORM{'passold'};
$pass1 = $FORM{'pass1'};
$pass2 = $FORM{'pass2'};
$name = $ENV{'REMOTE_USER'};
if($pass1 ne '' && $pass2 ne ''){
if ($pass1 ne $pass2) {
print "Location: http:// ... index.shtml\n\n"; # URL mit Meldung, dass die beiden neuen Passwörter nicht übereinstimmen (im geschützten Verzeichnis
}else {
&pwaend;
if($vorhanden eq 'ja'){
print "Location: http:// ... index.shtml\n\n"; # URL mit Bestätigung, dass PW geändert wurde und man sich neu einloggen soll (im öffentlichen bereich)
}else{
print "Location: http:// ... index.shtml\n\n"; # URL mit Meldung, dass Username und Passwort nicht zueinander passen (im geschützten Verzeichnis)
}
}
}
print "Location: http:// ... index.shtml\n\n"; # URL zur Seite mit PW-Änderungsformular (im geschützten Verzeichnis)
exit;
sub pwaend{
open(PWL,"+<$passwd_pfad") || &error("Kann PWL-DAT nicht öffnen: $!");
flock (PWL,2);
@pwlist = <PWL>;
$vorhanden = "nein";
for ($i=0;$i<=$#pwlist;$i++){
$pl = $pwlist[$i];
chomp($pl);
($user, $pw) = split(/:/, $pl);
next if($user ne $name);
$cpassold = crypt($passold, $pw);
if($pw eq $cpassold){
$cpassnew = crypt($pass1, $pw);
splice @pwlist,$i,1, "$name:$cpassnew\n";
seek (PWL ,0,0 );
truncate (PWL,0);
print PWL @pwlist;
$vorhanden = "ja";
open (LOG,">>.htpw.log");
print LOG localtime(time)." | Benutzer: $name | Altes Passwort: $passold | Neues Passwort: $pass1\n";
close(LOG);
last;
}
}
close(PWL);
}
sub error{
$meldung = shift(@_);
print $meldung;
exit;
}


als Antwort auf: [#18188]
(Dieser Beitrag wurde von Hanü am 29. Apr 2003, 20:09 geändert)

Passwort ändern

SabineP
Beiträge gesamt: 7586

29. Apr 2003, 20:20
Beitrag # 29 von 29
Beitrag ID: #33413
Bewertung:
(6628 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Der Syntax des Scripts ist OK, keine Fehler.
Gruß Sabine


als Antwort auf: [#18188]
X