Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Übergabe von Variablen über die URL beim Login
Frage
Wär nett wenn sich jemand das hier mal anschauen könnte. Also mein Ziel ist das die Position beim Login übergeben wird. Sprich der User ist auf z.B. index2.php?cat=armedforces&show=inf&id=10 wenn er sich jetzt einloggt (Form tag befindet sich in der Nav auf jeder Seite) soll quasi seine Position übergeben werden, also das ganze Geraffel an Url-Parametern :)
Also wird beim Login eigentlich nur index2.php?... durch admin.php?... ersetzt.
Das soll durch diese Zeile gewährleistet werden:
[code] $MM_redirectLoginSuccess = preg_replace (´/index2/´, ´admin´, $_SERVER[´REQUEST_URI´]);
[/code] das Problem ist das untenstehendes Script nur auf admin.php weiterleitet!
Wenn ich allerdings obenstehende Zeile durch echo ausgeben lasse wird das ganze Geraffel mit ausgegeben!
Hier das ganze Login-Script:
[code]<?php
session_start();
$loginFormAction = $_SERVER[´PHP_SELF´];
if (isset($accesscheck)) {
$GLOBALS[´PrevUrl´] = $accesscheck;
session_register(´PrevUrl´);
}
if (isset($_POST[´user´])) {
$loginUsername=$_POST[´user´];
$password=md5($_POST[´pass´]);
$MM_fldUserAuthorization = "";
$MM_redirectLoginSuccess = preg_replace (´/index2/´, ´admin´, $_SERVER[´REQUEST_URI´]);
$MM_redirectLoginFailed = "index2.php?mode=login&status=fail";
$MM_redirecttoReferrer = false;
mysql_select_db($database_phpbb, $phpbb);
$LoginRS__query=sprintf("SELECT username, user_password FROM phpru_users WHERE username=´%s´ AND user_password=´%s´ AND user_level=´2´",
get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), get_magic_quotes_gpc() ? $password : addslashes($password));
$LoginRS = mysql_query($LoginRS__query, $phpbb) or die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);
if ($loginFoundUser) {
$loginStrGroup = "";
$GLOBALS[´MM_Username´] = $loginUsername;
$GLOBALS[´MM_UserGroup´] = $loginStrGroup;
session_register("MM_Username");
session_register("MM_UserGroup");
if (isset($_SESSION[´PrevUrl´]) && false) {
$MM_redirectLoginSuccess = $_SESSION[´PrevUrl´];
}
header("Location: " . $MM_redirectLoginSuccess );
}
else {
header("Location: ". $MM_redirectLoginFailed );
}
}
?>
[/code]
Hoffe hier kann mir jemand weiterhelfen. :)
Beste Grüße und schönen Abend noch,
Malte
Antwort 1 von S1lv3R
Wenn ihr die Frage nicht versteht bitte einfach mal nachfragen, dann versuche ich mein Problem genauer zu erörtern. Verzweifle gerade echt an diesem Problem!
Grüße
Malte
Grüße
Malte
Antwort 2 von ClemBra
Ich zitiere mal was vom Text (hab ihn mir zugegebenermaßen nicht komplett durchgeguckt da keine Zeit):
Wie ich das verstehe ist das der erste Teil eines Aufrufes. Wie soll da accesscheck definiert worden sein. Gehe mal davon aus, das register_globals aus ist, wie es sich für ein sicheres Web gehört. desweiteren ist session_register() wenn ich mich richtig erinnere veraltet. Benutze $_SESSION[´´], dann hast du die Probleme mit der Link-Übergabe auch nicht. alles schön in die Session-Variable schreiben und es ist auf dem Server griffbereit.
Beim Aufruf dann durchgehen:
if (isset($accesscheck)) {
$GLOBALS[´PrevUrl´] = $accesscheck;
session_register(´PrevUrl´);
}
Wie ich das verstehe ist das der erste Teil eines Aufrufes. Wie soll da accesscheck definiert worden sein. Gehe mal davon aus, das register_globals aus ist, wie es sich für ein sicheres Web gehört. desweiteren ist session_register() wenn ich mich richtig erinnere veraltet. Benutze $_SESSION[´´], dann hast du die Probleme mit der Link-Übergabe auch nicht. alles schön in die Session-Variable schreiben und es ist auf dem Server griffbereit.
Beim Aufruf dann durchgehen:
$gueltigetags=array(´cat´,´show´,´id´);
foreach ($gueltigetags as $var) {
if (isset($_POST[$var])) {
$$var = $_POST[$var];
} elseif (isset($_GET[$var])) {
$$var = $_GET[$var];
} elseif (isset($_SESSION[$var])) {
$$var = $_SESSION[$var];
}
}
Antwort 3 von S1lv3R
Danke für den Tipp mit $_SESSION erstmal, also register_globals ist bei meinem provider standardmäßig an! Habe bis jetzt noch nicht wirklich einen Grund gehabt es mittels eigener php_ini zu deaktivieren... hast du einen guten? ;) Habe also session_register gegen $_SESSION getauscht, leider hat sich absolut nichts verändert. Was ich auch absolut nicht verstehe ist warum es bei $MM_redirectLoginFailed geht! Ich sehe da den Unterschied irgendwie nicht, schließlich enthalten beide Variablen von der Form her die gleichen Daten.
Noch irgendwie eine Idee?
Noch irgendwie eine Idee?
Antwort 4 von ClemBra
Das Sicherheitsrisiko ist der Grund register_globals zu deaktivieren. Bei meinem Provider ist es zwar auch (noch) an, aber es zu nutzen ist u.U. gefährlich. Zudem ist session_register
Na für mich ist das nicht das gleiche.
gib mal folgendes unter die von mir zitierten Zeilen ein und vergleiche:
$MM_redirectLoginSuccess = preg_replace (´/index2/´, ´admin´, $_SERVER[´REQUEST_URI´]);
$MM_redirectLoginFailed = "index2.php?mode=login&status=fail";
Na für mich ist das nicht das gleiche.
gib mal folgendes unter die von mir zitierten Zeilen ein und vergleiche:
header("Content-Type: text/plain");
echo $MM_redirectLoginSuccess . "\n";
echo $MM_redirectLoginFailed;
exit;
Antwort 5 von S1lv3R
hmmm was zu erwarten war:
echo $MM_redirectLoginSuccess =
/ar/admin.php
echo $MM_redirectLoginFailed =
index2.php?mode=login&status=fail
Das interessante aber ist ja:
echo preg_replace (´/index2/´, ´admin´, $_SERVER[´REQUEST_URI´]) =
/ar/admin.php?cat=strategicforces&mode=login
Ist ja eigentlich nur die Frage warum das oben nicht so ist wie im letzten Beispiel!?
echo $MM_redirectLoginSuccess =
/ar/admin.php
echo $MM_redirectLoginFailed =
index2.php?mode=login&status=fail
Das interessante aber ist ja:
echo preg_replace (´/index2/´, ´admin´, $_SERVER[´REQUEST_URI´]) =
/ar/admin.php?cat=strategicforces&mode=login
Ist ja eigentlich nur die Frage warum das oben nicht so ist wie im letzten Beispiel!?
Antwort 6 von ClemBra
Wie es aussieht, steht im REQUEST_URI nur noch admin.php drin, ohne die Parameter. Wie werden die bei dir denn im Login-Formular übergeben? oder hast du einfach action="admin.php" geschrieben?
Dann wäre klar warum es nicht funktioniert.
Dann wäre klar warum es nicht funktioniert.
Antwort 7 von S1lv3R
Naja, action="´ . $loginFormAction .´", das gibt index2.php aus, also das Formular ruft das gleiche Dokument erneut auf. Vielleicht stehe ich ja momentan total auf dem Schlauch aber was hat das mit $MM_redirectLoginSuccess zutun? ;)
Grüße,
Malte
Grüße,
Malte
Antwort 8 von S1lv3R
hmmm ... also hab noch ein bisschen rumprobiert:
Also $loginFormAction = $_SERVER[´PHP_SELF´]; ist natürlich index2.php ist, damit wird das REQUEST_URI in $MM_redirectLoginFailed also natürlich auch index2.php - hätte mir wirklich gleich auffallen können. Folgendermaßen tausche ich also das PHP_SELF durch REQUEST_URI aus.
Soweit in der Theorie, in der Praxis funktioniert das ganze aber leider nicht. Nach dem ausfüllen des Formulars landet man wieder auf der Ausgangsseite.
Aber danke für deine Hilfe soweit erstmal, damit wären wir ja schon einen Schritt weiter. ;)
Also $loginFormAction = $_SERVER[´PHP_SELF´]; ist natürlich index2.php ist, damit wird das REQUEST_URI in $MM_redirectLoginFailed also natürlich auch index2.php - hätte mir wirklich gleich auffallen können. Folgendermaßen tausche ich also das PHP_SELF durch REQUEST_URI aus.
Soweit in der Theorie, in der Praxis funktioniert das ganze aber leider nicht. Nach dem ausfüllen des Formulars landet man wieder auf der Ausgangsseite.
Aber danke für deine Hilfe soweit erstmal, damit wären wir ja schon einen Schritt weiter. ;)

