[ Príspevkov: 8 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.09.08
Prihlásený: 14.11.17
Príspevky: 225
Témy: 74 | 74
Bydlisko: Michalovce
NapísalOffline : 28.09.2008 14:34 | Pomoc, kontrola

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


Offline

Skúsený užívateľ
Skúsený užívateľ
Pomoc, kontrola

Registrovaný: 09.07.08
Prihlásený: 17.01.15
Príspevky: 1586
Témy: 96 | 96
NapísalOffline : 28.09.2008 16:11 | Pomoc, kontrola

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!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.09.08
Prihlásený: 14.11.17
Príspevky: 225
Témy: 74 | 74
Bydlisko: Michalovce
Napísal autor témyOffline : 28.09.2008 17:36 | Pomoc, kontrola

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


Offline

Skúsený užívateľ
Skúsený užívateľ
Pomoc, kontrola

Registrovaný: 09.07.08
Prihlásený: 17.01.15
Príspevky: 1586
Témy: 96 | 96
NapísalOffline : 28.09.2008 18:54 | Pomoc, kontrola

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!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.09.08
Prihlásený: 14.11.17
Príspevky: 225
Témy: 74 | 74
Bydlisko: Michalovce
Napísal autor témyOffline : 01.10.2008 12:54 | Pomoc, kontrola

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.. :roll:


Offline

Skúsený užívateľ
Skúsený užívateľ
Pomoc, kontrola

Registrovaný: 09.07.08
Prihlásený: 17.01.15
Príspevky: 1586
Témy: 96 | 96
NapísalOffline : 01.10.2008 13:05 | Pomoc, kontrola

podla toho, na aké účely. Že proti čomu to chceš použiť.
Ochrany nikdy nie je dosť.
Musím ťa upozorniť na buffer overflow v htmlspecialchars a htmlentities.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.09.08
Prihlásený: 14.11.17
Príspevky: 225
Témy: 74 | 74
Bydlisko: Michalovce
Napísal autor témyOffline : 01.10.2008 13:17 | Pomoc, kontrola

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. :cry:


Offline

Skúsený užívateľ
Skúsený užívateľ
Pomoc, kontrola

Registrovaný: 09.07.08
Prihlásený: 17.01.15
Príspevky: 1586
Témy: 96 | 96
NapísalOffline : 01.10.2008 13:34 | Pomoc, kontrola

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!
 [ Príspevkov: 8 ] 


Pomoc, kontrola



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Pomoc / kontrola PC zostavy

v PC zostavy

14

226

04.01.2015 18:05

Lessik

V tomto fóre nie sú ďalšie neprečítané témy.

!!!POMOC - KONTROLA ZOSTAVY 550€ !!!

v PC zostavy

3

195

17.12.2013 13:12

jumich

V tomto fóre nie sú ďalšie neprečítané témy.

Pomoc...Cyklicka redundantna kontrola

v Ostatné programy

14

1423

24.09.2009 23:31

shiro

V tomto fóre nie sú ďalšie neprečítané témy.

Prosím o pomoc pri odvírení - kontrola Hijack a wmav

v Bezpečnosť a firewally

18

1338

26.06.2008 7:37

pistabaci

V tomto fóre nie sú ďalšie neprečítané témy.

Kontrola

v PC zostavy

11

176

12.11.2012 11:42

RicK^

V tomto fóre nie sú ďalšie neprečítané témy.

kontrola

v Antivíry a antispywary

0

357

13.02.2010 16:15

stancoj

V tomto fóre nie sú ďalšie neprečítané témy.

Kontrola

v PC zostavy

12

288

04.09.2011 14:53

bindo000

V tomto fóre nie sú ďalšie neprečítané témy.

Kontrola

v PC zostavy

12

472

08.01.2009 22:37

Jaro

V tomto fóre nie sú ďalšie neprečítané témy.

Kontrola Logu

v Antivíry a antispywary

3

561

16.11.2007 22:12

Rbot

V tomto fóre nie sú ďalšie neprečítané témy.

kontrola LOGU

v Antivíry a antispywary

19

615

30.07.2012 19:01

personal compuper

V tomto fóre nie sú ďalšie neprečítané témy.

HijackThis - Kontrola

v Antivíry a antispywary

11

1042

03.06.2008 12:34

yaJohny

V tomto fóre nie sú ďalšie neprečítané témy.

kontrola rormulara

v JavaScript, VBScript, Ajax

1

230

13.10.2010 16:01

Ďuri

V tomto fóre nie sú ďalšie neprečítané témy.

Kontrola zostavy

v PC zostavy

5

261

08.01.2009 20:15

Spiritof69

V tomto fóre nie sú ďalšie neprečítané témy.

Kontrola striktnosti

v HTML, XHTML, XML, CSS

2

111

19.11.2012 18:55

shaggy

V tomto fóre nie sú ďalšie neprečítané témy.

Kontrola teplôt

v Benchmarky a diagnostické programy

8

295

31.03.2013 23:17

Filips

V tomto fóre nie sú ďalšie neprečítané témy.

Kontrola PC

v Antivíry a antispywary

2

1485

27.09.2007 21:01

Rbot



© 2005 - 2017 PCforum, edited by JanoF