Autor | Zpráva | ||
---|---|---|---|
bicebs Profil |
#1 · Zasláno: 11. 9. 2014, 17:54:19
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 |
#2 · Zasláno: 11. 9. 2014, 17:59:08 · Upravil/a: Moderátor (editace znemožněna) 12. 9. 2014, 10:34:39
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 |
#4 · Zasláno: 11. 9. 2014, 18:00:20
V registraci neescapujete vstupní data, tak by vám někdo mohl klidně smazat celou databázi
|
||
bicebs Profil |
#5 · Zasláno: 11. 9. 2014, 18:45:29
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 |
#7 · Zasláno: 11. 9. 2014, 18:47:48
Destiny_1:
To escapovanie mám opraviť mysql_real_escape_string takto? A pri prihlásení to je v poriadku? |
||
lionel messi Profil |
#8 · Zasláno: 11. 9. 2014, 18:51:14
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 |
#10 · Zasláno: 11. 9. 2014, 19:30:42
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 |
#11 · Zasláno: 11. 9. 2014, 19:30:51
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 |
|||
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 |
#15 · Zasláno: 11. 9. 2014, 20:00:19
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 |
#16 · Zasláno: 11. 9. 2014, 20:00:38
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 * |
#17 · Zasláno: 11. 9. 2014, 22:43:29
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 |
#19 · Zasláno: 11. 9. 2014, 23:55:07
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 |
#20 · Zasláno: 12. 9. 2014, 01:15:58
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 |
#21 · Zasláno: 12. 9. 2014, 10:34:53 · Upravil/a: bicebs
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 |
#22 · Zasláno: 12. 9. 2014, 11:36:33
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 |
#23 · Zasláno: 12. 9. 2014, 11:40:41
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 |
#26 · Zasláno: 12. 9. 2014, 11:54:49
lionel messi:
A to htlmspecialchars mám použiť aj takto? $stranka = htmlspecialchars($_GET["aktualna_stranka"], ENT_QUOTES); |
||
lionel messi Profil |
#27 · Zasláno: 12. 9. 2014, 11:59:34
bicebs:
„A to htlmspecialchars mám použiť aj takto?“ Áno, myslím, že tým nič neskazíš. |
||
bicebs Profil |
#28 · Zasláno: 12. 9. 2014, 12:07:30
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 * |
#29 · Zasláno: 12. 9. 2014, 12:07:30
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 |
#30 · Zasláno: 12. 9. 2014, 12:10:46
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. |
||
Téma pokračuje na další straně.
|
0