Sigurnost PHP-a

17.12.2006.

Nedavno je na slashdotu bila vijest o otkazu Stefana Essera, PHP developera koji se brinuo o sigurnosti. Dosadilo mu je, kaže, da se stalno prepucava s kolegama oko toga da ne postoje sigurnosne rupe u PHP-u odnosno da je svaka kritika PHP sigurnosti dočekana na nož. "he had stopped counting the number of times he was called a traitor when he published a bug report on a vulnerability in PHP." Strašno. Također mu nisu dali da objavi neki vulnerability sve dok se ne pojavi zakrpa. S jedne strane razumljiva, a s druge neodgovorna praksa koja samo odgađa izdavanje zakrpi. Također iznosi jednu stvar koja me zabrinjava: prestaju updatei nad PHP4 serijom, koja se još uvijek masovno koristi.
Ono što on možda ne naglašava dovoljno, činjenica je da je glavni uzrok za toliki broj problema nastalih pri korištenju raznih php portala, foruma i sličnih isključivo nekompetentnost programera tih aplikacija pisanih u PHP-u, a ne core PHP-a. Kao što se PHP dobro opisuje: easy to learn, difficult to master, upravo je to stvorilo pravu vojsku kvazi PHP programera kojima je to prvi dodir s programskim kodom i koji ne ugrađuju nikakve provjere; "bitno da radi", em zato što ne znaju da treba, em zato što ih možda rokovi pritišću. I zato nastaju programi poput phpBB-a, PostNukea i sličnih, koji zadaju noćne more adminima. Još je jedan problem tih foruma: prejednostavni su za instalaciju i zato ih svatko može instalirati, ne misleći da se te aplikacije moraju redovito osvježavati novim verzijama. Također, neke stvari su inherentno nesigurne, a korisnici ih zahtijevaju, jer opet, kod nije dobro napisan. Primjer je register_globals, koji trga velik broj programa. Tu su i razne funkcije includeanja nekih URL-ova koje pak omogućuju pokretanje programa pod dozvolama Apache usera. Horor. Uopće je nebitno što taj user ne može doći do roota, kad se od njega mogu pokretati razni napadi, a čak sam doživio da se ostavlja dump divxa i koristi za potrošnju bandwidtha.
Nedavno sam imao drugačiji problem, neka skripta na sustavu koristila se za slanje spama (stizalo je po par stotina bounceova na postmastera zbog neisporučene pošte *dnevno*). Nakratko sam to onemogućio, a onda stavio jedan vrlo koristan patch za php koji u headere dodaje ime skripte s kojom je taj mejl poslan. Također sam u php.ini dodao i skripticu koja automatski Bcc-a sve mejlove poslate na taj način.

formail -R bcc x-original-bcc -f -A "Bcc: adr@esa.hr" -A "x-php-formmail: yes" | sendmail -t -i. Možda nekom pomogne. Gornji patch je svakako koristan.
No, slanje spama je prestalo i uskratilo mi zadovoljstvo svađe s korisnikom. A da maknem mod_security? Možda bi to pomoglo :-) Sad malo evaluiram Suhosin www.hardened-php.net, djeluje obećavajuće po feature listu, a opet, ne želim riskirati stavljajući ga u produkciju jer bi mogao nešto potrgati.

<< Arhiva >>