Biztonságos-e a bejelentkeztető felületem?
Előre is bocsánatot kérek ha már van ilyen téma.
Nos, nekem csak egy ellenőrzés kéne, hogy megfelelő biztonsággal van-e ellátva az oldalam admin részének biztonsága.
A bejelentkező felületnél, a megfelelő ellenőrzések után, bejegyzem az adatokat a munkamenethez:Az oldalak védelméhez, minden egyes aloldalra behívok egy filet, ami tartalmazza a következő sorokat:Ez a beléptetés megfelelő biztonságot nyújt vagy könnyen feltörhető?
Még ezen kívül annyi lenne a problémám, hogy hiába írom be a .SID-et átirányításnál nem írja ki a cím után. Mi lehet ezzel a probléma vagy működik a script ez nélkül is?
Előre is köszi a segítséget!
Kiss Dávid
■ Nos, nekem csak egy ellenőrzés kéne, hogy megfelelő biztonsággal van-e ellátva az oldalam admin részének biztonsága.
A bejelentkező felületnél, a megfelelő ellenőrzések után, bejegyzem az adatokat a munkamenethez:
<?php
$keres = "SELECT * FROM `admin` WHERE nev='$adnev'";
$eredmeny = mysql_query ($keres, $kapcsolat) or die ("HIBA" .mysql_error());
$sor = mysql_fetch_assoc ($eredmeny);
$pass = crypt ($adpass, $sor[jelszo]);
if (empty ($sor))
{
print "Nincs ilyen admin!";
}
if ($sor[jelszo] == $pass)
{
header ("Location: index2.php?". SID);
print "Bejelentkezés sikeres!";
$belepett = true;
session_register ("adnev");
session_register ("adpass");
session_register ("belepett");
exit;
}
?>
<?php
session_start();
extract ($_SESSION);
$keres = "SELECT * FROM `admin` WHERE nev='$adnev'";
$eredmeny = mysql_query ($keres, $kapcsolat) or die ("HIBA" .mysql_error());
$sor = mysql_fetch_assoc ($eredmeny);
if (empty ($sor))
{
header ("Location: index.php");
exit;
}
if ($belepett == false)
{
header ("Location: index.php");
exit;
}
Még ezen kívül annyi lenne a problémám, hogy hiába írom be a .SID-et átirányításnál nem írja ki a cím után. Mi lehet ezzel a probléma vagy működik a script ez nélkül is?
Előre is köszi a segítséget!
Kiss Dávid
SQL injection veszély
Első kérdésem az lenne, honnan jön az az $adnev változó (a login oldalon)?
Gondolom ez a $_POST változóból jön.
Mit kezdesz a magic_quotes problémával? Mindig ki van kapcsolva, vagy minden esetben be van? Ha a magic_quotes ki van kapcsolva, akkor a kódot így ebben a formában egyáltalán nem biztonságos (példa SQL injection sebezhetőségre).
Egy jó tanács: a magic_quotes nem jó dolog, azt le kell tiltani.
Ha letiltottad, akkor neked kell a változókat eszképelni (ha szükséges).
SQL utasitásokban a mysql_real_escape_string használata az ajánlott (feltéve, ha MySQL adatbázist használsz).
Honnan szeditek ezt a baromságot? Már több helyen is láttam ilyet.
régi programok
Ez egy jó megoldás lehet egy régi PHP-s alkalmazásnál, ami a register_global=on beállítással jól és megbízhatóan működött.
Új programban egyértelműen életveszélyes, de pl. aki a "PHP 24 óra alatt" c. könyvből tanul annál ez életmentő, hisz nem tud szinte egyetlen egy mintaprogramot sem kipróbálni e nélkül. Szóval nem baromság ez, de nem is jó praktika. ;)
A topic indítójának tudom ajánlani biztonság szempontjából a WFSZ ajánlását.
pp
Nagyjából...
De:
- Nem szokás már a session_register()-t használni. Használd csak a $_SESSION tömböt! A PHP.net szerint ( http://hu2.php.net/session_register ) sem jó keverni...
- A $keres = "SELECT * FROM `admin` WHERE nev='$adnev'"; előtt az $adnev-et ugye átnyomod egy mysql_real_escape()-függvényen? Ajánlott irodalom: ( http://weblabor.hu/blogmarkok/17214 (SQL Injection Cheet Sheet) )
- A $_SESSION['adpass']-t nem szabad session-ban tárolni (már ha tényleg az admin jelszó van benne)! A default hely a session-ok tárolására a /tmp, azt általában bárki írhatja, olvashatja... és mi lehet vele, ha elolvassák?...
- Szerintem az oldalaknál fölösleges a MySQL-kérés. Ha van $_SESSION['adnev'], akkor be van jelentkezve. Persze lehet mondjuk egy 'checksum' mezőt bevezetni és az md5($adname.$_SERVER['REMOTE_ADDR'])-t eltárolni benne, azt is össze tudod vetni és akkor nem csak a név, hanem az IP is ellenőrzésre kerül...
- A $_SESSION['belepett']-et fölöslegesen tárolod. Egyszerűen kideríthatő, hogy belépett-e:
hóhér akasztása ;)
http://weblabor.hu/cikkek/munkamenetkezeles2
Kérdezőnek ez is ajánlott lehet:
http://weblabor.hu/cikkek/munkamenetkezeles1
Üdv,
Felhő
Én, mint hóhér?...
A felsorolt lista alapján reméltem, hogy a "nagyjából"-ban érezhető némi irónia.
A session fixation-ban igazad van az kimaradt. Elküldhettem volna én is a cikkedhez...
Azt, hogy az empty nem notice-ol, azt nem tudtam - de most már igen :)
( http://hu2.php.net/empty és tényleg: "empty() is the opposite of (boolean) var, except that no warning is generated when the variable is not set." )