Passwortänderung durch Frontend User

Gesperrt
inliner683
Beiträge: 6
Registriert: Mo 25. Jul 2005, 13:48
Kontaktdaten:

Passwortänderung durch Frontend User

Beitrag von inliner683 »

Hallo,

arbeite seit wenigen Tagen mit Contenido.
Habe folgende Situation:

Viele User (die im Backend nichts machen dürfen) haben interne Bereiche
auf einer Seite. Jeder Mitarbeiter hat seinen individuellen Bereich (konnte
dies mithilfe diverser Forumsbeiträge realisieren).
Nun hat jeder User ein zunächst globales Passwort, dass er aber selber ändern können muss.
Habe das folgendermaßen realisiert:

Ein Modul passwd_change mit folgendem Code im Output-Teil (umgändertes Login-Skript):

Code: Alles auswählen


<table width="165" border="0" cellspacing="0" cellpadding="0">
<tr><td height="30" colspan="2" ></td></tr>
<tr><td height="21" width="22" style="border: 0px; border-top:1px; border-bottom:1px; border-color: #F7C473; border-style: solid; background-color: #FCF2D5"><img src="images/wuerfel.gif" width="22" height="21" border="0"></td>
<td width="143" style="border: 1px; border-left:0px; border-color: #F7C473; border-style: dashed; background-color: #FCF2D5; padding-left:10px" class="punkte">Passwortänderung</td></tr>
<tr><td colspan="2" class="text" height="22" style="border: 1px; border-top:0px; border-color: #F7C473; border-style: dashed; background-color: #FCF2D5; padding-left:10px">
<?php

if (!isset($_POST[passwortaenderung]))
{
?>
<form method="post" action="front_content.php?idcat=23">
<table border="0">
<tr><td>Neues Passwort</td></tr>
<tr><td><input type="password" name="neuesPasswort1" value=""></td></tr>
<tr><td>Passwort nochmal</td></tr>
<tr><td><input type="password" name="neuesPasswort2" value=""></td></tr>
</table>
<input type="submit" name="passwortaenderung" value="Bestätigen">
</form><br>
<?php
} else {

	if ($_POST[neuesPasswort1]!=$_POST[neuesPasswort2]){
	         echo "Sie haben 2 Verschiedene Passwörter eingegeben!<br>";
	         echo "<a href=front_content.php?idcat=23>Erneut eingeben</a>";
	}
	else{

	         $aktuellerBenutzer=$auth->auth["uid"];
	         $neuesPasswort=md5($_POST[neuesPasswort1]);
	         $sql="UPDATE `con_phplib_auth_user_md5` SET `password`='$neuesPasswort' WHERE `user_id` = '$aktuellerBenutzer'";
	         mysql_query($sql) or die("Fehler bei Datenbankzugriff!<br>".mysql_error());
                  echo "<center>Passwort geändert!</center>";
	}
}

?>
</td></tr></table>
Wie man sieht, mache ich einen direkten Datenbankzugriff.
Nun meine Fragen:

1) Gibt es grundsätzlich an diesem Lösungsansatz etwas auszusetzen (etwas sicherheitsrelevantes?)

2) Wie man ebenfalls sieht mache ich eine hart-kodierte Weiterleitung zu idcat=23. Gibt es eine Lösung mit dem das Modul auf einer beliebigen Seite funktioniert?

3)Wie kann man die automatische Weiterleitung zu dem Standard-Login nach falscher Passworteingabe oder Zugriff auf geschützte Kategorie permanent deaktivieren?

4) Habe noch nicht Verstanden wozu der Input-Teil bei den Modulen ist, kann das jemand kurz erklären? Danke :D
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

zu 1) Du fängst nicht die Möglichkeit ab, kein PW zu vergeben (Leereingabe). Sicherheitshalber könnte man noch die Länge von $_POST["neuesPasswort1"] prüfen (halt nicht größer als 100 Zeichen -> falls es einen Bug in md5 geben sollte, abschneiden dürfte reichen, kein normaler Mensch hat ein 100 Zeichen-PW).

$_POST[neuesPasswort1] sollte $_POST["neuesPasswort1"] sein, denke ich.

Sonst spricht nix gegen, außer, dass man sein altes Kennwort nicht eingeben muss, um ein neues festzulegen. Das kann man aber IMHO vernachlässigen, da die resultierende Prüfung gefährlicher ist, als die Annahme, dass in der kurzen Zeit der Session der eingeloggte Nutzer nicht identisch mit dem Nutzer vor dem PC ist.

zu 2)

