Вчера ми се наложи да инсталирам един open source PHP софтуер. Тъй като не ми се беше налагало да ползвам PHP на тази машина от доста време, процедурата започна с инсталиране на ново PHP, защото за старото вече бяха открити една камара дупки. Както можеше да се очаква това доведе до проблеми с пакети, модули, динамични библиотеки и т.н. След като приключих с инсталирането на PHP и софтуера, отидох на страницата, на която се очаква човек да конфигурира софтуера. Нали повечето PHP неща (незнайно защо) имат една такава начална страница от където се задават настройките при първо пускане. Забелязах, че докато съм там в httpd-error.log ми излизат едни интересни неща:
1 2 | |
Интересно, реших да погледна за какво точно става дума в съответния файл, на съответния ред:
1
| |
Стана ми интересно, как човек може да допусне толкова много грешки само на един ред. Наистина според документацията на PHP, функцията fopen се очаква да има поне два параметъра — име на файл и режим на работа (четене или писане). Освен това тази функция може да върне грешка. Връщайки грешка, извикването на fpassthru просто няма как да мине, а както се вижда проверка за връщаната стойност на fpassthru също няма. Явно човекът писал скрипта не е обърнал никакво внимание на тези “дребни подробности”. Най-интересното в цялата ситуация е, че този скрипт си работи. Въпросните warning съобщения си излизат в log файла, но въпреки това скриптът работи и на никой не му правят впечатление бисерите писани вътре. Един google по въпроса показа, че грешки при работа с тези функции имат хиляди (да не кажа милиони) сайтове. PHP наистина се превърна в security disaster за Интернет. Непрекъснато се намират дупки в самото PHP, а от друга страна все повече и повече хора, които нямат представа от програмиране започват да правят страници на него. Явно разработчиците нямат интерес да оправят нещата и да бият “web програмиста” по главата докато започне да пише правилно.