NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 18 - Tvorba knihoven v PHP

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
mapak
Člen
Avatar
mapak:20.1.2014 9:14

Ahoj! Opět super díl super seriálu! Jen si dovolím poznámku k prvnímu příkladu - Knihovna pro práci s emaily. Deklarace proměnné $predmet uvnitř funkce je tam trochu navíc, když ji uživatel zadává jako parametr.

 
Odpovědět
20.1.2014 9:14
Avatar
jnao01
Člen
Avatar
jnao01:29.1.2014 19:22

Zdravím,
celkom pekný tutoriál a už idem na ďalší, len som chcel upozorniť na chybu v kóde v analyza.php.

 echo('<tr><td>Samohlásek</td><td>' . htmlspecialchars($samohlasek) . '</td></tr>');
echo('<tr><td>Samohlásek</td><td>' . htmlspecialchars($souhlasek) . '</td></tr>');

V tom druhom má byť Souhlasek a ty tam máš v oboch Samohlásek. ;)

Editováno 29.1.2014 19:23
 
Odpovědět
29.1.2014 19:22
Avatar
jnao01
Člen
Avatar
jnao01:29.1.2014 19:29

Ešte som sa chcel opýtať prečo používaš funkciu

htmlspecialchars($samohlasek)

nestačilo by tam dať len premennú?

$samohlasek
Editováno 29.1.2014 19:29
 
Odpovědět
29.1.2014 19:29
Avatar
Odpovídá na jnao01
Michal Žůrek - misaz:29.1.2014 19:30

je to kvůli injekci, uživatel by ti tam mohl napsat script.

 
Odpovědět
29.1.2014 19:30
Avatar
Kubo2
Neregistrovaný
Avatar
Kubo2:31.1.2014 10:52

Chcel by som autora upozorniť na zbytočný balast v kóde súboru analyza.php (teďka pozerám, že už na to ktosi upozornil) – pri vypisovaní premenných $samohlasek a $souhlasek sú zbytočne prehnané funkciou na ošetrovanie prípadného HTML vstupu od užívateľa + ich datový typ je integer, pretože to je iba výsledok nejakej operácie so vstupom, takže na nich nie je čo ošetrovať :-)

 
Odpovědět
31.1.2014 10:52
Avatar
Odpovídá na Michal Žůrek - misaz
Libor Šimo (libcosenior):31.1.2014 11:07

Misaz, verím, že je to možné, ale mohol by si prosím uvieť nejaký konkrétny príklad injekcie?

Odpovědět
31.1.2014 11:07
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:31.1.2014 11:15

Ošetřovat je třeba všechny proměnné těsně před výpisem. V PHP si typem nikdy nemůžeš být jistý a stejně tak si nemůžeš být jistý co se v té proměnné objeví za hodnotu. Že by to zrovna v tomto případě nevadilo neznamená, že se to nemá ošetřovat, určitě to není balast.

Odpovědět
31.1.2014 11:15
New kid back on the block with a R.I.P
Avatar
mkub
Tvůrce
Avatar
Odpovídá na
mkub:31.1.2014 11:49

ako sdraco pise, treba premenne testovat pred vypisom, vylucne vsetky tie, do ktorych sa zaznamenavaju vstupy uzivatela (hovori ti nieco cross site scripting, resp. SQL injection?)

 
Odpovědět
31.1.2014 11:49
Avatar
Kubo2
Neregistrovaný
Avatar
Odpovídá na David Hartinger
Kubo2:31.1.2014 20:23

sdraco:

S tým, čo si napísal, rozhodne nemôžem súhlasiť. Ošetrovať stačí vždy iba tie vstupy, ktoré si získal (to je jedno kedy, či týmto konkrétnym požiadavkom alebo hociktorým predchádzajúcim) priamo od používateľa, kedy si nemôžeš byť vôbec istý tým, čo ti od neho príde (úplne najmenej, čo by si mal urobiť, ak chceš so vstupom pracovať, je otestovať, či vôbec existuje, resp. či je prázdny; pri type dát posielaných z formulára, t.j. application/x-www-form-urlencoded je teoreticky vhodné zároveň testovať, či je premenná reťazec, pretože pridaním [] za názov posielanej premennej z nej môže používateľ vytvoriť v PHP pole).

