A lentebbi probléma megoldásában kérném a segítségeteket?
Adott egy admin felület, amely php-ban íródott. Viszont átirányítási körbe kerül az egész.
Az index.php észleli, hogy ha nincs belépve az admin, akkor átirányítja a login.php-ra, ahol is be tud lépni. Ha belépett, akkor Head-el vissza irányul az index.php-ra, ahonnan is a szolgáltatások elérhetőek. De már ott elakad a folyamat, hogy ha megnyitom, hogy admin/index.php akkor még átirányít a login.php-ra a következő képpen:
<?
session_start();
include "config.php";
$tmp = $_GET['action'];
if($tmp == "signout"){
unset($_SESSION['xyradiologging']);
header ("Location: http://" . $domain . $directory . "login.php");
}
if (isset($_SESSION['xyradiologging'])) {
$tmpname = $_SESSION['xyradiologging'];
}else{
header ("Location: http://" . $domain . $directory . "login.php");
}
Be is tölt a login.php, viszont itt kiírja, hogy átirányítási körbe került.
A login.php tartalma:
?php
ob_start();
session_start();
?>
<body style="background: white url(../images/backg.jpg) top center; background-attachment:fixed; color:#2c4b2c; font-style:italic; font-family: Arial;" leftmargin="0" rightmargin="0" bottommargin="0" topmargin="0">
<?php
echo '<table border=0 style="margin-top:200px; background: url(images/content-bg.png);" align=center><tr><td><div style="padding:5px;"><tr><td>';
include 'config.php';
unset($_SESSION['xyradiologging']);
echo '<span style="font-size:22px;">XY Admin login</span><br><br><form method=post action="login.php" enctype="multipart/form-data">';
echo "Név:<br><input type='text' name='username'><br>";
echo "Jelszó:<br><input type='password' name='password'><br><br>";
echo "<input type='submit' name='submit' value='Login'>";
echo "</form>";
$connection = @mysql_connect($hostname, $user, $pass)
or die(mysql_error());
$dbs = @mysql_select_db($database, $connection) or
die(mysql_error());
$sql = "SELECT * FROM $userstable WHERE username = '$_POST[username]' AND password = '$_POST[password]'";
$result = @mysql_query($sql,$connection) or die(mysql_error());
$num = @mysql_num_rows($result);
if ($num != 0) {
$_SESSION['xyradiologging'] = $_POST[username];
//echo "kész";
//echo $_SESSION['xyradiologging'];
header ("Location: index.php");
}else{
echo "Jelentkezz be.";
}
?>
<br><br>
</td></tr></table>
</body>
<?php
ob_end_flush();
?>
Az igazság, hogy iszonyat gány az egész. A fejlesztést nem én kezdtem el, hanem megbíztam vele valakit sajnos, aki elfelejtett jelentkezni, így nekem kell rendbe hoznom. Nem is teljesen látom át a lényegét, ezért fordulok most hozzátok. Azt tudom, hogy nagyon sok az össze-vissza irányítás.. Várom a megoldásaitokat. Köszönöm!
Wow és ezért te fizettél is? Ha ez valami munka, akkor a merevlemezt vidd Mordorba és csapd bele a vulkánba a fejlesztővel együtt. Hobbiból első próbálkozásnak elmegy, de jobb lenne elölről kezdeni az egészet. (titkosítatlan jelszó, mysql függvény elavult, nincsenek ellenőrizve a felhasználó által küldött adatok - sql injection, rosszul van felépítve a kód stb.)
Ami miatt nem működik az az, hogy nincsen ellenőrizve, hogy el van-e küldve a form, az sql lekérdezés mindig lefut és mivel üres a név meg a jelszó is így a $num az mindig 1-el tér vissza ami miatt átirányít az indexre, de mivel nincsen felhasználónév így nincsen munkamenet se, ezért átirányít a login.php-re.
Érdekes. Az újabb php verziókban már teljesen működésképtelen lesz a kód, mert megszűnik a mysql függvények támogatása. (mysqli-t lehet helyette használni vagy pdo-t)
Az a gáz ezzel a kóddal, hogy ezen a bejelentkezésen keresztül lazán törölni lehet az egész adatbázist, ellopni az adatokat stb. bármilyen jelszó vagy felhasználónév ismerete nélkül... És ehhez nem kell komolyabb informatikai tudás, csak egy google keresés, szóval egy alsós iskolás is hazavághatja ezt az oldalt. (angol tudás sem szükséges hozzá)
Mint ahogyan az előző hozzászólásomban is írtam a kód egy egyszerű if feltétellel működőképessé tehető. Meg kell adnod, hogy ne futhasson le a lekérdezés, ha a $_POST['username'], illetve a $_POST['password'] üres.
Te tudod. Legkisebb energiaráfordítással így tudod használhatóvá tenni:
if(isset($_POST['username']) AND strlen($_POST['username']) > 3){
$connection = @mysql_connect($hostname, $user, $pass)
or die(mysql_error());
$dbs = @mysql_select_db($database, $connection) or
die(mysql_error());
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$sql = "SELECT * FROM user WHERE name = '$username' AND pass = '$password'";
$result = @mysql_query($sql,$connection) or die(mysql_error());
$num = @mysql_num_rows($result);
}
if (isset($num) AND $num != 0) {
$_SESSION['xyradiologging'] = $_POST['username'];
header ("Location: index.php");
}else{
echo "Jelentkezz be.";
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!