Archive for 'Apache, php, perl'

Flex: ViewStack select by id

Flashben programozni szívás, Flexben is. Ezzel a problémával több mint egy órát tököltem, ezért szentelek neki egy gyors kis blogbejegyzést..

Van egy ViewStack komponensünk (MyViewStack), ebben pedig szépen elnevezett gyermek elemek. Elnevezés alatt azt értem, hogy mindegyiknek van saját “id”-je. Szeretnénk, hogy ne csak hagyományos módon az index alapján  ( MyViewStack.selectedIndex=1) lehessen elérni, hanem a “Stack” id-je alapján, amit stringként közlünk a megjelenítő metódussal.

A metódus adott: MyViewStack.selectedChild=, viszont a bemenet nyilván nem lehet egy sima változónév, Container-re kell hivatkoznunk. Naív módon próbálkoztam ilyen flashes közhelyekkel: this[target] és társai..

Persze nem ment. Mivel Container kellett neki minden áron, beimportáltam az  mx.core.Container csomagot és rájöttem, hogy mennyire  szépen meg lehet ezek után oldani a problémát:

import mx.core.Container;
private function showTarget(target:String) : void
{
    MyViewStack.selectedChild = Container(MyViewStack.getChildByName(target)) ;
}

Apache Log Fileok (mod_log_rotate)

Végre találtam egy elegáns megoldást az Apache log fájljainak kordában tartásához. Az egyik lehetőség ugyebár az, hogy leállítjuk a szervert, átmásolgatjuk kézzel a log fájlokat egy archív mappába és aztán újraindítjuk az apacheot. Másik lehetőség a rotatelog vagy cronlog apró kis progik használata, melyek az imént felvázolt folyamatot helyettünk, időzítve végzik el. Azonban most találtam egy windows alá is lefordított natív apache modult amit csak fel kell telepítenünk, majd a megfelelő config fájlokban egy-egy sort beszúrnunk és már teszi is a dolgát. Mégpedig az apache szerver időnkénti leállítása nélkül!

A neve: Hexten Mod-Log-Rotate.

Infó és letöltés itt: Hexten wiki

Telepítés windowsra (ez a wikiben nincs leírva, bár sokban nem különbözik a *nix változatétól):

1. Másold a mod_log_rotate.so fájlt az apache/modules/ könyvtárba a többi modul közé.

2. A httpd.conf fájlba másold be a következő sorokat:

LoadModule log_rotate_module modules/mod_log_rotate.so

RotateLogs On

RotateLogsLocalTime On

RotateInterval <interval> [<offset>]

Az interval és offset helyére percben megadott időintervallumokat írj.

Pl:
interval: 86400 -> naponta új log
offset: 60-> 23:00-kor fog új logot kezdeni éjfél helyett.

3. Be lehet állítani a használni kívánt fájlneveket is. Pl:

CustomLog logs/access_log.%Y%m%d-%H%M%S common

4. Állítsd le az apacheot!

5. Archiváld a régi log fájlokat.

6. Indítsd el az apache-ot!

Sajnos ez a megoldás csak az access log-ra működik, az error logokra nem,

Apache SSL Windows Tutorial

Vettem egy SSL tanusítványt az egyik domainemhez, mert szeretném, hogy https-en keresztül is el lehessen érni bizonyos szolgáltatásokat. Próbálom gyakorlatisan megközelíteni az egész folyamatot, ezért kapásból ajánlanám is a godaddy.com-ot: egy sima SSL tanusítványt $29.99-ért adnak, megbízható, lehet fizetni paypal-al. Ha az összes aldomainünk (pl: aldomain.domain.hu) tanusítvánnyal való ellátása a cél, az már a wildcard kategória és $199 dolcsiba fog fájni.

A folyamat lépésről-lépésre:

