phpDocumentor problem

Iako sjajan alat (ako ga ne koristite, pravac na www.phpdoc.org za više informacija) upravo sam naleteo na problem koji ne znam kako da elegantno rešim.

Naime, u projektu na kojem sada radim postoji par klasa koje implementiraju singleton pattern. Kao što verovatno znate, tada se umesto konstruktora klase za dobijanje objekta poziva jedan static metod klase.

Zavisno od nekih parametara, u kod hoću da uvedem jednu od dve različite implementacije klase koje se samo neznatno razlikuju. Logično, napraviću jednu abstract klasu i iz nje izvesti dve različite klase koje imaju potrebne razlike u odnosu na baznu klasu.

Pošto sada imam dve različite klase koje implementiraju singleton pattern to znači da je i sintaksa njihove konstrukcije različita. Ja hoću da na početku koda očitam parametre poziva, odlučim se za jednu od dve varijante i onda da ih onda koristim na jedinstven način. Razmišljam dalje i pomislim da zavisno od parametara mogu da učitam datoteku sa tačno jednom implementacijom tako da uvek pri izvršavanju imam u kod uključenu baznu klasu i samo jednu njenu naslednicu. Onda mogu da iskoristim isto ime za obe varijacije (pošto se u kodu pojavljuje uvek samo jedan slučaj pri svakom izvršavanju) i da imam isti pristup nevezan od varijacije koju sam učitao.

Međutim, tu dolazi problem sa phpDocumentor-om. Svaka klasa ima drugu @subpackage oznaku, čak sam probao da uvedem i @name oznaku sa različitim vrednostima ali to ne vredi. On uvek prijavi:

WARNING:
duplicate class element "db" in file appserver/_core/db_normal.class.php will be ignored.
Use an @ignore tag on the original if you want this case to be documented.

Ja sada mogu da ga poslušam i prvo generišem dokumentaciju, onda postavim @ignore nad prvom klasom, i zatim ponovo generišem dokumentaciju. Pošto su klase u različitim podpaketima njihova dokumentacija se nalazi u različitim direktorijumima tako da neće doći do prepisivanja, a meni ostaje da na kraju ručno izmenim listu svih klasa i dodam link ka prvoj klasi. Očigledno, ovo nije elegantno rešenje, a još gore je problem rešiti pri egzotičnijim opcijama izvoza dokumentacije.

Ukoliko se ne setim nekog dobrog razloga zašto phpDocumentor treba da ignoriše klase istog imena koje se nalaze u različitim paketima, sutra ću poslati Bug Report. Naravno, ako je neko naleteo na sličan problem neka slobodno kaže rešenje pošto je sigurno bolje od ovoga što sada radim.

October 24, 2005 1:19 AM | Komentari (0) | Trajna veza | php

Sigurno kodiranje u PHP-u

Prateći neke blogove i mailing liste stekao sam utisak da je od početka ove godine u PHP zajednici ukazivanje na probleme sigurnosti u PHP skriptovima mnogo obimnije nego ranije. PHP je jezik koji dozvoljava "prljavo" kodiranje - jednostavnim pozivima neke od gomile ugrađenih funkcija lako je napraviti kod koji odrađuje posao. Međutim, PHP programeri često zaboravljaju na osnovne principe sigurnosti pri pisanju koda tako da je dizajn mnogih od najpopularnijih PHP sistema (čitaj phpBB) potpuno promašen što se sigurnosti tiče.

Ali kao što rekoh, pritisnuti sve većom prijavom problema u popularnim sistemima, PHP ekipa je morala da se zaštiti i da jasno stavi do znanja da problem nije do PHP-a nego do samog koda koji je u njemu napisan (kao što greške u Linux-u nisu problem C-a, već...). U skladu sa tim sada već postoji gomila literature, tekstova, tutoriala koji ukazuju na najšesže probleme vezane za sigurnost PHP aplikacija. Sledi lista sa komentarima:

Obavezno pogledajte da li Vaš kod ne sadrži 10 najčešćih grešaka objavljenih na ovom spisku. Lista sadrži ponuđena rešenja za otklanjanje Top10 sigurnosnih grešaka u web aplikacijama, a koje su objavili ljudi koji stoje iza OWASP-a.

Dalje, tekstove koje je za Security Corner rubriku php|arch magazina napisao Chris Shiflett, mozete pogledati na njegovom sajtu/blogu. Tu ima raznoraznih stvari - od sigurnosti u shared hosting okruzenju, preko validacije ulaznih podataka, rešenja protiv Cross-Site Scripting napada i slično. Obavezno pogledati. Naravno, i sam blog je super! Stoji da treba pogledati i PDF dokument istog autora sa prošlogodišnjeg ApacheCon-a. Dokument u PDF formatu se nalazi ovde.

Dalje, nedavni problem koji se pojavio sa phpBB-om (da nije i Vaš kod ugrožen?) je problem implementacije stalnog logina preko kolačića - nešto što postoji na skoro svakoj lokaciji koja sadrži nekakav login. Dakle, pravac na čitanje unosa koji je za svoj blog sastavio Charles Miller.

Slajdovi sa PHP izlaganja koja su bila posvećena sigurnosti - naravno na talks.php.net. Manje više opet iste stvari - ali u tome i jeste kvaka. Uvek se pojavljuju manje više iste stvari.

Detaljno o SQL Injection-u. Ovo je nešto čega većina programera koji u kodu napišu "SELECT * FROM users WHERE name='$name'" nisu ni svesni. Pogledajte i prateće resurse na koje je ukazano u tekstu.

Jedna od stvari koje su pokrenute na početku ove godine je i http://phpsec.org ili "PHP Security Consortium". Njihovo delo je fenomenalan i obiman dokument "PHP Security Guide". Valja ga pročitati, ako ne to onda makar proleteti kroz primere.

