Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
Autor | Správa |
---|
Registrovaný: 21.09.08 Prihlásený: 14.11.17 Príspevky: 225 Témy: 74 | 74 Bydlisko: Michalovce |
Nazdarek. Chcel by som vas poprosit, ci by sa mi niekto nemohol pozriet na tento kod..Spravil som si formular na registraciu a chcel by som vediet ci je to spravne a ak nie tak v com mam chyby. Kod mi funguje, ale chcem hlavne vediet, ci tam mam dobru(dostatocnu) ochranu a ci je ten kod spravne napisany.. Aby som zbytocne nerobil dalsie casti stranky s tymi istymi chybami. Tento subor je includovany...
Kód: <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" > <meta http-equiv="content-language" content="sk" >
<link rel="stylesheet" type="text/css" href="menu.css"> </head> <BODY text="black" bgColor="white" bottomMargin="0" bgcolor="#163689" leftMargin="0" topMargin="30" marginheight="0" marginwidth="0" align="center">
<?
function ochreg ($input, $is_sql = false) { $input = htmlentities($input, ENT_QUOTES);
if(get_magic_quotes_gpc ()) { $input = stripslashes ($input); }
if ($is_sql) { $input = mysql_real_escape_string ($input); }
$input = strip_tags($input); $input = str_replace(" ", "\n", $input);
return $input; }
$meno1= ochreg($_POST["meno"]); $heslo1= ochreg($_POST["heslo"]); $heslo2= ochreg($_POST["heslo2"]); $email1= ochreg($_POST["email"]); $sex1= ochreg($_POST["sex"]); $country1= ochreg($_POST["country"]);
function JeEmail ($cislo) { return ereg("^.+@.+\..+$",$cislo); }
function emailvdb ($email1, $link) { $vysledek=mysql_query("select * from xxxxx where email='$email1'", $link); return (boolean) mysql_num_rows($vysledek); }
function menovdb ($meno1, $link) { $vysledek=mysql_query("select * from xxxxx where meno='$meno1'", $link); return (boolean) mysql_num_rows($vysledek); }
function heslovdb ($heslo1, $link) { $vysledek=mysql_query("select * from xxxxx where heslo='$heslo1'", $link); return (boolean) mysql_num_rows($vysledek); }
$link=mysql_connect("xxxxx", "xxxxx", "xxxxx"); mysql_select_db("xxxxx"); $register=true; if (!empty($_POST)) { if (strlen($meno1)>15 | strlen($meno1)<5)echo "Meno musí mať minimálne 5 znakov!"; elseif (strlen($heslo1)>15 | strlen($heslo1)<5) echo "Heslo musí mať minimálne 5 znakov!"; elseif (strlen($heslo1) != strlen($heslo2)) echo "Hesla sa nezhodujú!"; elseif (!JeEmail($email1)) echo "Nie je zadaný platný e-mail!"; elseif (menovdb($meno1, $link)) echo "Uvedený nick je už registrovaný!"; elseif (heslovdb($heslo1, $link)) echo "Uvedené heslo je už registrované!"; elseif (emailvdb($email1, $link)) echo "Uvedený e-mail je už registrovaný!"; else { $register=false; echo "Ďakujeme za registráciu. Na vašu adresu <b>$email1</b> boli zaslané informácie pre jej dokončenie."; mysql_query ("insert into xxxxx (id, meno, heslo, email, sex, country) values ('', '$meno1', '$heslo1', '$email1', '$sex1', '$country1')", $link); $a = $country1; $unique = $meno1; mail($email1, "Registracia na tvojejstranke.sk", "Pre aktiváciu účtu kliknite na následujuci príklad: http://www.nieco.sk/registraciadokoncena.php?kluc=$unique", "From: email@azet.sk");
} }
?>
<div style="FONT-WEIGHT: bold; FONT-SIZE: 22px; COLOR: #7c0000; FONT-FAMILY: Arial, Trebuchet, Verdana; text-align: center">Registrácia</div>
<table width="500" cellpadding="0" cellspacing="0" bgcolor="white" border="0" align="center"> <tr><td height="40"> <tr><td class="register_l"> <b>Podmienky registrácie:</b></br> - registrácia na stránke je bezplatná</br> - ... dalšie podmienky.. </td></tr></table>
<? if ($register):?> <form method="post" action="index.php?site=registracia"> <table width="500" cellpadding="0" cellspacing="0" bgcolor="white" border="0" align="center">
<tr><td width="250" height="35"> <span class="register_m">Meno:</span></br> <span class="register_p">( Slúži pri prihlasovaní. Meno musí mať min. 5 znakov. )</span> </td><td> <input name="meno" type="text" size="25" maxlength="15" value="<?echo $_POST["meno"]?>"></br> </td></tr>
<tr><td width="250" height="35"> <span class="register_m">Heslo:</span></br> <span class="register_p">( Heslo musí mať min. 5 znakov.)</span> </td><td> <input name="heslo" type="text" size="25" maxlength="15" value="<?echo $_POST["heslo"]?>"> </td></tr>
<tr><td width="250" height="35"> <span class="register_m">Heslo pre kontrolu:</span></br> </td><td> <input name="heslo2" type="text" size="25" maxlength="15" value="<?echo $_POST["heslo2"]?>"> </td></tr>
<tr><td width="250" height="35"> <span class="register_m">E-mail:</span></br> <span class="register_p">( Váš email nebude nikde zverejnený.)</span> </td><td> <input name="email" type="text" size="25" maxlength="25" value="<?echo $_POST["email"]?>"> </td></tr>
<tr><td width="250" height="35"> <span class="register_m">Pohlavie:</span></br> </td><td> <select name="sex" size="1" value="<?echo $_POST["sex"]?>" > <option value="muz">Muž <option value="zena">Žena <option value="par">Pár </select> </td></tr>
<tr><td width="250" height="30px"> <span class="register_m">Krajina:</span></br> </td><td> <select name="country" size="1" value="<?echo $_POST["country"]?>" > <OPTION value=United States selected>United States <OPTION value=United Kingdom>.... <OPTION value=Zimbabwe>Zimbabwe </OPTION> </SELECT> </td></tr> <tr> <td colspan="2" height="45" align="center"><input type="Submit" name="odesli" class="register" value="Zaregistrovať"></td> </tr> </table>
</form> <?endif;?> </body>
Dakujem za kazdu radu a pomoc...
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
wtf, function heslovdb? To odtial určite vyhoď! Takto by mohol užívateľ oskenovať nejaký zoznam slov a v prípade úspechu by to mohol zneužiť. Okrem toho máš heslá v databáze ako plaintext, to je hovadina na n-tú.Určite ich nejakým spôsobom aspoň zahashuj.
Aktivácia účtu, kde pošleš iba meno dohromady nič nerieši. Okrem toho, môže ti to rozkopať url. Použi tam nejakú zvlášť tabulku, kde budeš mať vygenerované náhodné kľúče ku každej registrácii. Prípadne tiež použi hash (/salted hash)
$link=mysql_connect("xxxxx", "xxxxx", "xxxxx");
mysql_select_db("xxxxx"); - to by si mohol dať do configu, nedávaj sem údaje na pripojenie do databázy.
Do sql query sa ti dostávajú údaje bez mysql_real_escape_string. Táto funkcia nerieši všetko, ale pomôže. Máš síce prepínač, ktorým zabezpečíš, aby sa tá funkcia vykonala, ale všade máš false, ani raz true.
Vyjadroval som sa iba k bezpečnosti, lebo na tú si sa pýtal, ale taká hovadinka, chýbajú ti úvodzovky v <OPTION>
Celkové hodnotenie: na registráciu v gmaili by som to nepoužil, ale na začiatočníka dobré (ak je tvoja prezývka ešte aktuálna).
Mohol by si tam zahrnúť ešte aj také nejaké hovadinky, že kontrola mena, či neobsahuje nezmyselné znaky a pod.
Tominator: nie je umenie čítať pekný kód Videl som omnoho horšie kódy a aj som s horšími pracoval.
_________________ 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.09.08 Prihlásený: 14.11.17 Príspevky: 225 Témy: 74 | 74 Bydlisko: Michalovce |
rooobertek..dik za odpovede.. to function heslovdb vyhodim..mas recht..ma to logiku a v podstate je jedno ak uzivatelia maju rovnake heslo..hash na heslo urcite pouzijem, len momentalne pre lepsiu (jednoduchsiu) prehladnost pri tvorbe stranky a prace s db som to zatial vynechal.. To pripojenie na db cez config tiez poriesim.. zaujimaju ma vsak 2 veci..
1. Citácia: Do sql query sa ti dostávajú údaje bez mysql_real_escape_string. Táto funkcia nerieši všetko, ale pomôže. Máš síce prepínač, ktorým zabezpečíš, aby sa tá funkcia vykonala, ale všade máš false, ani raz true.
Celkom tomu nerozumiem.. mohol by si mi to troska konkretnejsie vysvetlit.. ? Aky je rozdiel najme toho false a true..
2. salted hash ..no skusal som nieco najst na googli, ale nenatrafil som na nic, co by bolo teda aspon pre mna dostatocne zrozumitelne vysvetlene..
Nemohol by si mi hodit nejaky link, kde by som sa k tomu docital cosi viac??
Tomi, ako by mal ten kod vyzerat aby bol prehladnejsi???
Ten nick stale plati..
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
no vo funkcii ochreg máš premennú $sql, ktorú máš defaultne "false". Ani v jednom prípade si nenastavil na true, čiže Kód: if ($is_sql) { $input = mysql_real_escape_string ($input); } ti nikdy nič nespraví, pretože to je vždy false. Boolean dúfam vieš, čo je Salted hash - Keď máš obyčajný hash, najčastejšie md5, vznikne ti síce spätne nerozlúštiteľný string, ale sú databázy, kam hodíš ten hash a vypluje ti pôvodný výraz. Sú aj brute-force spôsoby na zistenie pôvodného hesla. Pridaním nejakého saltu môžeš rozlúštenie sťažiť. Príklad: Kód: $obycajny_hash = md5($_POST['heslo']); $salted_hash = md5($_POST['heslo'].'nejaký strašne dlhý text, ktorým to celé skomplikujem, najlepšie aj s nejakými neobvyklými bajtmi a znakmi a nikde ho nezverejním'); $iny_salted_hash = md5($_POST['heslo'].$_POST['meno']) $dalsi_sposob_ako_to_skomplikovat = md5(sha1($_POST['heslo']).nejaka_dalsia_hashovacia_funkcia($_POST['heslo']).crc32($_POST['heslo']))
_________________ 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.09.08 Prihlásený: 14.11.17 Príspevky: 225 Témy: 74 | 74 Bydlisko: Michalovce |
Trocha som googlil a hladal nieco k php injection. Chcem sa opytat este na jednu vec. Ak uz mam spravenu funkciu na ochranu
Kód: function ochreg ($input, $is_sql = false) { $input = htmlentities($input, ENT_QUOTES);
if(get_magic_quotes_gpc ()) { $input = stripslashes ($input); }
if ($is_sql) { $input = mysql_real_escape_string ($input); }
$input = strip_tags($input); $input = str_replace(" ", "\n", $input);
return $input; } je potrebne potom este davat/riesit ochranu cez htmlspecialchars/addslashes ? Napr. Kód: $meno= ochreg(htmlspecialchars(addslashes($_POST["meno"])));
Alebo je to totalna hlupost??
Fakt som v tomto smere uplny laik, tak privitam kazde normalne vysvetlenie..
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 | |
Registrovaný: 21.09.08 Prihlásený: 14.11.17 Príspevky: 225 Témy: 74 | 74 Bydlisko: Michalovce |
Ja viem ze ochrany nikdy nie je dost.. A tiez viem, ze na 100% sa mi nepodari nikdy zabezpecit web.. Ale ak by som taketo nieco pouzil v registracnom /prihlasovacom formulari a pod...ci by to postacovalo, alebo by to chcelo este nieco lepsie..
Jednoducho potrebujem nieco, co by maximalne eliminovalo nejake php injection a pod. na mojej stranke..
Som pozeral rôzne ochrany na nete a mam pocit, ze cim viac som toho pozrel, tym som zufalejsi. Totiz, vzdy ked som nasiel nejaku ochranu,tak o chvilu som narazil na clanok, kde bolo ako tu ochranu obist alebo jej nevyhody.
Fakt uz neviem co pouzit.
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Nj, to je schizofrénia jak hovado robiť bezpečnosť. Musíš si spraviť tézu a rovno aj antitézu (neviem, čo znamenajú tie slová, len sa mi páčia )
Nie je univerzálna funkcia, ktorou zabezpečíš všetko. Sú rôzne typy bezpečnostných dier. Na každú musíš použiť niečo iné. Na SQL injection nemôžeš použiť to isté, čo na XSS a pod.
Najľahšie sa dá asi predísť PHP injection. Keď máš nejaké súbory pre každého užívateľa iný, pristupovať k nim budeš iba na základe id-čka súboru, id-čka užívateľa alebo tak nejak.
Pomôcť ti dosť môžu regular expressions (funkcie preg_*, ereg_*). Napríklad to môžeš použiť pri tej registrácii tak, že zakážeš všetky znaky okrem písmen a zadáš maximálnu dĺžku. A tým máš vybavené XSS, sql aj php injection, buffer overflow... všetko. Podobne by si mohol narábať s heslami. Vždy pracuj iba s hashmi a máš po probléme s sql injection, pretože string obsahujúci iba čísla a písmena A-F nemôže nijako ublížiť.
Na bezpečnosť sa skús pozerať skôr komplexnejšie, nie hľadať univerzálnu funkciu, ktorá vyrieši všetky nočné mory. Bude trvať, kým sa to všetko naučíš. Aj tak to nikdy nebude všetko, pretože chyby sa hľadajú stále nové a nové.
_________________ 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: 8 ] | |
|