« 1 2 »
Autor Zpráva
bicebs
Profil
Chcel by som sa opýtať či stačí mať zašifrované heslo a ip používateľa v databáze. A či mám dosť zabezpečenú stránku http://malybicebs.php5.sk/ . Robil som to podľa http://war3zone.eu/viewforum.php?f=564 . Ak poznáte seriál tvorba webu a myslíte že tam je nejaká bezpečnostná chyba tak na ňu upozornite. Aby tam neboli používatelia s rovnakými menami som to upravil a upravovanie článkov asi radšej odstraním.
Marschmallow
Profil
bicebs:
Hmm, nepatří to do kategorie "Jak něco udělat?", případně do "Knihy, články a návody"?
lionel messi
Profil
1. Prvé načítanie mi vyhodí krásnu PHP chybovku: Notice: Undefined index: aktualna_stranka in /www/sites/1/site21011/public_html/clanky/vypis_strucny.php on line 3 . Výpis chýb na ostrom serveri do stránky má byť VŽDY VYPNUTÝ.
2. Registračný formulár nie je odolný voči SQL Injection: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1 - 1064 (chcel som sa zaregistrovať menom 'jozo).

Ďalej sa mi to nechce skúmať, bezpečnosť stránky vyzerá dosť hrôzostrašne už za 2 minúty špárania sa v tom.


3. Prečo prejde kontrolou v registračnom formulári e-mailová adresa: bla? Nemusí ísť o superdokonalú kontrolu, ale nech adresa obsahuje aspoň zavináč.
4. O minimálnej dĺžke hesla je slušné informovať ešte pred vyplnením hesla, tým skôr, že po zlom vyplnení je formulár zahodený a musím ho vypisovať odznova.

Vrelo odporúčam začať od začiatku. Prečítať si niečo o pojmoch XSS/SQL Injection a potom sa púšťať do registrácie.
Destiny_1
Profil
V registraci neescapujete vstupní data, tak by vám někdo mohl klidně smazat celou databázi
bicebs
Profil
lionel messi:
Toto prvé viem a vypnem to až keď to bude hotové. Ostatné chyby sa pokúsim opraviť zajtra ak by ste našli ďalšie budem rád.
lionel messi
Profil
Asi pred 30 minútami som sa zaregistroval na skutočný e-mail, aktivačný kód nechodí a tipujem, že ani nedorazí…


bicebs:
Toto prvé viem a vypnem to až keď to bude hotové.
Odporúčam okamžité vypnutie — vyzerá to veľmi amatérsky, bežný návštvník hlášku nepochopí, nezaujíma ho, profík by to eventuálne mohol dokonca zneužiť.
bicebs
Profil
Destiny_1:
To escapovanie mám opraviť mysql_real_escape_string takto? A pri prihlásení to je v poriadku?
lionel messi
Profil
bicebs:
To escapovanie mám opraviť mysql_real_escape_string takto?
Ak používaš (mimochodom už zastaralú db) MySQL, tak hej.

A pri prihlásení to je v poriadku?
Nevieme, daj nám nejaké testovacie údaje, aktivačný kód, kt. mi mal prísť na mail po vyplnení reg. formulára si dáva načas.
Destiny_1
Profil
bicebs:
Ano, přesně tak. Všechny sql dotazy které obsahují proměnné, nad kterými nemáte úplnou kontrolu, by jste měl ošetřit funkcí mysql_real_escape_string
Bubák
Profil
lionel messi:
aktivačný kód, kt. mi mal prísť na mail po vyplnení reg. formulára si dáva načas
Použil jsem 10minutemail.com a aktivační kód přišel asi za čtvrtminutu.
Kdo chcete testovat, nick je baraba a heslo 123456.
bicebs
Profil
lionel messi:
Ešte to nemá slúžiť návštevníkom ale len mne aby som to dokončil a až zariadim vlastnú doménu a ostatné veci tak to vypnem. lionel messiAk používate napríklad azet tak vám nikdy nepríde neviem či to je problém hostingu ale tam to nefunguje.
lionel messi
Profil
bicebs:
Ak používate napríklad azet tak vám nikdy nepríde
Super správa, idem testovať, viď [#10] Bubák.


Ako som predpokladal, ochrana proti XSS je slabá (príklad), jednu sekciu sa mi podarilo presmerovať na Seznam.cz (neviem akú, zdá sa mi, že o tréningoch).
Kubo2
Profil
bicebs:
Ešte to nemá slúžiť návštevníkom ale len mne aby som to dokončil a až zariadim vlastnú doménu a ostatné veci tak to vypnem.
Nejde tu v podstate o to vypnúť si na ostrom serveri tie chybové hlášky, je to skôr len prevencia. Mal by si sa naučiť programovať tak, aby chyby a s nimi aj chybové hlášky vôbec nevznikali. Na Rôzne zbytočné ošetriteľné chyby u teba narážam na každom kroku, námatkovo viď napríklad Notice: Undefined index 'aktualna_stranka' a po skúšobnom zadaní vymyslenej hodnoty GET parametru aktualna_stranka (správny predpoklad) Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given.

lionel messi:
jednu sekciu sa mi podarilo presmerovať na Seznam.cz
Ty beťár :-)
bicebs
Profil
Pridal by tu niekto odkaz na stránky s informáciami ako tieto chyby opraviť?
Kubo2
Profil
bicebs:
Ošetrovať vkladané texty funkciou htmlspecialchars() pre zamedzenie vkladania HTML. Ak budeš v budúcnosti chcieť použiť réalne formátovanie vkladaného textu, buď zvolíš iný značkovací jazyk alebo sa vynájdeš aj s pomocou rôznych obmedzení pre HTML. :-)
lionel messi
Profil
XSS ošetríš tak, že užívateľský vstup, kt. vypisuješ, prejdeš pred výpisom funkciou htmlspecialchars($text, ENT_QUOTES);, prvý parameter je užívateľský vstup ($text samozrejme nahradíš premennou, akú používaš ty), druhý ENT_QUOTES sa postará o apostrofy.