Code: Alles auswählen

echo '<form method="post" action="front_content.php?idcatart="'.$idcatart.'">';
sollte gehen (schickt immer an sich selbst).

zu 3)
Siehe http://www.contenido-faq.de. Man ändere die front_crcloginform.inc.php.

zu 4)
Und dann machst Du so ein Modul? Nicht schlecht ...

Im Input kann man Parameter abfragen, die in CMS_VAR/CMS_VALUE-Platzhaltern gespeichert werden, die man dann im Output nutzen kann. Das, was im Input enthalten ist, erscheint bei der Vorkonfiguration des Templates und bei der Konfiguration des Templates einer Kategorie bzw. eines Artikels.

Beispiel: Du hättest z.B. statt idcat fest zu coden, auch ein input-field im Input-Teil des Moduls definieren können, welches die ID abfragt. Im Output hättest Du dann mit

Code: Alles auswählen

<form method="post" action="front_content.php?idcat=CMS_VALUE[0]">
darauf zugreifen können. Wie das im Detail funktioniert: Siehe ein Modul mit Code im Input.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
inliner683
Beiträge: 6
Registriert: Mo 25. Jul 2005, 13:48
Kontaktdaten:

Beitrag von inliner683 »

HerrB hat geschrieben:
zu 2)

Code: Alles auswählen

echo '<form method="post" action="front_content.php?idcatart="'.$idcatart.'">';
sollte gehen (schickt immer an sich selbst).

zu 3)
Siehe http://www.contenido-faq.de. Man ändere die front_crcloginform.inc.php.
zu 2)
es geht leider nicht. ich benutze idcat=XX. anscheinend gibts da einen unterschied zu idcatart=XX.

zu 3)
glaube wir haben uns hier nicht richtig verstanden. in dieser datei kann man, soweit ich das sehe nur das design anpassen, was nicht mein ziel war. ich wollte es so haben, dass wenn man sich falsch einloggt, nicht von der seite geschmissen wird, sondern evtl. im login formular angezeigt wird, dass der login fehlgeschlagen ist.
man wird ebenfalls auf diese leere seite mit dem login verwiesen, wenn man eine geschützte kategorie ohne login anclickt. auch das wollte ich komplett deaktivieren, da ich sowieso im head das sicherheitsskript für die prüfung habe. habe auch nichts dazu im FAQ gefunden.
diese punkte haben aber keine hohe priorität, es sind nur "schönheits-anpassungen"...

ansonsten danke für die anderen ratschläge, werde sie berücksichtigen.
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

zu 2) Gucke ich mir nochmal an.

Der Aufruf der idcat zeigt nur den Startartikel der Kategorie (mit der internen ID idcat). Dein Modul funktioniert also schon nicht mehr, wenn es sich nicht als Startartikel der Kategorie befindet. Die idcatart ist die eindeutige ID, die aus idcat und idart (der Artikel-ID) abgeleitet ist, das sollte also gehen, aber entweder noch nicht mit der V4.4.5 oder die Angabe ist noch nicht ganz richtig, gucke ich mir nochmal an.

zu 3) Ich meinte: http://www.thilo-sommer.de/PHPMyFAQ/ind ... ight=login aber es ist kein Beispiel angegeben, dann sichere die vorhandene Datei und versuche es mit:

Code: Alles auswählen

<?php
header("Status: 301 Moved Permanently"); // wichtig für google
if ($_REQUEST["logout"] != "") {
   header("Location: <HTTP-Pfad>/front_content.php?idart=36&idcat=26&logout=true");
} else {
   header("Location: <HTTP-Pfad>/front_content.php?idart=36&idcat=26&loginerror=1");
}
exit; 
?>
HTTP-Pfad muss man natürlich geeignet ersetzen. Die Werte für idart und idcat müssen den Werten des Artikels mit Deinem Login-Modul entsprechen (-> anpassen)

Den Parameter loginerror kannst Du dann in Deinem Modul abfragen und eine entsprechenden Text ausgeben. Zum Ausprobieren kannst Du ja mal Murx beim Login bei communido.net eintragen.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
inliner683
Beiträge: 6
Registriert: Mo 25. Jul 2005, 13:48
Kontaktdaten:

Beitrag von inliner683 »

zu 2)
Habe leider nicht genug getestet. Mit:

Code: Alles auswählen

echo '<form method="post" action="front_content.php?idcatart="'.$idcatart.'">';
funktioniert das genau so wie beabsichtigt :D

Auch die Lösung unter 3) funktioniert einwandfrei.
Danke.
Gesperrt