PHP- ja CGI-ohjeet
Yleistä
- Kaikki CGI- ja PHP-skriptit ajautuvat kunkin käyttäjän omilla käyttöoikeuksilla.
-
Järjestelmä suorittaa kaikki skriptit CGI-tilassa. Skriptien tulee sijaita hakemistossa, johon ulkopuolisilla ei ole kirjoitusoikeuksia.
Jollei tämä ehto täyty, skripti palauttaa Internal Server Error -virheilmoituksen.
Tiedosto-oikeudet
- PHP- ja CGI-skripteille saa vaadittavat oikeudet komentamalla:
% chmod 700 tiedosto.php -
Pääte voi olla tarpeen mukaan myös joko .cgi, .pl, .php3, php4 tai .phtml.
-
Hakemiston oikeudet saa kuntoon komentamalla joko
% chmod 755 hakemisto
tai
% chmod 711 hakemisto
Näistä ensinnä mainittu sallii hakemiston sisällön listauksen webiin silloin, kun hakemistossa ei ole indeksitiedostoa (esimerkiksi index.html). Vastaavasti jälkimmäinen komento sallii vain tiedostopyynnöt, ei hakemiston listausta. -
Kaikki kotihakemiston PHP-skriptit saa oikeuksiltaan toimiviksi myös ajamalla komennon
% phpmode
Internal Server Error
-
Mikäli PHP- tai CGI-skriptisi herjaa Internal Server Erroria,
kannattaa vikaa etsiä ensin wrapperin ja www-serverin lokeista.
Wrapperin lokista näet viimeisimmät rivit komentamalla:
% tail /etc/httpd/logs/suexec_log -
Komenna edellinen välittömästi saatuasi Internal Server Errorin, sillä jos
www-liikennettä on paljon, saattaa sinua koskeva rivi peittyä muiden ilmoitusten alle.
Tarvittaessa voit nähdä vain sinua koskevat viimeisimmät kymmenen riviä komentamalla:
% grep <tunnuksesi> /etc/httpd/logs/suexec_log |tail -
Lisää rivejä saat näkyville antamalla "tail"-ohjelmalle parametrin "-n <rivien määrä>"
-
WWW-lokia saat seurattua reaaliaikaisesti parametrilla "-f":
% tail -f /etc/httpd/logs/<lokitiedosto> -
Virhelokit löytyvät hakemistosta /etc/httpd/logs alla olevan taulukon mukaisesti.
Lukemisen suhteen kannattaa menetellä samoin kuin suexec_login kanssa.
| Domain | Tiedostonimi |
| (www.)wellfish.(org|fi) | wellfish-error_log |
| tunnus.hellfish.(org|fi) | luser.hellfish.(org|fi)-error_log |
| omadomain.com | omadomain.com-error_log |
Skriptin lähdekoodi
-
PHP-skriptisi lähdekoodin saat näkyville webiin, kun käytät
tiedostopäätettä ".phps" esimerkiksi päätteen ".php.txt" sijaan. Näistä
jälkimmäinen antaa virheilmoituksen, mutta ".phps" toimii aina. Perl-skriptien vastaava sorsatiedostopääte on ".pls".
-
Näyttäessäsi lähdekoodin webiin, tiedosto tarvitsee lukuoikeudet kaikille:
% chmod a+r <tiedosto>
Tärkeä huomautus koskien tietoturvaa
Älä koskaan anna ulkopuolisille lukuoikeuksia ~/public_html-hakemiston alla sijaitseviin tiedostoihin, jotka sisältävät esimerkiksi MySQL-tietokantasi salasanoja. Koska PHP- ja CGI-skriptit suoritetaan oman tunnuksesi oikeuksin, voit antaa arkaa tietoa sisältäville tiedostoille oikeudet, jotka sallivat tiedoston käsittelyn vain sinun tunnuksellasi. Tällöin webbiserverillä ei ole oikeuksia lähettää tiedostoa verkon yli, vaikka joku osaisikin kysyä sitä suoraan tiedostonimen perusteella [ * ].
Ylimääräiset lukuoikeudet saat pois komentamalla:
% chmod 600 <arka tiedosto>
Selusta kannattaa tiedosto-oikeuksien lisäksi varmistaa vielä muuttamalla salasanatiedoston päätteeksi ".php". Tällöin webbiserveri tulkkaa tiedoston ennen sen lähettämistä, eikä täten listaa mitään tiedoston sisältämiä salasanoja, vaikka skriptin tiedosto-oikeudet olisivatkin jääneet liian löysiksi.
Perl-skriptin ulkoistetun salasanatiedoston (moduulin) pääte on ".pm". Tällä päätteellä varustetut tiedostot eivät ".php":n tavoin listaudu odottamattomasti vääriin käsiin, jos tiedosto-oikeudet ovat väärin.
[ * ] = Suora kysely on esimerkiksi "http://wellfish.org/~tunnus/mysqlsalasanat.txt". Kyseisen tiedoston sisältämät salasanat joutuvat vääriin käsiin, jolleivät tiedoston oikeudet ole kunnossa. Jos vastaavassa tilanteessa tiedoston pääte olisi ".php", ei vahinkoa tapahtuisi, vaikka oikeudet olisivatkin väärin.
PHP:n globaalit muuttujanimet
PHP:n vipu "register_globals" on globaalisti asennossa "off". Mikäli skriptisi nojaavat globaaleihin muuttujanimiin, eivätkä täten toimi ilman tämän asetuksen päälläoloa, joudut itse korjaamaan skriptisi tukemaan asetuksen tuomia rajoituksia.
Lisätietoa:
http://www.php.net/manual/en/security.registerglobals.php.
http://www.php.net/manual/en/language.variables.predefined.php.
Turvallisempaa koodaustapaa noudattavat skriptit eivät ole tästä asetuksesta moksiskaan, mutta valitettavasti läheskään kaikki skriptit eivät ole hyvien tapojen mukaisesti toteutettuja.
Ongelmatapauksissa shell@wellfish.fi auttaa.