Ďaľšia vec, v PHP si typom môžeš byť práve taký istý ako príkladne v C#, Jave či Pythone. Vo funkcii pocetZnaku si inicializuješ premennú $pocet hodnotou 0. Táto hodnota je typu integer. Premenná, do ktorej zmienenú hodnotu ukladáš, je rovnež tohoto typu (ako iste vieš, v PHP nadobúda premenná typ podľa toho, čo do nej uložíš). V kontexte tejto funkcie túto premennú nikde nepretypuješ ani do nej nepriraďuješ hodnotu iného typu. Funkcia vráti jej hodnotu typu integer. V obidvoch funkciách pocetSamohlasek aj pocetSouhlasek (slovensky spoluhlások) priamo vraciaš návratovú hodnotu funkcie pocetZnaku, žiadnym spôsobom ju nemodifikuješ. Povedz mi jediný dôvod, prečo by si si nemal byť istý, že pri zavolaní jednej z týchto troch funkcií ti vrátia hodnotu typu integer?

Hodnotou, narozdiel od typu, si nemôžeš byť istý v žiadnom programovacom jazyku, takže tento argument sa mi javí ako bezpredmetný.

Že to nie je balast? Tak balast to určite je, to ti teda poviem. Hľadiac na tvoje argumenty ťa radím medzi tých ľudí, ktorí prehnane (a zbytočne) ošetrujú všetko, čo sa týka I/O, pretože nepochopili správne (alebo vôbec) dôvody, prečo, kedy a ako sa dáta majú ošetrovať.
Totiž stačí si uvedomiť, že napríklad vstupy, ktoré sa chystáme uložiť a vypisovať, je potrebné takmer vždy ošetriť proti tomu, aby užívateľ mohol do tohoto vstupu (a následne na výstup) vpisovať rôzne HTML značky.
Keď máme zase vstup, ktorý chceme použiť do SQL dotazu, musíme ho ošetriť prednostne escapovaním apostrofov, aby si užívateľ nemohol dopísať vlastný SQL dotaz.
A tak ďalej. Existujú zástupy konkrétnych situácií, v ktorých sa vstup ošetruje vždy špecificky (keď chcem vypisovať dáta na stránku, nebudem ich ošetrovať proti SQL Injection).

Môj predošlý komentár bol reakciou na to, že si v podstate úplne zbytočne ošetril číslo, ktoré vôbec ošetrovať nebolo potrebné - získal si ho totiž od vlastnej funkcie, v ktorej si môžeš byť istý tým, čo do nej napíšeš. Ak si tým istý nie si, vráť sa k základom PHP.

Nakoniec otázka trošku mimo témy: Kto ťa učil informatiku na Unicorn College? Respektíve kto ťa učil PHP?

mkub:

Sakra, vy dvaja s sdracom si fakt pekne protirečíte. Aký vstup používateľa sa zaznamenáva do premenných $znaku, resp. $samohlasek, resp. $souhlasek?

XSS a SQL Injection samozrejme poznám. Keďže programujem prevažne v PHP, kde sa človek pomerne často potýka s databázami a hlavne sa v ňom programujú webové aplikácie, stáva sa to mojou cirka každodennou kávou ;-)

 
Odpovědět
31.1.2014 20:23
Avatar
Jiří Jeřábek (thechorcheecz):15.3.2014 0:01

Zdravím, super tutoriál, jen bych se chtěl zeptat takovou maličkost, jak by se ta věta, kterou napíšeme ještě vypsala nadto? abychom viděli co jsme napsali za větu a nadtím počet znaků,atd...
Díky moc

 
Odpovědět
15.3.2014 0:01
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 45.