Prihlasovanie na web cez PHP a bezpecnost

Programovacie jazyky, rady, poradňa...
Shakal
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 206
Registrovaný: 31 jan 2006, 18:54

Prihlasovanie na web cez PHP a bezpecnost

Príspevok od používateľa Shakal »

Zdravim.
Mam na vas otazku/prosbu. Prosim prezrite si nasledujucu sadu skriptikov a povedzte mi co si myslite o ich bezpecnosti.

index.php

Kód: Vybrať všetko

<?
session_start();
if(isset($_SESSION["login"])) {
 include("./tajna_stranka.php");
} else {
 include("./login-form.php");
}

tajna_stranka.php

Kód: Vybrať všetko

<?
if (!isset($_SESSION["login"])) die('Hack?');
?>
......
......
tajny obsah
......
......

login-form.php

Kód: Vybrať všetko

<?
if (isset($_REQUEST["heslo"]) and $_REQUEST["heslo"]=="nbu123") $_SESSION["login"]="true";
?>
<form method="post">
<b>Tajne heslo:</b><input type="password" name="heslo"><br />
<input type="submit" value="Log-in">
</form>
Ako iste vidite, cele je to hra o tom ci je/nie je SESSION premenna inicializovana. Ak nie, skript jednoducho umrie este pred tym ako zobrazi "tajny obsah" (tajna_stranka.php).
Otazka, ktora ma zaujima je - ci je toto dostatocne bezpecne, nezlomitelne a ci je tu nejaka moznost "podsunut" alebo inak inicializovat SESSION na ktorej to vlastne cele stoji.

Vdaka.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

základná myšlienka je správna, a bežne sa používa. Nedá sa ale povedať či je to bezpečné, lebo to záleží aj od iných faktorov (napr. neskôr spraviš chybu ktorá mi umožni pomocou sql injection obísť login, prípadne chybu ktorá mi pomocou xss umožní získať tvoje cookies so sessionID alebo cez csrf zmeniť tvoj login/pass a prihlásiť sa pod tvojím účtom...).
Shakal
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 206
Registrovaný: 31 jan 2006, 18:54

Príspevok od používateľa Shakal »

Ja som php zaciatocnik. Ale uz podla nazvu som myslel ze SQL injection sa tyka len skriptov pouzivajucich nejakym sposobom komunikaciu s SQL databazami.

Ci nie?


A este otazka - co maju SESSIONS a COOKIES vlastne spolocne?
Dik.
TGiJack
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 419
Registrovaný: 30 nov 2006, 19:37
Bydlisko: NO
Kontaktovať používateľa:

Re: Prihlasovanie na web cez PHP a bezpecnost

Príspevok od používateľa TGiJack »

Shakal napísal:Ja som php zaciatocnik. Ale uz podla nazvu som myslel ze SQL injection sa tyka len skriptov pouzivajucich nejakym sposobom komunikaciu s SQL databazami.

Ci nie?


A este otazka - co maju SESSIONS a COOKIES vlastne spolocne?
Dik.
su to super globalne premenne a maš kným prístup kdekolvek v scripte ,ked ju proste potrebuješ len si ju zavolaš a mašju ak existuje

//autoeditácia príspevku ( 17 Mar 2009, 12:19 )
Shakal napísal: login-form.php

Kód: Vybrať všetko

<?
if (isset($_REQUEST["heslo"]) and $_REQUEST["heslo"]=="nbu123") $_SESSION["login"]="true";
?>
<form method="post">
<b>Tajne heslo:</b><input type="password" name="heslo"><br />
<input type="submit" value="Log-in">
</form>
no ja by som ešte ktomu všetkemu dodal jednu taku drobnu kontrolu alebo lepšie povedane upravu,ked niečo posielaš a ide to do databazi alebo len tak:

Kód: Vybrať všetko

$_POST['heslo'] = HTMLSpecialChars($_POST['heslo']);
a toto by som ešte vsunul pri registracii a logine : (to nbu123 predpokladam že bude v buducnosti tahat z DB)

Kód: Vybrať všetko

LOGIN:
if (isset($_POST["heslo"]) and md5($_POST["heslo"])==md5(nbu123)) $_SESSION["login"]="true";

REGISTRACIA:
$_POST['new_heslo'] = HTMLSpecialChars($_POST['new_heslo']);
$heslo = md5($_POST['new_heslo']);
a takto heslo zapišeš do DB hned je to o niečo bezpečnejšie 
a injekti si vyradil aj ked aj toto sa da myslim obísť
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Shakal napísal:...
A este otazka - co maju SESSIONS a COOKIES vlastne spolocne?
Dik.
session ako také je na serveri, ty k nemu pristupuješ len na základe identifikátora ktorý sa prenáša buď v url ako parameter alebo v cookies. Ak ti tento identifikátor ukradnem, tak si svoj nahradím za tvoj a server ma identifikuje ako teba. Preto nesmieš dopustiť aby sa niekto dostal k tvojím cookies kým si prihlásený. Viac sa o tom dočítač keď hodíš xss do googla
G0lDiER_
King
King
Používateľov profilový obrázok
Príspevky: 1948
Registrovaný: 16 máj 2007, 16:09
Bydlisko: Topolcany
Kontaktovať používateľa:

Re: Prihlasovanie na web cez PHP a bezpecnost

Príspevok od používateľa G0lDiER_ »

