poznáme.it Bezpečnosť Bezpečnosť webových aplikácii v praxi II. – Zakliaty PHP upload – Best...

Bezpečnosť webových aplikácii v praxi II. – Zakliaty PHP upload – Best Practices

V minulom blogu sa na mna zviezla spŕška kritiky za nie úplné používanie best practices. Moja chyba.  Teraz si dáme viac teórie ako praxe a svoje zaváhanie napravím, snáď. Pokračujeme teda pri našom uploade, a v skratke si vysvetlíme, aké teda tie “best practices” pri písaní webu, v našom prípade pri písaní uploadu, sú.

Ako prvé by nám malo byť jasné, čo všetko sa môže stať, ak tomu nepriradíme výraznejšiu váhu, a vykašleme sa na zabezpečenie. Ak sa na to pozrieme, tak vplyv tejto chyby je naozaj rozsiahly, no je tu nízka pravdepodobnosť, takže ak to zaradíme do priečinka “Stredne nebezpečné”, tak myslím, že sa veľmi nezmýlime. V minulom blogu ste mali niekoľko názorných príkladov z praxe. Ale určite to nie sú všetky.

Aké sú teda riziká ?

  • Útočník môže poškodiť náš web
  • Ak nemáme zabezpečenú funkciu, ktorá chráni server pred vykonávaním shell príkazov pomocou napríklad “.php” scriptov, môže si to “odniesť” aj konfigurácia servera
  • Útočník môže vložiť na web kód, za pomoci ktorého spustí inú formu útoku, napríklad XSS
  • Útočník môže na web vložiť falošnú stránku, takzvanú “phishing page” a vydávať sa za prevádzkovateľa webu
  •  Taktiež je možnosť, že sa server obete premení na warez, alebo web plný “vírusov”
  • Nahraný škodlivý súbor môže napríklad aj odstaviť z prevádzky anti-vírusovú ochranu či iné real-time procesy

Rizík je tu skutočne dosť, možno som na nejaké zabudol, ale myslím, že pre ozrejmenie problematiky to stačí.

Slabé alebo zlé zabezpečenie…

Tu hneď spomeniem príklad z minulého blogu, ktorý mi ľudia najviac vytýkali. Áno, mám na mysli používanie black-listu namiesto white-listu prípon.

Pre naše vtedajšie demonštračné účely to stačilo, no chápem rozhorčenie zo strany iných vývojárov, takže si túto problematiku rozmeníme na drobné, pekne po poriadku.

Prečo nepoužívať black-list?

  • Je tu obrovská možnosť, že zabudnete na nejaké prípony, prípadne existujú prípony, o ktorých ste ani nevedeli. Sám som na niektoré zabudol. Prípony ako .php5 .phtml .php4 a podobne nie sú bežné a preto s nimi ľudia často nerátajú.
  • Niekedy stačí ak namiesto .php prípony napíšeme .pHP a script dostaneme na server
  • Niekedy sa nám môže podariť obísť zabezpečenie jednoduchým pridaním bodiek a medzier za príponu súboru. Príklad ( script.php…. ….. … ..; script.php.) …
  • Server môže použiť prvú príponu, ktorá nasleduje za bodkou a podľa nej zistiť, či je súbor bezpečný alebo nie. Toto však dokážeme oklamať relatívne jednoducho a to tým, že súbor pomenujeme napríklad script.php.jpg
  • ďalšou možnosťou ako prepašovať súbor na server je použiť najslávnejší znak NULL (0x00) po prípone, ktorá je zakázaná a pred príponou, ktorá je povolená. Pri spracovaní súboru sa táto prípona za znakom NULL odstráni. Príklad script.php%00.jpg

Týchto dier je ešte oveľa viac, ale sám nepoznám všetky. Takže tie, ktoré poznám, som vám napísal, ostatné si verím jednoducho dohľadáte na internete.

Prečo nepoužívať LEN white-list

White-list patrí k “best practices”, ale sám o sebe nestačí. Veľa spôsobov, akými sa dá obísť, je totožných s black-listom, no je bezpečnejší.

Rovnako ako pri black-liste môžete na príponu zabudnúť, tak tu sa môžete pomýliť a pridať príponu, ktorá tam nemá čo robiť. Príklad shtml, ktorá povolí útok pomocu SSI. Viac o SSI na tomto linku: https://www.owasp.org/index.php/Server-Side_Includes_(SSI)_Injection

Prečo nepoužívať Content-Type z Headeru?

Prečo nepoužívať overenie pre Content-Type, sme si povedali aj názorne ukázali v minulom blogu, takže to môžem myslím vynechať.

