Tanítás, webfejlesztés, programozás, informatika, rock zene

A védekezés gyenge módja, de lehetősége, hogy a php kiterjesztés helyett más kiterjesztéssel fussanak le a scriptjeink. Ehhez az Apache konfigban az alábbi sot lehet beszúrni:

AddType application/x-httpd-php .zeno .py .asp

A fenti esetben a php kódot pedig zeno kiterjesztéssel kell megírni, vagy a támadó azt hiheti, hogy python illetve asp fut a szerveren.

A php hibakezelésének

A mágikus idézőjeleket a bejövő GET/POST/Cookie adatok esetén használjuk. Ha a mágikus idézőjelek beállítás be van kapcsolva, akkor szerver oldal a stringben beküldött idézőjeleket helyettesíti a backslash-sel kiegészített párjukkal, azaz: \' vagy \" jelekkel. Ugyancsak helyettesíti a \ jelet \\ jellel és a NULL karaktert \NULL-lal. Ezek megakadályozzák az SQL injection támadásokat. Az alábbi php.ini beállítások javasoltak tehát:

Az alábbi tanácsok elsődlegesen WEB-es alkalmazásokra vonatkoznak.

Az adatbáziskezelők különböznek egymástól, de alapvető dolgokat a használatuk során figyelembe kell venni.

  • Az adatbázis használatbavételekor arra kell ügyelni, hogy a PHP kód sohase root vagy admin jogú felhasználóként használja az adatbázist, ugyanis ilyenkor az adatbáziskezelő képes fájlokat is létrehozni a szerveren. (Sajnos a múltban volt ilyen szomorú tapasztalatom.

A PHP futtatásának egyik lehetősége a CGI futtatás. Ez azt jelenti, hogy a php oldal elérésekor a webszerver meghívja a rendszeren lévő php futtatható állományt (pl. php.exe) betölti a memóriába és átadja neki a kért url-en lévő file-t.

http://valami.hu/cgi-bin/php?/valami/futtathato.exe

Mivel a PHP a szerveren képes minden olyan könyvtárat és folyamatot elérni, amire jogosultsága van, ha szükséges a szerver fájlrendszerében írási, olvasási, törlési feladatokat végeznie a kódnak, különös gondossággal kell a kódot megírni.

A Zend_Registry az az osztály, amely a php globális változói helyett használható.

Használata során a Zend Registrybe betölthetünk adatokat:

  • egy stringet
  • egy tömböt
  • Objektumot

Ezeket az adatokat betölthetjük és az oldal futása során bármikor elérhetjük. A program lefutásával az adatokat - ha kell célszerű lementeni egy sessionbe, illetve a szükséges adatokat elmenteni egy adatbázisba profilként.

Módosítsuk az index.php oldalt az alábbiak szerint:

A feladat az, hogy fájlokat tegyünk fel egy FileStore nevű táblába a szerver winchesteréről.

A FileStore táblában a mező típusának Image-nek kell lennie

Ha egy új rekordot kell felvenni, akkor pedig így kell kiadni az SQL utasítást:

INSERT INTO FileStore (ID, Data)
VALUES
(  1,
  (SeleCT
    BulkColumn
   FROM
    OPENROWSET( BULK 'x:\utvonal\fajlneve.pdf', SINGle_BLOB ) AS X
  )

Ha egy meglévő rekordot kell módosítani, akkor ez lesz az SQL utasítás:

A membase olyan alkalmazás, amely képes felhőbe tenni a különböző szervereken futó PHP alkalmazásokat - vagyis segítségével PHP alapú website-ok is futtathatók megosztott szerveren. Mindezt azzal éri el, hogy több szerver közösen tudja használni egy számítógép megosztott memóriáját adatok tárolására.

Hogyan?

A szerver egy NoSQL nevű adatbáziskezelőt futtat, amely memóriában tárolja az adatokat kulcs-érték párokként formájában.

Régóta kerestem annak a megoldását, hogyan lehet MSSQL-ben megvalósítani általában a MySQL-ben régóta meglévő LIMIT klauzulát. Ezt olyan esetben használjuk, hogyha nem szeretnénk, hogy a szerver oldalról a teljes rekordszet átjöjjön kliens oldalra. Hosszas keresgélés után rátaláltam a Microsoft SQL 2005-ben bevezetett row_number() függvényre, de annak sajnos egy kis szépséghibája van. Ha a sorok nem egyediek, akkor véletlenszerűen ad a soroknak sorszámot.