nazdar, ja mam prihlasovanie pomocou cookies, po prihlaseni zapisujem do cookies nahodny authkey string (a nickname), ktory je aj v v databaze a potom pri overovani kontrolujem ci sa tieto authkey zhoduju. ako riesite prihlasenie jedneho uzivatela z viacerich pc? ukladate viacero authkeyov? dakujem.

//autoeditácia príspevku (25 Okt 2012, 23:59)
bump.
zaujima ma ako riesite celkovu autentifikaciu, co vsetko overujete, aky authkey ukladate a pod.
staci mi zakladna myslienka.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Prihlasovanie na web cez PHP a bezpecnost

Príspevok od používateľa audiotrack »

záleží od charakteru aplikácie a požiadavok na bezpečnosť. Niekedy stačí ukladať do session id prihláseného, niekedy treba pridať prehliadač či ip aby nemohli byť súčasne prihlásený dvaja ľudia pod rovnakým nickom...
Tvoja otázka je asi taká, že aké korenia používate. No rôzne, záleží čo ideme variť, a pre koho
G0lDiER_
King
King
Používateľov profilový obrázok
Príspevky: 1948
Registrovaný: 16 máj 2007, 16:09
Bydlisko: Topolcany
Kontaktovať používateľa:

Re: Prihlasovanie na web cez PHP a bezpecnost

Príspevok od používateľa G0lDiER_ »

no dobre. aka je jednotka urovni bezpecia?:) pozadujem priemernu bezpecnost. prihlasenie jedneho nicku z viacerich ip by som rad povolil a neviazal sa na ipcku, kedze uzivatelovi sa moze menit a chcem aby mu cookies zostali platne. dalej, je bezne povolene kopirovanie cookies na iny pc? prip na iny prehliadac na tom istom pc?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Prihlasovanie na web cez PHP a bezpecnost

Príspevok od používateľa audiotrack »

v tom prípade nemusíš do toho zaťahovať nič navyše, spravíš klasické prihlasovanie a prenos session identifikátora cez cookies. Prenos cookies medzi prehliadačmi je povolené v každom prehliadači (cháp. zmeniť cookies je triviálna záležitosť na pár sekúnd)
G0lDiER_
King
King
Používateľov profilový obrázok
Príspevky: 1948
Registrovaný: 16 máj 2007, 16:09
Bydlisko: Topolcany
Kontaktovať používateľa:

Re: Prihlasovanie na web cez PHP a bezpecnost

Príspevok od používateľa G0lDiER_ »

hej ale v pripade ze by som do session id napr hashoval aj user agenta, tak by tie cookies na druhom prehliadaci neboli autentifikovane, nie?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Prihlasovanie na web cez PHP a bezpecnost

Príspevok od používateľa audiotrack »

po prvé - do session id nevieš hashovať nič. Je to iba identifikátor na súbor, kde sú uložené hodnoty
po druhé - to že tam pridáš user agenta ešte nič nerieši, ak ho nebudeš vedieť potom skontrolovať a overiť. Navyše, user agent sa dá zmeniť rovnako jednoducho ako cookies, lebo je to iba premenná ktorá sa posiela v hlavičke (a tak sa moja mozilla môže tváriť že je opera, či safari...)
G0lDiER_
King
King
Používateľov profilový obrázok
Príspevky: 1948
Registrovaný: 16 máj 2007, 16:09
Bydlisko: Topolcany
Kontaktovať používateľa:

Re: Prihlasovanie na web cez PHP a bezpecnost

Príspevok od používateľa G0lDiER_ »

1) so sposobom prihlasovania sme sa asi nezhodli, ja som mal na mysli cookie v ktorom bude vygenerovany auth key, pripadne este jedno cookie v ktorom bude uzivatelske meno aby som to lahsie hladal v db.
2) to viem, ale myslim ze lepsie nez nic:))

takze ty si mal na mysli asi prihlasovanie pomocou SESSION, ze?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Prihlasovanie na web cez PHP a bezpecnost

Príspevok od používateľa audiotrack »

áno, pomocou session ktorého identifikátor bude prenášaný v cookies
G0lDiER_
King
King
Používateľov profilový obrázok
Príspevky: 1948
Registrovaný: 16 máj 2007, 16:09
Bydlisko: Topolcany
Kontaktovať používateľa:

Re: Prihlasovanie na web cez PHP a bezpecnost

Príspevok od používateľa G0lDiER_ »

tak ja som mal na mysli nieco ine. iba vytvorenie cookie pomocou setcookie() a potom ich porovnavat s udajmi v databaze.
to druhe riesenie sa robi pomocou session_start() ? potom sa automaticky vytvori aj cookie s istym id?

aky je rozdiel medzi tymito dvomi rieseniami? dakujem.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Prihlasovanie na web cez PHP a bezpecnost

Príspevok od používateľa audiotrack »

áno, pri session_start() sa vytvorí automaticky identifikátor v cookie (jeho názov záleží od nastavenia servera). Všetky funkcie na prácu so session sa dočítaš v dokumentácii, rovnako tam nájdeš príklady na jednoduchú autentizáciu.
Rozdiel je v tom, že neprenášaš hodnoty v plaintexte ako pri cookies, a teda ich nemôže útočník tak jednoducho zmeniť. Výhod to má však ďaleko viac, od rýchlosti až po jednoduchosť práce
Napísať odpoveď