PHP (96) - (ne)bezpečné PHP
Lze PHP považovat za bezpečnou záležitost? A pokud ano, co se pro to dá udělat?
26.1.2005 15:00 |
Petr Zajíc
| Články autora
| přečteno 37041×
Přestože jsme se určitým aspektům zabezpečení PHP věnovali průběžně,
budou celé následující dva díly seriálu věnovány bezpečnosti. Že je to
potřeba udělat, o tom mě přesvědčily komentáře čtenářů a spousta dotazů
jak od programátorů v PHP, tak od správců serverů. Dnes se podíváme na
víceméně na serverovou část problematiky. Tedy - co udělat, aby nám
provoz PHP na serveru nekompromitoval jeho bezpečnost. Budu se věnovat
jen věcem, které úzce souvisejí s PHP. Administrátoři webů mají
pochopitelně mnohem širší arzenál zbraní, protože mohou nastavovat
takové věci jako práva k souborům či webový server.
Žonglování se čtyřmi míčky
Umíte žonglovat se čtyřmi míčky? (Já ne). Zabezpečit PHP se tomu
trochu podobá, protože do hry vstupují čtyři faktory, které se vzájemně
víceméně vylučují, a přitom všechny čtyři mají vliv na to, zda a jak
bude aplikace PHP zabezpečena. Uvědomme si, že se při úvaze o
bezpečnosti serveru se jedná o programátory
v PHP, uživatele našich
aplikací, administrátora webu,
na kterém to
poběží a o případné útočníky.
Programátor
Programátor by si samozřejmě přál, aby PHP umělo co nejvíce věcí a aby
šly napsat rychle a snadno. Pro programátora je zajímavé, když mu někdo
s prací pomůže - použitím externí knihovny či funkce třetí strany může
nezřídka získat spoustu času na vývoj něčeho jiného (nebo na dohnání
časového plánu). Programátor chápe, že PHP se musí zabezpečit a má v
ruce některé velmi dobré nástroje, které mu v tom mohou pomoci. Někdy
však programátor vědomě či nevědomě zabezpečení aplikace podcení -
třeba když mu hoří časový plán, když nemá dost peněz na vývoj nebo když
si něčeho nevšimne.
Uživatel
Uživatel by chtěl aplikaci co možná nejjednodušší. Běžný uživatel
problém bezpečnosti nevnímá příliš zblízka; bude jej obtěžovat, pokud
bude například přihlašování do aplikace příliš složité. Jestliže však
uživatel vinou nějaké bezpečnostní chyby přijde o data (nebo ještě lépe
- pokud přijde o peníze), začne si problém související s bezpečností
uvědomovat velmi palčivě. Takový zákazník je potencálně velmi zajímavý
- není pak pro něj problém pochopit, že psaní kvalitních a bezpečných
aplikací je drahé, ale nezbytné.
Administrátor
Typický správce se samozřejmě nastará pouze o samotné PHP, stará se o
celý stroj nebo o více strojů a jeho prvotním zájmem je, aby systém
neměl pokud možno žádné bezpečnostní slabiny jako celek. Samozřejmě, že
ruku v ruce s tím jde druhý, protichůdný požadavek - aby zabezpečení
webu mohl nějak automatizovat a aby mu to nezabralo příliš mnoho času.
Administrátor si uvědomuje, že úšpěšný útok na jeho server by mohl
poškodit nejen data konkrétního uživatele, ale rovněž pověst firmy, pro
kterou pracuje, nebo jeho vlastní renomé.
Pozn.: A taky je to jenom člověk.
Útočník
Typický útok na webové sídlo nebude pravděpodobně veden touhou
zlikvidovat konkrétního uživatele. Útočník si může vybrat pro svou
nekalou činnost weby, u nichž najde nějakou bezpečnostní slabinu nebo
weby, jejichž prolomením si získá jméno. Líbilo by se mu, kdyby
existovala bezpečnostní díra, pomocí níž by se mohl do systému dostat -
a jako jediný z těch čtyř má na své straně čas.
Přestože asi nebudete chtít vycházet vstříc útočníkům, vidíte, že i
ostatní tři strany mají víceméně odlišné priority. Správné zabezpečení
PHP je tedy určitý kompromis - mazi možností něco napsat, něco používat
a rovněž to spravovat. Jak ale uvidíme, lze pro zabezpečení PHP přece
jen něco udělat.
Verze PHP
V době psaní tohoto článku byla stabilní verzí PHP 4.3.10.
Administrátor pravděpodobně bude mít pádný důvod instalovat na server
nejnovější stabilní verzi PHP, protože právě objevení bezpečnostích děr
bývá častým důvodem k vydání nové verze jazyka. Obecně toto tvrzení
platí i pro jiné součásti systému. Nebývá to však vždy tak jednoduché,
jak by se mohlo na první pohled zdát; tak například dvě nejnovější
verze nějakého software spolu nemusejí správně spolupracovat, přestože
předchozí dvě verze s tím neměly žádný problém.
Rovněž tak bývá problém najít administrátora, ochotného instalovat a
spravovat úplně nejnovější zveřejněnou verzi software (v případě PHP je
to v době psaní tohoto článku verze 5.0.3. Důvodem je to, že v
nejnovějších verzích se mohou vyskytovat chyby.
Zakázané funkce
Administrátor může rovněž některé funkce v PHP zakázat. Pro zvídavé
- děje se tak pomocí konfigurační direktivy disable_functions v souboru
php.ini. Typickými kandidáty na takové funkce jsou například funkce pro
vykonání příkazů operačního systému a funkce na správu konfigurace (system,
exec, passthru, leak, Set_Time_Limit, copy, delete, popen, PutEnv,
shell_exec a podobně). Konfigurační direktivu disable_functions lze
použít pouze v php.ini, nelze ji tedy specifikovat ani uvnitř skriptu,
ani pro danou složku.
Význam zákazu některých funkcí je jasný - zabránit skriptům v
provedení akcí, které by neměly umět.
Safe_mode
Safe mode, neboli bezpečný režim je pokus o zabezpečení PHP (zejména
na sdílených hostinzích) prostředky, které má PHP k dispozici.
Filozofie je to diskutabilní, protože se pokouší pomocí jednoho programu (PHP) ovlivnit bezpečnost
systému. Takže, například,
někdo může získat falešný pocit, že zapnutím zabezpečeného režimu PHP
má na serveru po starostech - tak to samozřejmě není. Konkrétní význam
bezpečného režimu je spíše otázka pro administrátory - my se teď pojďme
podívat, jaká omezní v případě tohoto režimu nastupují:
- Existují omezené
funkce nebo funkce, které se provedou jen v určitém případě
- Bez ohledu na nastavení konfigurační direktivy disable_fuctions
jsou zakázány funkce dl a shell_exec
- Funkce exec, system, passtrhu a popen jsou omezeny na ty
programy, které existují ve stanoveném adresáři. Stanovený adresář je
adresář, definovaný konfigurační direktivou safe_mode_exec_dir.
- Funkce pro práci se soubory (jako jsou copy, rename, unlink
apod.) kontrolují, zda soubory (adresáře), které se pokoušíte měnit,
mají stejného vlastníka jako spouštěný skript.
Pakliže mám chvíli mluvit jako programátor - někdy je zabezpečený
režim zkutečně k vzteku. Tak například typický scénář je ten, že
skripty nahráváte na webový server pomocí protokolu FTP. Snadno se tedy
může stát, že vlastníkem skriptů je na serveru někdo jiný než vlastník
souborů, které skripty vytváří nebo které mají měnit. Všechny operace
se soubory je v takovém případě třeba otestoavat kvůli právům.
Pozn.: Jiné dobré řešení je
provádět co možná nejvíce operací samotnými skripty a co možná nejméně
pomocí FTP. I upload souboru může být proveden skriptem a odpadají tak
problémy s právy.
Příště se podíváme na bezpečnost souborů, databází, hesel a
uživatelských dat.
Verze pro tisk
|
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|