Stránka: 1 z 1
| [ Príspevkov: 30 ] | |
Autor | Správa |
---|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 | 135 Bydlisko: Bratislava ... |
mám kod na login:
Kód: if($Finish['admnick']){ $_SESSION['login'] = 1; $_SESSION['admnick'] = $Finish['admnick']; $_SESSION['prava'] = $Finish['prava']; $_SESSION['email'] = $Finish['email']; $_SESSION['web'] = $Finish['web']; header("location: guestbook.php"); }
predtym samozrejme este $Finish = mysql_fetch_array($dotaz); ktory uklada vysledky $dotaz kde je select na udaje a porovnavanie. ale ja sa pytam, lebo podmienka je iba na admnick, ale zabudame na heslo ci to nema byt nieco ako if($Finish['admnick'] and $Finish['pass']){ alebo nieco podobne, lebo sa mi nezda ze iba na nick aby to bolo...co myslite vy? mne to zatial fungovalo normalne ale pytam sa ci to takto je ok
v db sice porovnam aj meno a heslo, ale i tak ma to zaujima
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Takúto podmienku môžeš použiť v javascripte, v PHP by si ju mohol trošku inak napísať, lebo ti môže každá hovadina vyhodiť error/warning. Použiť môžeš napríklad if(!empty($Finish['blablabla')).
Ja by som poprosil trošku detajlnejšie popísať problém, mám trochu problém prísť na to, čo sa pýtaš (asi aj preto, že sa mi ešte stále točí svet)
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 | 135 Bydlisko: Bratislava ... |
ake hovadiny mas na mysli?
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Napríklad padne DB, tým pádom bude $Finish false. Takže ti z toho vznikne warning, že Finish nie je array alebo také čosi.
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 21.02.07 Prihlásený: 21.02.10 Príspevky: 3984 Témy: 96 | 96 |
rooobertek píše: Napríklad padne DB, tým pádom bude $Finish false. Takže ti z toho vznikne warning, že Finish nie je array alebo také čosi. no a čo? veď keď padne DB tak celá stránka bude poerrorovaná ... trda dokým to "neumlčíš"
dalo by sa povedať že problému ale vôbez nerozumiem ...
prídu ti vstupy .. bezpečnostne ich ošetri vopjdi do databázy a spýtaj sa či existuje user ktorý ma meno xx a heslo xy. Potom spočítaj cez mysql_num_rows počet výsledkov pokiaľ je väčší ako 0 tak viež že existuje a nasleduje mysql_fetch_array ktoré zapíšeš do SESSION a teraz sa pýtam čo to má s bezpečnosťou??
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Tak zabudni na padnutú DB. Vymažeš užívateľa, tým pádom budeš mať presne 0 záznamov, ak ich vytiahneš podľa užívateľovho mena. Tým pádom neexistuje $Finish['blablabla']
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 | 135 Bydlisko: Bratislava ... |
viete co? ja sem radsej postnem cely kod...aby ste to mohli lepsie zanalizovat lebo prave na tejto casti mi dost zalezi
Kód: <?php session_start();
include "connect.php";
if(isset($_POST['send'])){ $meno = trim(htmlspecialchars(stripslashes($_POST['meno']))); $heslo = trim(htmlspecialchars(stripslashes($_POST['heslo']))); $errmsg = "";
if(empty($meno) || empty($heslo)) { $errmsg .= "<div class='errorMessage'>Nemáte prístupové práva!</div>"; }
if(empty($errmsg)){ $dotaz = mysql_query("SELECT * FROM `directors` WHERE `nick` = '$meno' and `pass` = '$heslo'") or die (mysql_error()); $Finish = mysql_fetch_array($dotaz); }
if(!empty($Finish['nick'])){ $_SESSION['login'] = 1; $_SESSION['nick'] = $Finish['nick']; $_SESSION['prava'] = $Finish['prava']; header("location: adm.php"); } else { if(empty($errmsg)){ $errmsg .= "<div class='errorMessage'>Údaje nie su správne, Acces Denied!</div>"; } }
} ?>
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Celkom dobre, ale pár výhrad:
- or die (mysql_error()) - ee, toto určite nie. Na debugovanie je to dobrá pomôcka, ale užívateľovi NEmôžeš hodiť chybovú hlášku priamo z mysql. Užívateľovi môžeš hádzať jedine chybové hlášky, ktoré napíšeš ty - samozrejme s citom.
- heslo v DB máš v podobe plaintextu. Ja by som ti odporúčil dať tam iba hash z hesla. Napríklad pomocou funkcie sha1. Lepší by bol ešte salted hash, ale nebudeme preháňať zatiaľ.
-skús prehodnotiť použitie SELECT *. Či potrebuješ z DB naozaj všetky polia.
- tie errmsg - máš v podstate dve rovnaké, ale jedna je "Nemáte prístupové práva!" a druhá je "Údaje nie su správne, Acces Denied!" - to daj nejak dohromady
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 | 135 Bydlisko: Bratislava ... |
no tie error hlasky su ok ak by si to testoval zistil by si ze vsetko je jak ma. a tiez ten select mas pravdu, nepotrebujem vsetky polia mozno by pomohol prikaz offset? no
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
No skôr som myslel, či potrebuješ o užívatelovi vyťahovať info, ktoré nepotrebuješ. Ty v podstate potrebuješ len zistiť, či sa daný záznam nachádza v DB, nie? To by ti stačilo aj len SELECT 0 FROM... alebo SELECT COUNT(*) FROM...
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 28.12.08 Prihlásený: 12.01.09 Príspevky: 78 Témy: 0 | 0 |
Kód: $_SESSION['prava'] = $Finish['prava'];
...velmi dobry napad...
|
|
Registrovaný: 21.02.07 Prihlásený: 21.02.10 Príspevky: 3984 Témy: 96 | 96 |
ja používam ešte jednu vec:
Kód: $sql = mysql_query("SELECT * FROM ..."); if(mysql_num_rows($sql) > 0){ $array = mysql_fetch_array($sql); spracovanie ... } else echo "Si sa asi pozabudol lebo si napísal poriadnu koninu";
|
|
Registrovaný: 28.12.08 Prihlásený: 12.01.09 Príspevky: 78 Témy: 0 | 0 |
Citácia: echo "Si sa asi pozabudol lebo si napísal poriadnu koninu";
...koninu ? skus porozmyslat ty nad tymto:
IF ked vytahujes userdata z databazy ako tvrdis tak to neveris vlastnemu serveru ked to musis vlozit este aj do session ? to pre srandu kralikom ?
ELSE ked si to ulozil do cookies znamena to ze to niekde spracovavas a teda mi staci najst ten subor...dvojklikom napriklad v opere si zmenit spravne hodnoty cookies a si kde ? pravedepodobne to bude bitove pole alebo retazec
btw keby si sa zamyslel tak si mohol vytvorit premennu napriklad "tlmcb" a nie "prava" ...to si uz rovno mohol vytvorit premennu "tu_si_mozete_zmenit_pristupove_prava"
P.S. sice som uz videl aj lepsich expertov...
...nebudem robit reklamu ale ked tvojmu pozornemu oku neunikne tak je to stranka zo SSL certifikatom ! (ako profesionali )
|
|
Registrovaný: 09.09.07 Prihlásený: 07.11.16 Príspevky: 3114 Témy: 233 | 233 Bydlisko: Nové Zámky |
ach, co vy tu akoze riesite ??
ja by som pouzil tento postup:
tabulka v DB:
dopln si stlpec s pravami usera (admin,user,alebo cisla mozes tiez,1,2), heslo ukladaj ako md5($heslo) (alebo sha1)
uzivatel sa prihlasi:
hladaj v DB meno a heslo, a AK pocet riadkov == 1 (nie>0,ako radil tomi), TAK zapis $_SESSION['iduzivatela'] = $riadok['id'];
uzivatel beha po stranke:
vyber z DB riadok podla $_SESSION['iduzivatela'], ak tam je (pocet riadkov==1), tak si definuj konstantu alebo premennu, napr takto:
Kód: if($riadok['prava']=='admin') { define('admin',true); } else { define('admin',false); } a potom tam kde chces admin sekciu: Kód: if(admin) { //tajna sekcia } else { echo 'nemas prava'; }
a teraz ma zabite, ze pri kazdom nacitani stranky je o 1 dopyt na DB viac.. ehm... ten 1 SELECT, fakt zataz na server a urcite to predlzi nacitavanie stranky aspon o 10 sekund
_________________ "It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď |
|
Registrovaný: 28.12.08 Prihlásený: 12.01.09 Príspevky: 78 Témy: 0 | 0 |
...sice ides nato dobre ale ani ty nemas pravdu...
btw ta tvoja verzia je este nebezpecnejsia ako ta jeho...
http://www.pcforum.sk/member-id9897.html
=>ked si pozries tento link...koniec koncov tvoj profil...nezda sa ti na nom nieco zvlastne ?
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Ak používate niekto dreamweaver, je tam čosi ako wysiwyg pre PHP. Pár kliknutiami môžete pridať napríklad prihlásenie a zistenie, či je užívateľ prihlásený. Tam je to riešené takýmto spôsobom:
- vytiahnete si z databázy info o užívateľovi Jožko Mrkvička
- v php porovnáte, či Jožko Mrkvička zadal dobré heslo
Je to celkom aj logické keď sa nad tým zamyslíte... No a prihlási ho to jedine v prípade, že to heslo sedí.
Inak zabudnite všetci na md5, to je prekonané.
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 | 135 Bydlisko: Bratislava ... |
pockat aale takto. ja do tej premennej prava ukladam prava preto aby som na dalsej stranke mohol overit, co je na tom nezabezpecene? alebo ako inak by som mal? do sessions si ukladam veci ako meno a pod aby som to mohol nacitat userovi do profilu
|
|
Registrovaný: 28.12.08 Prihlásený: 12.01.09 Príspevky: 78 Témy: 0 | 0 |
...lebo tie prava alebo to idUzivatela ako tvrdi ten druhy si mozem zmenit ako sa mi zapaci a otvorim si tvoju stranku kde to kontrolujes a ejhla uz som admin...
napriklad:
1. link na profil uzivatela blackshadow je:
Citácia: http://www.pcforum.sk/member-id9897.html 2. ako on tvrdi bude ukladat do session idUzivatela...ja si idUzivatela v session zmenim na 9897 a ejhla uz som blackshadow... => BlackShadow píše: uzivatel beha po stranke: vyber z DB riadok podla $_SESSION['iduzivatela']
P.S. ludia nic s vami aspon zakladne hacky treba poznat alebo si to dat radsej niekomu za peniaze napisat...
|
|
Registrovaný: 17.10.06 Prihlásený: 08.01.11 Príspevky: 1752 Témy: 17 | 17 |
povies mi ako zmenis hodnoty v session? zmenit si mozes cookies, takze pripada do uvahy ukradnutie relacie, no proti tomu sa da celkom vpohode ochranit. ale mam pocit, ze hodnoty v session menit nemozes.
_________________ A Real Programmer might or might not know his wife's name. He does, however, know the entire ASCII code table. |
|
Registrovaný: 07.03.06 Prihlásený: 23.01.11 Príspevky: 404 Témy: 2 | 2 Bydlisko: Prešov / Pr... |
Taktiež sa nechám poučiť, ako ľahko zmeniť údaje v session... Pokiaľ pri prihlasovaním použijem session fixation proti ukradnutiu relácia, ako vraví suchy, ako teda niekto zmení session?
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Teoreticky sa to dá. Stačí slabšie nastavený hosting.
Relácie sa typicky na linuxe ukladajú do priečinka /tmp. Ak beží apache pod jedným userom pre všetky weby na hostingu, tak si nastavíš v cookies sessionid z konkurenčného webu a sessions si môžeš prezerať a môžeš ich meniť cez svoj web. Tých podmienok musí byť splnených asi viac, ale podstata je takáto. Nevládzem už rozmýšlať, idem spať.
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 21.02.06 Prihlásený: 08.12.14 Príspevky: 5404 Témy: 30 | 30 Bydlisko: Bratislava |
roobertek - teoreticky, za splnenia 100 podmienok
Rovnako môžem povedať, že si ktokoľvek môže dať zobraziť heslo k db, čo mám v php, lebo server nie je zabezpečený.
My tu ale hovoríme o tom blackmanovom tvrdení, tak ho vyzývam aby nás naučil základné hacky, aby sme nerobili také školácke chyby
_________________ Neradím a nekomunikujem cez SS, ak niečo potrebujete, máte iné možnosti: Ak vám zmizla téma, alebo sa vám niečo nepáči. Ak potrebujete nahlásiť príspevok/človeka, reportujte ho. Ak máte s niečim problém, riešte to v danej téme. |
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Jaaaj, to čo písal blackman má byť hack? To som akosi nepochopil. Teraz nastáva otázka, kto tu je lietadlo.
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
myslim, ze odpovede a vysvetlenia sa nedockate
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 09.09.07 Prihlásený: 07.11.16 Príspevky: 3114 Témy: 233 | 233 Bydlisko: Nové Zámky |
blackman545 píše: ...lebo tie prava alebo to idUzivatela ako tvrdi ten druhy si mozem zmenit ako zmenim session? diki za navod rooobertek píše: Teoreticky sa to dá. Stačí slabšie nastavený hosting. Relácie sa typicky na linuxe ukladajú do priečinka /tmp. Ak beží apache pod jedným userom pre všetky weby na hostingu, tak si nastavíš v cookies sessionid z konkurenčného webu a sessions si môžeš prezerať a môžeš ich meniť cez svoj web. Tých podmienok musí byť splnených asi viac, ale podstata je takáto. ako tvrdi shaggy, tak musi byt sakra vela tych podmienok a myslim si, ze ziadny hosting (plateny,na nejakej urovni) si nemoze dovolit takuto chybu.. shaggy píše: ktokoľvek môže dať zobraziť heslo k db, čo mám v php, lebo server nie je zabezpečený.
asi tak
Ked uz nezapisovat do session ani ID uzivatela, tak co ??
Jedine co ma napada je ukladat nejaky hash, ktory ten user ma pri sebe v nejakom stlpci v DB a ten bude vlastne sluzit na jeho identifikaciu.. a este nech je to tazsie, tak navrhujem, nech sa v tej DB prepisuje na novy hash pri kazdom prihlaseni, alebo pri kazdom znovunacitani stranky
_________________ "It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď |
|
Registrovaný: 28.12.08 Prihlásený: 12.01.09 Príspevky: 78 Témy: 0 | 0 |
mylan píše: Taktiež sa nechám poučiť, ako ľahko zmeniť údaje v session... Pokiaľ pri prihlasovaním použijem session fixation proti ukradnutiu relácia, ako vraví suchy, ako teda niekto zmení session?
1. ale on ju tam nema !
2. na ukradnutie session a jej zmenu sa nemusim hackovat do db bez tokenu...staci si zistit par udajov a pockat kym sa prihlasi...rusi maju software na vsetko...apache je open-source...
3. fakticky jednemu uzivatelovi dovoluje sa prihlasit aj 90-krat takze to fakticky ani nema ako zistit...=> uid musi byt viazane na session a nie naopak!
...plus ako tvrdi rooobertek...
|
|
Registrovaný: 21.02.07 Prihlásený: 21.02.10 Príspevky: 3984 Témy: 96 | 96 |
blackman545: tvoje príspevky sú strašne zavádzajúce.
Povedané jednoducho:
1, SESSION nezmeníš, pretože si to uchováva server, uživateľovi sa len necháva Session ID
2, Celá bezpečnosť závisí od bezpečnosti webovej aplikácie, pokiaľ ja pri prihlásení vygeneruj nové session ID tak ty si čakaj ...
3, O tvojích základoch hackingu sa nechám poučiť ....
4, Všetko čo si doteraz napísal boli bájky. Keby to bolo také "jednoduché" tak sú dnes nebezpečné aplikácie ako youtube, gmail a pod. Takže do budúcna sa viac zamysli nad realnosťou a pokiaľ chceš niečo tvrdiť tak to niečoim podlož
|
|
Registrovaný: 07.03.06 Prihlásený: 23.01.11 Príspevky: 404 Témy: 2 | 2 Bydlisko: Prešov / Pr... |
blackman545 píše: 1. ale on ju tam nema ! 2. na ukradnutie session a jej zmenu sa nemusim hackovat do db bez tokenu...staci si zistit par udajov a pockat kym sa prihlasi...rusi maju software na vsetko...apache je open-source... 3. fakticky jednemu uzivatelovi dovoluje sa prihlasit aj 90-krat takze to fakticky ani nema ako zistit...=> uid musi byt viazane na session a nie naopak! ...plus ako tvrdi rooobertek...
Na začiatku si tu tvrdil niečo o tom, že si len zistíš id užívateľa, zmeníš svoje id v session na adminove a voila si admin. Tak sa pýtam ešte raz: ako? Predpokladajme jednoduchú aplikáciu, ktorá pri prihlásení nastavuje session s id užívateľa a podľa toho priraďuje oprávenia. Ďalej predpokladajme, že mám prístup do aplikácie ako redaktor, alebo len ako bežný user(môžem si prehliadať veci, upravovať svoj profil). Admin je len jeden a má id 1, všetci ostatní sú useri. Moje id je napr 69. Ako zmením v session svoje id zo 69 na 1, aby sa zo mňa "stal admin"? Predpokladám ešte, že aplikácia je klasicky zabezpečená tak ako väčšina, používa na ochranu session_regenerate_id(). Ako teda zmením svoje id uložené v session?
Budem rád, ak poskytneš naozaj rozumné vysvetlenia, poučíme sa z toho všetci...
PS: Obecná odpoveď ako "rusi vedia všetko" je síce hodná úškrnu, ale nerieši popisované veci.
|
|
Registrovaný: 09.09.07 Prihlásený: 07.11.16 Príspevky: 3114 Témy: 233 | 233 Bydlisko: Nové Zámky |
rusi vedia aj tocit kohutikmi a tym privedu europu pomaly do zahuby, ale zato ja doma to asi nespravim
je jasne, ze session_regenerate_id() sa pouzije, ..
tak co s tym session ? (co znamena: 'Staci si zistit par udajov' <-> o ake udaje sa jedna ?)
_________________ "It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď |
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
blackman, prd vieš o bezpečnosti. Keď budeš mať zmáknuté tie techniky, tak sem čosi píš, teraz tu trepeš iba kraviny od buka do buka.
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Stránka: 1 z 1
| [ Príspevkov: 30 ] | |
|