SQL Injection ošetríš zavolaním príslušnej funkcie, pre MySQL teda mysql_real_escape_string.
Slark
Profil *
Nedoporučuji používat mysql_*, protože např. na 1 OR 1=1 ani mysql_real_escape_string nepomůže.
Kubo2
Profil
Slark:
na 1 OR 1=1 ani mysql_real_escape_string nepomůže.
Samozrejme, že pomôže. Aby sa to 1 OR 1 = 1 do dotazu vôbec malo šancu dostať, nemohla by byť funkcia mysql_real_escape_string() vôbec aplikovaná.
yFang
Profil
Slark:
Nedoporučuji používat mysql_*, protože např. na 1 OR 1=1 ani mysql_real_escape_string nepomůže.
Aby to něčemu vadilo, musel by tam být nějak ukončen string. Pokud zadám do dotazu string 1 OR 1=1 tak se nic neobvyklého nestane.
Tori
Profil
Slark:
na 1 OR 1=1 ani mysql_real_escape_string nepomůže.
To může být pravda v případě, že vstup escapuju jako řetězec, ale pak s ním pracuju jako s číslem, tj. bez uvozovek v SQL:
$sql = 'delete * from `users` where `id` = '.mysql_real_escape_string($_GET['smazat']); To ale není problém funkce, ale špatného kódu. Při standardním použití k tomu nedojde:
$sql = 'delete * from `users` where `id` = '.(int)$_GET['smazat'];
$sql = 'select * from `users` where `nick` = "'.mysql_real_escape_string($_GET['find']).'"';
bicebs
Profil
Toto je správne? echo htmlspecialchars("<td><a href='./clanky_pouzivatelov.php?aktualna_stranka=1'><<</a></td>");


Alebo takto? $stranka = htmlspecialchars($_GET["aktualna_stranka"], ENT_QUOTES);
bicebs
Profil
A toto?
<form action="<?php $PHP_SELF; ?>" method="POST">  
      <table>
        <tr><td>Nick:</td><td><input type="text" name="nick" value="<?php echo htmlspecialchars $_POST['nick']; ?>" /></td></tr>
mimochodec
Profil
bicebs:
<tr><td>Nick:</td><td><input type="text" name="nick" value="<?php echo htmlspecialchars $_POST['nick']; ?>" /></td></tr>

Chybí tam závorky.
Kromě toho bych doporučoval něco jako $frm_nick = htmlspecialchars ($_POST['nick']); a dál používat $frm_nick. Zpřehledňuje to kód a snižuje možnost udělat chybu.
bicebs
Profil
mimochodec: Ja už používam "nick" tak to nechcem meniť a teraz to už je v poriadku? :
<tr><td>Nick:</td><td><input type="text" name="nick" value="<?php echo htmlspecialchars ($_POST['nick'], ENT_QUOTES); ?>" /></td></tr>
A tie ostatné príklady?
lionel messi
Profil
bicebs:
Bezpečnejšie je <form action="">. $_SERVER["PHP_SELF"] je podstrčiteľné zvonku. Keď už tak <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);, ale prvý spôsob je kratší a bohate stačí. Navyše, register_globals sú od PHP tuším 4.3 defaultne off a dôrazne neodporúčam zapnutie, ide o ideálny spôsob, ako pohnojiť celú bezpečnosť.

Ošetrenie inputu ok.
bicebs
Profil
lionel messi:
A to htlmspecialchars mám použiť aj takto? $stranka = htmlspecialchars($_GET["aktualna_stranka"], ENT_QUOTES);
lionel messi
Profil
bicebs:
A to htlmspecialchars mám použiť aj takto?
Áno, myslím, že tým nič neskazíš.
bicebs
Profil
Stačí iba takto upraviť texty vkladané používateľmi <tr><td>Nick:</td><td><input type="text" name="nick" value="<?php echo htmlspecialchars ($_POST['nick'], ENT_QUOTES); ?>" /></td></tr> a veci vkladané do databázy $dotaz2 = mysql_query("SELECT * FROM uzivatele WHERE nick='".mysql_real_escape_string($nick2)."' AND heslo='".mysql_real_escape_string($heslo2)."' AND autorizovan='1' ;"); ?
anonymníí
Profil *
lionel messi:
Bezpečnejšie je <form action="">
A co takhle atribut action vynechat, když ho nepotřebuješ? Není nutné ho do kódu z každou cenu psát. Myslel jsem, že éra prázdných actionů a altů, které byly v kódu jen, aby tam byly (protože někdo někdy někde řekl/napsal, že by tam být měly), je pryč.
lionel messi
Profil
bicebs:
Vyzerá to bezpečne, nemáme k dispozícii celý kód, ale žiadnu dieru tam nevidím.

anonymníí:
A co takhle atribut action vynechat, když ho nepotřebuješ?
O tejto možnosti som nevedel, vďaka za doplnenie.
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0