1. Előkészítés:

  1. Szükségünk lesz a WIN32 OpenSSL legújabb verziójára: letöltés.
  2. Ellenőrizzük, hogy milyen Apache-unk van.. mindenképp OpenSSL-es változatra lesz szükség. Ha még nincs fenn az Apache, töltsük le és telepítsük: letöltés. A telepítést itt nem részletezem.
  3. A win/system32 könyvtárba másoljuk be a ssleay.dll és libeay32.dll-t, ha még nincsenek ott. A két ddl-t a kicsomagolt openssl mappájában találjuk meg.
  4. Másoljuk az OpenSSL.exe-t az Apache/bin mappába.
  5. Ellenőrizzük, hogy a mod_ssl.so file az Apache/modules könyvtárában van-e.
  6. Töltsük le az openssl.cnf fájlt, ha az apache conf mappában nem találunk ilyet. Rendszerint tárcsázó alkalmazásnak ismeri fel a winfos ezt a fájlt és a kiterjesztését el is rejti. Másoljuk az openssl mappájába.

2. Gyártsunk egy SSL tanusítványkérelmet (certificate request), melyet elküldünk a CA-nak (Certificate Authority), aki kiállítja számunkra a tanusítványt.

Parancssorban kerssük meg az openssl mappáját és adjuk ki a következő parancsot:

openssl req -config openssl.cnf -new -out domainem.com.csr

Haladjunk végig a kérdéseken. A country code: HU A common name-hez adjuk meg a domaint amit tanusítvánnyal szeretnénk ellátni.

FONTOS! A normál SSL tanusítvány nem érvényes az aldomainekre, csak a www-re. Tehát ha domain.com-ot adunk meg, a www.domain.com is működni fog, de a sg.domain.com már nem. Ha www.domain.com-ot adunk meg, akkor a www nélküli is hiteles lesz!

MÉGFONTOSABB! http://, https:// vagy bármilyen marhaságot ne írjunk a common name elé!!

3. Ha készen vagyunk a parancssorba mehet:

openssl rsa -in privkey.pem -out domainem.com.key

4. Az openssl mappájában lévő csr file-t küldjük el a tanusítványt kiállító céghez!
A visszakapott crt tanusítvány fájlt és a domainem.com.key fájlt másoljuk az apache/conf/ssl mappába.

5. Szerkesszük az Apache konfig fájlt! (apache/conf/httpd.conf):

Figyeljen a 443-as porton is (a 80-ast nem kell törölni!):

Listen 443

Töltse be az SSL modult:

LoadModule ssl_module modules/mod_ssl.so

Az ssl_module általános beállítása:

SSLMutex default
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
SSLSessionCache none

6. Virtualhost konfiguráció (rendszerint az apache/conf/httpd-vhosts.conf fájlban):

NameVirtualHost *:443

SSLEngine On
SSLCertificateFile conf/ssl/domainem.com.crt
SSLCertificateKeyFile conf/ssl/domainem.com.key
DocumentRoot "C:/server/www/domainem.com/www"
ServerName domainem.com
ServerAlias www.domainem.com
ErrorLog "logs/domainem.com-error.log"
CustomLog "logs/domainem.com-access.log" common

7. Apache restart!

A böngészőben most már működnie kell a https://www.domainem.com -nak mindenféle felugró hitelesítési ablak nélkül.

Perl telepítése

1. Töltsük le a http://www.activestate.com/store/activeperl/download oldalról a Windows (x86) MSI verziót (ActivePerl-5.10.0.1002-MSWin32-x86-283697.msi). Az email címet meg egyebet nem kell megadni (!!!) csak kattints a “Continue” gombra.

2. Indítsuk el a setup progit, és nyomkodjuk bőszen a next-eket! A harmadik panelon van a Location beállítás, amit nagyon fontos, hogy C:\usr -re állítsunk. Így elérhetjük, hogy a linux/unix renszereken megszokott perl elérési útvonalat /usr/bin/perl megtartsuk, ne kelljen átírni scriptjeinket.

3. Az Add Perl to the PATH environment variable legyen bejelölve, mert így a perl futtatható állományait a windows a helyükön is el tudja indítani. A Create Perl file extension association is maradjon.

4.Szerkesszük az Apache httpd.conf konfig filet! Keressük meg az alábbi sort és adjuk hozzá az ExecCGI paramétert! Vhost-ok használata esetén nyilván a vhost-oknál kell megadni.

Options Indexes FollowSymLinks
Options Indexes FollowSymLinks ExecCGI

5. Ha szeretnénk, hogy ne csak az apache könyvtár/cgi-bin alatt lehessen futtatni scripteket, a következő sor elől töröljük a #-et.

#AddHandler cgi-script .cgi