Naravno na kraju - ono odakle treba i početi: Security sekcija PHP Manual-a.

Za nove informacije prijavite se na phpsec listu koju je pokrenuo Marco Tabini (php|arch, za one koji nisu upoznati) - adresa je http://www.phparch.com/phpsec/. Na listi aktivno učestvuje gomila poznatih ljudi iz PHP zajednice, a pored obaveštenja o pronađenim greškama, na listi se redovno vode i raznorazne diskusije. Obim liste nije veliki, tako da ne iziskuje puno vremena i ima uglavnom dobar signal/noise odnos. (mada se ponekad dogodi flame na neku od tema, pa onda je neophodno malo proširiti filtere u omiljenom programu za prijem pošte)


Pozdrav, i sigurno kodiranje!

March 10, 2005 11:23 PM | Komentari (0) | Trajna veza | php

XMLHTTPRequest, u cross-browser varijanti

Bogati korisnički interfejs u Web aplikacijama je postala normalna stvar koju korisnici očekuju. Pogledajte samo najnovije Google servise (Gmail, Google News 2, Google Suggest, Google Maps,...) i sve će vam biti jasno.

Upkros i dalje prisutnim razlikama između različitih browsera (da ne pričam o eventualnoj podršci za starije browsere) ipak mi se čini da je danas ovakve stvari mnogo lakše raditi danas nego ranije. XHTML za označavanje, CSS za ulešavanje i JavaScript uz pomoć koga se dobija korisniji interfejs, lakši za korišćenje. Nisam pristalica šljaštećih, letećih i kakvih sve ne JavaScript animacija ali pristup DOM-u je itekako korisan kada treba povezati malo komplikovanije formulare, rešiti se višestrukih izbora i slično.

Pojam Gmail-a, zaintersovao sam se za još jednu stvarčicu - XMLHTTPRequest, mogućost da bez ponovnog učitavanja cele stranice pošaljete HTTP POST ili GET zahtev i kao odgovor dobijete komad XML-a koje onda parsirate DOM-om ubacite na pravo mesto. Sve je mnogo čistije nego igranje sa gomilom IFRAME-ova što je jedna od alternativa.

Implementaciju XMLHTTPRequest-a je započeo Microsoft u Internet Exploreru kao posebna ActiveX kontrola, a zatim je sa sličnom sintaksom implementiran i kao objekat u Mozilla-inom Gecko engine-u. Problem je - ovo nikako ne radi u Operi. Opera u verziji 7.6 bi trebalo da sadrži implementaciju, ali opet mnogi su naučili na ovaj browser i izostavljanje podrške je nezgodno ako softver nije u nekakvoj beta fazi (poput Gmail-a).

Ipak, na ovoj adresi je moguće pronaći implementaciju namenjenu Operi, sa poprilično velikim restrikcijama, ali opet čistije nego da se radi o IFRAME-ovima. Pomenuti kod Andrew Gregory-ja koristi Java plugin i njene Input/Output funkcije kako bi komunicirao sa web serverom bez osvežavanja same stranice.

Kod sam neznatno modifikovao kako bih dodao podršku za UTF8 kodnu stranicu (iako još uvek postoje problemi sa Apple Safari browserom, koji ima neispravnu implementaciju XMLHTTPRequest-a i bezobzira na postavljenu kodnu stranicu, rezultat prima u ISO-8859-1 rasporedu) i upakovao sve u demo koji se nalazi na adresi: http://www.goranrakic.com/tmp/xmlhttprequest/demo.php. Voleo bih da primim što više različitih bug reporta, kao i ideje kako da rešim problem sa Safarijem na najoptimalniji način.

Kao što i na stranici samog demo-a stoji, najveći problem je što uprkos XMLHTTPRequest-a, ne dobijate ni X od XML-a jer implementacija za Operu ne sadrzi responseXML objekat. Što se mene tiče dok jednoga dana svi korisnici ne pređu na odlični Mozilla Firefox ja sam zadovoljan i sa PlainTextHTTPRequest-om.

February 27, 2005 11:44 PM | Komentari (0) | Trajna veza | php

Zend Studio 4.0

Danas je ekipa programera iz Zenda objavila novu verziju Zend Studija. Iako je beta vec poduže bila dostupna, nedostajala je verzija za MacOSX tako da nisam mogao ranije isprobati nove mogućnosti. Najkorisnije je integracija SQL managera u sam Zend Studio što se može pokazati kao jako korisno (počev od situacije kada treba na brzinu pregledati strukturu tabele koja je prikazana kao tree view kontrola u samom interfejsu, pa do testiranja upita). Videću do koje mere prisustvo ove opcije u samom IDE-u može zameniti eksterni phpMyAdmin + mysal klijent u terminalu što je način kako sam do sada radio. Brze upite i pretrage sam radio u terminalu, dok sam unos vršio kroz phpMyAdmin.

Druga korisna opcija jeste integracija phpDocumentator-a u samo okruženje. Iako je postojala i ranije podrška u vidu prikaza opisa funkcije i povratnih vrednosti prilikom aktiviranja Code Completion prozorčeta tek sada je moguće jednim klikom napraviti dokumentaciju, plus celokupna izrada konfiguracione datoteke je pokrivena grafičkim interfejsom.

Ove opcije su lepo dodate na neupadljiv način u interfejs tako da po prvom pokretanju Zend Studio izgleda manje-više kao i do sada (sa po kojim dugmencetom više). Na kraju, čini mi se da je program čak i malo brži nego prethodna verzija, ali ne bih smeo to baš 100% tvrditi.

February 24, 2005 9:27 PM | Komentari (0) | Trajna veza | php

blog.goranrakic.com - Goran Rakić / Горан Ракић