Beitrag von Claus (4645 Beiträge) am Donnerstag, 7.Juli.2005, 19:24.
@Sander/Sicherheit und Passwortschutz/leicht offtopic;-))
Hallo Sander,
bei dem Browser-back hattest Du unter anderem geschrieben:
<wenn du die daten nicht mit get sondern post übergibst, wird versucht die seite neu zu laden. is zwar blöd jedesmal statt einem link ein form zu bauen, aber es ist sicherer (bei fast allen browsern).>
Nachdem ich den ganzen Kram dank Deiner und Christoph's Hilfe realisiert habe, bin ich auf die nächste Schweinerei im IE von dem "amerikanischen Garagen-Dagobert" gestoßen.
Irgendwann, nachdem Du oft genug auf "zurück" geklickt hast, bekommst Du dann folgende Meldung:
Achtung: Seite ist nicht mehr gültig Die angeforderte Seite wurde mit Hilfe von Informationen erstellt, die von Ihnen in einem Formular mitgeteilt wurden. Diese Seite ist nicht mehr verfügbar. Als Sicherheitsmaßnahme übermittelt Internet Explorer solche persönlichen Informationen nicht automatisch erneut.
Falls Sie die Seite ansehen und die Informationen erneut mitteilen möchten, klicken Sie auf Aktualisieren.
Kaum geschehen, meldet sich dieser "Schei.." an und loggt sich ein. Wahrscheinlich werden die Daten in der index.dat des jeweiligen users gespeichert, obwohl sie in den temp_int_files nicht mehr auftauchen.
Bleibt also die Erkenntnis, in neuem Fenster öffnen und den jeweiligen user auffordern, dieses nach dem Logout zu schließen. Kann man zwar auch per javascript machen, aber was, wenn der user das deaktiviert hat;-)
Wollte das nur mal als feedback zurückgeben.
Gruß
Claus
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 8.Juli.2005, 11:46.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))
nein, dazu gibt es die TAN (Transaktionsnummer), am besten eine zufallszahl mit datum/zeit drin - die kann nur einmal vorkommen. Mit dem login wird eine TAN übergeben und abgespeichert. wird die selbe TAN später nochmal benutzt, ist das formular ein 2tes mal versandt worden und die gewünschte aktion wird unterbunden und der login findet nicht statt.
Antworten
Beitrag von Claus (4645 Beiträge) am Freitag, 8.Juli.2005, 12:43. WWW: automobilhai.de
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))
Hallo Sander,
werde das mal probieren. Da die user allerdings nicht nur einmaligen Zugriff haben sollen, werde ich das wohl in einem "Keks" speichern, der nach schließen des Fensters entfernt wird.
Danke!
Gruß
Claus
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 8.Juli.2005, 13:29.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))
sagt doch keiner, das die nicht mehrmals drauf zugreifen können. es geht nur nicht, indem man das formular ein 2tes mal absendet, ohne es neu geladen zu haben.
Antworten
Beitrag von Claus (4645 Beiträge) am Freitag, 8.Juli.2005, 15:27.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))
Hallo Sander,
Die ganze Geschichte läuft im Prinzip auf ein "Members only" Teil hinaus. Die Daten werden nach dem Login durchgeschleift und man kann auf alle passwortgeschützten Seiten über entsprechende Links zugreifen. Nach dem Logout kommt bei der Betätigung vom Browser-back immer wieder" melden Sie sich an". Dann erscheint irgendwann dieses "klicken sie auf aktualisieren-Teil" und prompt ist man wieder eingeloggt. Wo soll denn die TAN übergeben werden. Vor dem Login wegen der Zuordnung nicht möglich, nach dem Login macht es wenig Sinn, denn dann loggt sich der IE über den aktualisieren-Klick ein! Sehe da momentan nur die Cookie-Möglichkeit mit entsprechender Abfrage.
Hier mal der relevante Teil:
schnipp------X
if($namerein ne "" && pwrein ne "" && $usid eq "")
{
get "nutzer_name==!$namerein","nutzer";
if($nutzer_passwort ne "" && $nutzer_passwort eq $pwrein)
{
mod "nutzer_name==$namerein", ["nutzer_usid", "$usid_aktuell"], "nutzer";
$usid="$usid_aktuell";
}else
{
out "<b>Anmeldung fehlgeschlagen!</b>";
$namerein="";
$login_name="";
}
}
if($namerein ne "" && $usid ne "")
{
out "<!-- test, ob aktuelle session-id noch gültig ist -->";
get "nutzer_name==$namerein", "nutzer";
$usid_max = $usid+3;
if($usid eq $nutzer_usid && $usid_aktuell <= $usid_max)
{
out "<!-- session-id ist gültig - session-id wird aktualisiert -->";
mod "nutzer_name==$namerein", ["nutzer_usid", $usid_aktuell], "nutzer";
$usid=$usid_aktuell;
######### Ab hier alles rein, was nach login gemacht werden darf ##########
schnapp----X
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 8.Juli.2005, 16:23.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))
Antworten
Beitrag von hempelr (1976 Beiträge) am Freitag, 8.Juli.2005, 18:02.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))
Sinnvoll wäre bspw. auch eine Session-ID, die nach einer bestimmten Zeit verfällt - aber im Gegensatz zu deiner Routine beim Anmelden abgespeichert wird und beim manuellen Logout gelöscht wird.
Bei jedem neuem Login wird eine neue Session-ID generiert und mit der in der DB gespeicherten verglichen, bei Reloads bzw. Aktionen im erlaubten angemeldeten Bereich wird die SID jedesmal auf Gültigkeit (Zeitablauf) geprüft.
So kann man verhindern, dass beim Offenlassen einer Session nach der voreingestellten Zeit noch so oft reloadet werden kann oder was auch immer ohne dass man ins System kommt.
Ein Nachteil besteht allerdings, man muss sich nach Ablauf der Sessionzeit (also von Zeitpunkt der ersten Anmeldung ans System) wieder neu anmelden - allerdings kann man auch das kontrollieren, hab ich auch schon mal gebaut, finds nur im Moment nicht mehr...
Mein Zugangs-Kontroll-Tool nutzt das genau so, es wird sogar zuverlässig ein zweimaliges gleichzeitiges Login unter gleichem Nutzernamen verhindert und eine entsprechende Warnmeldung ausgegeben wenn das passiert. Da ist aller Reload und neues Senden von Zugangsdaten zum Scheitern verurteilt.
Antworten
Beitrag von Claus (4645 Beiträge) am Freitag, 8.Juli.2005, 18:15.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))
Hallo Ruben,
auch hier noch mal kurz geantwort;-))
läuft mit session-Id;-)
session-Id wird bei Logout gelöscht, trotzdem trickst dich der IE aus, weil er die Daten (Name passwort) irgendwo in der index.dat speichert und dann fröhlich neu sendet. Da nützt die SID nix. Nur meine bisherige Erfahrung.
if($logout eq "1")
{
mod "nutzer_name==$login_name", ["nutzer_usid", ""], "nutzer";
out"<a href=javascript:window.close();>Fenster schließen</a>";
}
hatte ich vergessen, vorhin mitzuteilen, wie gesagt, bin reif für die Insel;-))
Gruß
Claus
Antworten
Beitrag von Claus (4645 Beiträge) am Freitag, 8.Juli.2005, 18:22.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))/Nachtrag
Hatte ich vergessen.
Ich öffne das mittlerweile in einem eigenen Fenster (ohne javascript!!)
Wenn das Fenster nach dem Logout geschlossen wird, kann niemand über den Verlauf irgend etwas machen, aber solange das Fenster geöffnet ist, trickst Dich der IE über die Browser-back-Funktion aus.
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 8.Juli.2005, 22:44.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))/Nachtrag
Antworten
Beitrag von Claus (4645 Beiträge) am Samstag, 9.Juli.2005, 12:13.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))/Nachtrag
Hallo Sander,
Hier mal der Quelltext ohne die Ausgabe und einfach nur mal ne TAN aus Time erstellt. Die Daten von $TAN kommen leider nirgens an. Irgndwo ist da noch ein (Denk-) Fehler drin. Oder ich bin mal wieder zu blöd.
Gruß
Claus
<html><head>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="cache-control" content="no-cache">
<title></title>
</head>
<body bgcolor=#000000 text=#ffcc99 link=#ccffff alink=red vlink=#eeeeee>
<perl>
$_header="Expires: 0\n";
$_header.="Pragma: no-cache\n";
$_header.="Cache-Control: no-store, no-cache, max-age=0, must-revalidate\n\n";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)= gmtime(time);
$usid_aktuell = (1000000*$year)+(10000*$mon)+(100*$mday)+(4*$hour)+$min;
if($logout eq "1")
{
mod "nutzer_name==$login_name", ["nutzer_usid", ""], "nutzer";
out"<a href=javascript:window.close();>Fenster schließen</a>";
}
if($namerein ne "" && $pwrein ne "" && $usid eq "")
{
get "nutzer_name==!$namerein","nutzer";
if($nutzer_passwort ne "" && $nutzer_passwort eq $pwrein)
{
mod "nutzer_name==$namerein", ["nutzer_usid", "$usid_aktuell","IP","$_REMOTE_ADDR"], "nutzer";
$usid="$usid_aktuell";
}else
{
out "<b>Anmeldung fehlgeschlagen!</b>";
$namerein="";
$login_name="";
}
}
if($namerein ne "" && $usid ne "")
{
out "<!-- test, ob aktuelle session-id noch gültig ist -->";
get "nutzer_name==$namerein", "nutzer";
$usid_max = $usid+3;
if($usid eq $nutzer_usid && $usid_aktuell <= $usid_max && $_REMOTE_ADDR eq $IP)
{
out "<!-- session-id ist gültig - session-id wird aktualisiert -->";
mod "nutzer_name==$namerein", ["nutzer_usid", $usid_aktuell], "nutzer";
$usid=$usid_aktuell;
######### Ab hier alles rein, was nach login gemacht werden darf ##########
blablabla
my $newrange=$_range+$_range_length;
my $oldrange=$_range-$_range_length;
$oldrange=0 if $oldrange<0 && $oldrange>-$_range_length;
out " [ <a href=\"$_link&von=$oldrange&namerein=$namerein&usid=$usid\">zurück</a> ] " if $oldrange>=0;
out " [ <a href=\"$_link&von=$newrange&namerein=$namerein&usid=$usid\">weiter</a> ] " if $newrange<$_amount_query;
out "</p>";
out "</font></tr></table></div>";
out"<br><br>";
} else
{
out "<b>Anmeldung fehlgeschlagen!</b>";
$namerein="";
}
}
if($namerein eq "")
{
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)= gmtime(time);
$TAN = (1000000*$year)+(10000*$mon)+(100*$mday)+(4*$hour)+$min;
out <<EOF;
<font color="#ffcc99">
<h2>Anmeldung</h2>Bitte melden Sie sich an:
<form action="http://www.xxxxxxxxxxx.de/cgi-bin/baseportal.pl?htx=$htx" method="post" enctype="multipart/form-data">
<input type=hidden name="htx=" value="$htx">
<table>
<tr><td><font color="#ffcc99">Name:</font></td><td><input type="text" name="namerein="></td></tr>
<tr><td><font color="#ffcc99">Passwort:</font></td><td><input type="password" name="pwrein="></td></tr>
<input type=hidden name="tan" value="$TAN">
<tr><td></td><td><input type=submit value="Anmelden"></td></tr>
</table></form></font>
EOF
}
</perl>
</body></html>
Antworten
Beitrag von Claus (4645 Beiträge) am Samstag, 9.Juli.2005, 12:48.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))/Nachtrag
Hallo Sander,
habe mich mit den Hidden-Feldern noch nicht befasst, aber kann man da nichts reinschreiben??
Gruß
Claus
Antworten
Beitrag von Claus (4645 Beiträge) am Samstag, 9.Juli.2005, 17:46.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))/Nachtrag
Hallo Sander,
ich denke mal, ich erkenne nach vielen unfruchtbaren versuche langsam, worauf das hinausläuft. Struktur erkannt.
fixwert + zufallswert
Bin aber noch nicht daraufgestossen, wie man das einbaut. Werde mal weiter testen.
Antworten
Beitrag von Claus (4645 Beiträge) am Samstag, 9.Juli.2005, 18:28.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))/Nachtrag
Antworten
Beitrag von richard (1187 Beiträge) am Samstag, 9.Juli.2005, 19:14. WWW: posaunenchor-rhoden.de
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))/Nachtrag
Antworten
Beitrag von Claus (4645 Beiträge) am Samstag, 9.Juli.2005, 21:04.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))/Nachtrag
Antworten
Beitrag von richard (1187 Beiträge) am Samstag, 9.Juli.2005, 21:48. WWW: posaunenchor-rhoden.de
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))/Nachtrag
Antworten
Beitrag von Sander (8133 Beiträge) am Samstag, 9.Juli.2005, 22:53.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))/Nachtrag
Antworten
Beitrag von Claus (4645 Beiträge) am Sonntag, 10.Juli.2005, 07:01.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))/Nachtrag
Hallo Sander,
das war mir schon klar;-))
kriege das allerdeings nicht gespeichert. Habe ein einfaches sortiertes Text-Feld namens "tan" genommen, Wird aber nichts reingeschrieben.
if($namerein ne "" && $pwrein ne "" && $usid eq "")
{
get "nutzer_name==!$namerein","nutzer";
if($nutzer_passwort ne "" && $nutzer_passwort eq $pwrein)
{
mod "nutzer_name==$namerein", ["nutzer_usid", "$usid_aktuell","IP","$_REMOTE_ADDR","tan","$TAN"], "nutzer";
$usid="$usid_aktuell";
Antworten
Beitrag von Claus (4645 Beiträge) am Sonntag, 10.Juli.2005, 08:47.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))/Nachtrag
Antworten
Beitrag von Claus (4645 Beiträge) am Sonntag, 10.Juli.2005, 09:17.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))/Nachtrag
Hallo Sander,
alte DB gelöscht und neu erstellt. Jetzt klappt es soweit;-))
Danke für Deine Geduld, auch an Richard!
Gruß
Claus
Antworten
Beitrag von hempelr (1976 Beiträge) am Freitag, 8.Juli.2005, 18:59.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))
naja hab ich schon gesehen, dass du ne Session-ID nutzt.
Wenn man die Session-ID nur ne bestimmte Zeit gültig macht, und die bei Erstanmeldung speichert und dann immer mit der aktuellen vergleicht, kann man erst mal die Session-Dauer kontrollieren.
Wenn man dann noch prüft, ob schon ne Session-ID abgespeichert wurde (im Zweig wo Name und Password geprüft werden) und in diesem Falle ne Neuanmeldung mit leeren Werten für Nutzername und Passwort verlangt mit Hinweis auf die Nichtabmeldung bzw. wenn noch innerhalb der gültigen Session-Zeit auf einen doppelten Anmeldevorgang unter gleichem Namen hingewiesen wird ist das komplett wasserdicht und serverbasiert. Da brauchts kein Javascript und auch keien Popup bzw. neues Fenster (wenn der Popupblocker an ist dann geht das nämlich auch nicht).
Nur so mal als Anregung und "Hirnfutter"... ;-)
Antworten
Beitrag von richard (1187 Beiträge) am Freitag, 8.Juli.2005, 19:55. WWW: posaunenchor-rhoden.de
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))
Was ich nicht ganz verstehe, warum enthält denn die Seite, welche durch den IE aktualisiert wird überhaupt die Login-Daten wie Name und Paßwort. Zur Authentifizierung genügt doch die session-id.
Man hat dann nur sicherzustellen, daß nach Abmeldung oder Ablauf der session-id kein Zugang zu dem geschützten Bereich mehr möglich ist. Ein erneutes einloggen ist dann auch bei einem Reload der Seite gar nicht möglich.
Ein Reload einer Login-Seite führt auch nicht zu einem (erneuten) Absenden der eigegebene Formulardaten und damit zu einem Login, sondern nur zu einem Neuaufbau des leeren Formulars. Wenn das anders ist, würde ich meinen stimt was nicht an der Struktur der Anwendung.
Antworten
Beitrag von Claus (4645 Beiträge) am Freitag, 8.Juli.2005, 21:44.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))
Hallo Richard,
nach dem ausloggen kommt bei "zurück" diverse Male die Login-Aufforderung OHNE Daten!!!
Dann kommt eine weiße Seite OHNE Login-Aufforderung mit dem bereits mitgeteiltem Hinweis:
<Achtung: Seite ist nicht mehr gültig Die angeforderte Seite wurde mit Hilfe von Informationen erstellt, die von Ihnen in einem Formular mitgeteilt wurden. Diese Seite ist nicht mehr verfügbar. Als Sicherheitsmaßnahme übermittelt Internet Explorer solche persönlichen Informationen nicht automatisch erneut.
Falls Sie die Seite ansehen und die Informationen erneut mitteilen möchten, klicken Sie auf Aktualisieren.>
keine Daten oder sonst etwas!!!!
Wenn man nochmal auf zurück klickt, ist man auf der ersten aufgerufenen Seite OHNE Daten.
Werde das ganze mal in Ruhe und vor allem ausgeschlafen nochmal prüfen und alle Varianten durchspielen.
Trotzdem erst mal Danke an Alle für die Hilfe!!!
Gruß
Claus
Antworten
Beitrag von richard (1187 Beiträge) am Samstag, 9.Juli.2005, 09:22. WWW: posaunenchor-rhoden.de
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))
Mal als Anregung.
In einer anderen Welt mache ich das so, daß die Angaben aus einem Login-Formular auf einer neuen Seite auf dem Server verarbeitet werden. Ist die Anmeldung in Ordnung, leitet diese Seite die Anfrage auf eine (geschützte) andere Seite weiter die an den Browser übergeben wird, die Session-Id aber keinerlei Post-Daten enthält, ist die Anmeldung nicht in Ordnung erfolgt eine Weiterleitung zurück zu einem Login-Formular.
In keinem der beiden Fälle führt eine Aktualisierung durch den Browser zu einer wiederholten Absendung der Login-Daten. Die Verarbeitung der Post-Daten aus dem Login-Formular geschieht ja auschließlich mit der Zwischenseite auf dem Server.
Mit Perl wäre das dann wohl grundsätzlich so:
print "location: geschützte Seite?sessionid=12345";
} else {
print "location: nocheinmal login";
Habe aber keine Ahnung ob und wie das mit bp-perl möglich ist.
Antworten
Beitrag von Claus (4645 Beiträge) am Samstag, 9.Juli.2005, 14:05.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))
Hallo Richard,
werde mir das mal durch den Kopf gehen lassen. Prob ist allerdings, daß man sich auf mehreren Seiten einloggen und dann "hin und her" wandern kann, also nicht eine geschützte Seite allein beseht.
Gruß
Claus
Antworten
Beitrag von richard (1187 Beiträge) am Samstag, 9.Juli.2005, 14:39. WWW: posaunenchor-rhoden.de
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))
----------------
Prob ist allerdings, daß man sich auf mehreren Seiten einloggen und dann "hin und her" wandern kann, also nicht eine geschützte Seite allein beseht.
----------------
Das ist eigentlich kein Problem, man muß nur sicherstellen, daß die session-id beim "hin und her" wandern immer mit übergeben wird (grds. egal ob per url (get) oder post). Im Kopf jeder geschützten Seite muß man dann überprüfen, ob eine gültige session-id mit den für die jeweilige Seite notwendigen Rechten übergeben wurde. Dabei kann man die Rechte beim speichern/erzeugen der session-id fest vergeben, oder anhand der id den user ermitteln und dann dessen Rechte speziell für die aktuelle Seite aus einer db auslesen und den Zugang entsprechend regeln. Ist der User nicht angemeldet oder hat keine ausreichende Rechte gehts mit einer entsprechenden Meldung zurück zum Ausgangspunkt oder einer Loginseite.
Soweit Du das einloggen auf mehreren Seiten ermöglichen willst, verschickst Du die Login-Daten an ein zentrales (Zwischen-)Template, das die Berechtigung überprüft. Bei einem erfolgreichen Login leitest Du den User dann auf eine zentrale (Auswahl-)Katalogseite weiter, von der der User sich dann weiter klicken kann. Oder Du liest die Adresse der Seite aus, von welcher aus das Login erfolgt und verschickst diese Adresse zusammen mit den Login-Daten an das Zwischentemplate. Bei einem erfolgreichen Login kann man diese Daten dann für eine flexible Weiterleitung nutzen.
Hoffe ich habe mich einigermaßen verständlich ausgedrückt.
Ach ja noch was, die session-id muß natürlich auch über nicht geschützte Seiten weitergegeben werden.
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 8.Juli.2005, 22:42.
Re: @Sander/Sicherheit und Passwortschutz/leicht offtopic;-))
wenn du im browser zurück gehst, kommst du an die stelle, wo deine logindaten entgegengenommen werden (sozusagen die seite nach abschicken des forms). Und die Seite wird nur mit den Postdaten aus dem Form aufgerufen - der Browser fragt, soll ich die nochmal senden?. Ist nicht nur im IE so, sondern in jedem Browser den ich kenne.
Antworten