Tipy ako sa brániť, alebo ako spraviť aplikáciu bezpečnejšou

  • Nikdy nenechajte váš skript akceptovať súbor bez overenia prípony pomocou white-listu
  • Ideálne je, ak skontrolujete, čo obsahuje názov súboru a odstránite všetky znaky, ktoré tam nemajú čo hľadať ako napríklad: “;”, “:”, “>”, “<”, “/” ,”\”,”$”,”?”… A v názve zostanú len alfanumerické znaky s jednou bodkou.  Príklad regexpu ( [a-zA-Z0-9]{1,200}\.[a-zA-Z0-9]{1,10})
  • Ideálne je limitovať dĺžku názvu súboru na maximálne 255 vrátane prípony
  • Ideálne je premenovať súbor po uploade, napríklad použiť SHA1 hash názvu ku ktorému pripojíte čas a dátum, kedy bol súbor nahratý
  • Priečinok, do ktorého uploadujete súbory, by nemal byť priamo prístupný!
  • Nastavte si rovnako tak kontrolu na veľkosť súboru alebo jeho rozmery (ak ide o obrázok), stanovte si maximálne rozmery a eliminujte možnosť  warezu
  • Používajte CSRF (Cross Site Request Forgery) tokeny pri posielaní formulárov (toto platí aj pre obyčajné formuláre)
  • Chráňte súbory pred prepísaním iným súborom s rovnakým hashom
  • Skúste použiť skôr POST metódu než PUT (GET)
  • Ak je to možné, zaznamenávajte si akcie používateľov. Ľahšie sa dopátrate k nekalým aktivitám.

Tipov by tu mohlo byť ešte o niečo viac, no myslím, že ak dodržíte tie čo som vám tu napísal, všetko by malo byť v poriadku, až kým niekto nepríde s novým spôsobom ako vám uškodiť.

Tento článok je viac teoretický, lebo po minulej skúsenosti, keby som chcel ku všetkému tomuto dať príklad a napísať kompletne celý blog s príkladmi a každú jednu možnosť, tak by mal blog minimálne 15 strán.

Ďalej sa budem venovať XSS a hlavným problémom, ktoré môžu spôsobiť, to už bude aj s príkladmi.


Dobrý článok? Chceš dostávať ďalšie?

Už viac ako 6 200 ITečkárov dostáva správy e-mailom. Nemusíš sa báť, nie každé ráno. Len občasne.



Súhlasím so spracovaním mojich osobných údajov. ( Viac informácií. )

Tvoj email neposkytneme 3tím stranám. Posielame naňho len informácie z robime.it. Kedykoľvek sa môžeš odhlásiť.

SAP CRM Consultant

PRÁCA Pozícia: SAP CRM Konzultant Pracovný pomer: TPP, Contract Miesto práce: Bratislava, on-site Plat: Junior - od 1.200 EUR/Brutto Senior - od 2.000 EUR/Brutto Kontrakt: od...

Solution Architect

Pozícia: Solution Architect Typ Zmluvy: TPP Plat: od 3000+ EUR/Brutto Lokalita: BratislavaMedzinárodná spoločnosť, ktorá poskytuje poradenské a IT služby pre firmy hľadá...

Automation Tester (Python/Selenium)

Pre slovenskú spoločnosť, hľadáme IT-čkára na pozíciu Automation Tester (Python/Selenium).Práca je v Bratislave na TPP s odmenou od 1500...

PHP Developer s možnosťou naučiť sa Perl

Pre slovenskú spoločnosť hľadáme PHP Developera.Práca je v Bratislave na TPP s odmenou od 1800 EUR/Brutto.Spoločnosť rozširuje svoj PHP/Perl...

QA Automation Engineer / Mobile App For Diabetes

Basic informationPosition: QA Automation Engineer Contract Type: Full-Time Employee or Contractor Location: Vienna (4 Days/Month remote) / 1 hour drive from...

Senior iOS Software Engineer / Develop a mobile app for diabetics

Basic informationPosition: iOS Developer Contract Type: Full-Time Employee or Contractor Location: Vienna (4 Days/Month remote ) / 1 hour drive from Bratislava...

AI and Machine Learning Algorithms Architect / Researcher

JOB Position: AI and Machine Learning Algorithms Architect / Researcher Contract type: TPP Location: Bratislava, Košice Salary: from 2 800 EUR/Brutto/months Benefit: Relocation PackageAbout Company:US...

IT memes

Ako ja vnímam IT memes/meme/memky/memečka (ako len chceš)? It jokes? To sa dozvieš v tomto článku kde...

Miroslava Szabo: IT mi pomohlo nájsť moje miesto v spoločnosti

Miroslava pochádza z východného Slovenska, vyštudovala Ekonomickú univerzitu. Žije v Kodani, kde študuje na škole HackYourFuture, ktorá...

Slovensko.Digital: Otvorený list o situácii na FIIT STU

Vážený pán Minister školstva, vedy, výskumu a športu SR, Rektor Slovenskej technickej...

Čítaj ďalej:

Dobrý článok? Chceš dostávať ďalšie?

Už viac ako 6 200 ITečkárov dostáva správy e-mailom. Nemusíš sa báť, nie každé ráno. Len občasne.

Súhlasím so spracovaním mojich osobných údajov. ( Viac informácií. )

Tvoj email neposkytneme 3tím stranám. Posielame naňho len informácie z robime.it. Kedykoľvek sa môžeš odhlásiť.