Kezdőoldal » Számítástechnika » Weblapkészítés » A lentebbi probléma megoldásáb...

A lentebbi probléma megoldásában kérném a segítségeteket?

Figyelt kérdés

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!


2016. febr. 10. 02:01
 1/6 Argloss ***** válasza:

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.

2016. febr. 10. 13:15
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:
Sajnos igen.. Ndm is keveset.. Mivel lehetne megoldani? Eddig egyébként működött..
2016. febr. 10. 21:12
 3/6 Argloss ***** válasza:

É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.


[link]

2016. febr. 11. 01:09
Hasznos számodra ez a válasz?
 4/6 A kérdező kommentje:
Sajnos nem tudok programozni, és nem is látom át a dolgot.. :( Értelmezni értelmezem az if függvényt, viszont a fizikai használata már magas nekem. :( Az injection problémára már kitaláltam valamit, de előtte az oldalnak kell működnie. És jelenleg sajnos a költségvetésbe nem fér bele, egy fejlesztő megbízása :(
2016. febr. 11. 01:16
 5/6 Argloss ***** válasza:

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.";

}

2016. febr. 11. 11:40
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:
Nagyon szépen köszönöm az eddigi segítségeidet. Viszont még akadt egy pici gond. Írtam privát üzenetet, mert tartalmaz olyat, ami nem kéne nyilvános legyen. Megköszönöm, ha válaszolsz!
2016. febr. 12. 01:16

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!