A futtatás helyét a Script Alias segítségével adhatjuk meg így (értsd: DOC_ROOT/cgi-bin/):

ScriptAlias /cgi-bin/ "C:/[apache utvonal]/cgi-bin/"

6. Indítsuk újra az Apache-ot! Ha nem indul újra, ellenőrizzük az átírt httpd.conf-ot!
7. Készen is vagyunk! Próbáljuk ki! Készítsünk egy teszt.cgi fájlt a következő tartalommal és mentsük a document_root/cgi-bin/ -be.

#!/usr/bin/perl
print "Content-type:text/htmlnn";
print "Sikerült!";

A böngészőnkben próbáljuk ki az elkészített miniszkriptünket’: http://[domain]/cgi-bin/teszt.cgi

Ha a sikerült szöveget olvassuk, működik, ha 500-as hibát kapunk, az apache error logjában tudunk utána nézni a probléma forrásának.

Windowson működő php5 és mysql 5

Rengeteget olvasni fórumokon, hogy a php5 és a mysql nem hajlandó együttműködni installálás után windowson. Többségnél már ott volt a hiba, hogy a php.ini-ben a mysql extension-t nem aktiválta, ami azért elég lamer problém, de leírom ezt is.. A hiba tünete, hogy mysql adatbázishoz való csatlakozáskor: “Fatal error: Call to undefined function mysql_connect() ” errort dob a php.
Megoldás:
php.ini-ben csere:

ezt:
;extension=php_mysql.dll
erre:
extension=php_mysql.dll

apache restart és már megy is.

Az én esetemben nem itt volt a gubanc.. szépen betöltötte a php extensionök közé a php_mysql.dll-t és a mysql_connect() függvényt is értelmezte a php. Egyszerűen a böngésző nem hozta be a mysql-teszt php oldalt. (FF esetén “A kapcsolat alaphelyzetbe állt” hibát jelzett.) A log fáklokban semmi nyoma nem volt a problémának.. minden futott, rendben volt.. Mikor már harminckettedik alkalommal néztem át a configokat, beugrot, hogy a libmysql.dll-el lehet a gond
A gépen volt kb 3 helyen ilyen nevű fájl.. mint kiderült, a Windows könyvtárban lévőt használta a szolgáltatás (ez a PATH beállításoktól függ egyébként), ezért előbb gyorsan kilőttem mindent (apache, mysql és egyéb mysql függő servicek) aztán fogtam a legfrissebb windwos-os php buildben található libmysql.dll-t és felülírtam vele. Már a csere pillanatában éreztem, hogy sikerült orvosolni a problémát, mert fél mb-al nagyobb a php 5.2.5-ből kimásolt dll.. Minden szolgáltatást visszakapcsoltam és papaaam! Sikerült kapcsolódni az adatbázishoz, megy minden!

Biztonságos PHP - PhpSecInfo

picture-1.jpgA PHP mint bármely másik script nyelv potenciális veszélyt jelent szerverünk számára.. Biztos sokaknak meggyűlt már a baja a komisz fopen függvénnyel.. elég egy rossz beállítás és máris olvasható az összes rendszerfájl.. és akkor már mit sem ér a jól beállított apache, a tűzfal, és a többiek. Nem árt, ha egy ilyen professzionálisnak nem is - de hasznosnak mindenképp- mondható kis eszközzel mint a phpsecinfo, leellenőrizzük a php.ini beállításait.

A PhpSecInfo nem más, mint a PHP Security Consurtium nagyon hasznos projektje, melynek célja, hogy a legismertebb és főként figyelmetlenségből nyitva hagyott konfigurációs kiskapukat számunkra is láthatóvá tegye.. Hogy ki mire használja az már a maga dolga, de én most white hat szemszögből próbálom bemutatni a utility-t.

A PhpSecInfo tulajdonképpen egy biztonsági ellenőrző script halmaz, mely vizsgálódásainak eredményét a phpinfo()-hoz hasonló könnyen átlátható listában közli velünk. Gyakorlatilag egyszerűen felmásoljuk a PHP Security Consurtium weboldaláról letöltött zip tartalmát és a böngészőnkben már látjuk is az eredményt és az esetleges problémákra javasolt megoldásokat.

Használjátok, terjesszétek! További hasznos olvasmányok a témában ugyanitt: PHP Security Guide