PHP- ja CGI-ohjeet

Yleistä

Tiedosto-oikeudet

  1. PHP- ja CGI-skripteille saa vaadittavat oikeudet komentamalla:
    % chmod 700 tiedosto.php

  2. Pääte voi olla tarpeen mukaan myös joko .cgi, .pl, .php3, php4 tai .phtml.

  3. 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.

  4. Kaikki kotihakemiston PHP-skriptit saa oikeuksiltaan toimiviksi myös ajamalla komennon
    % phpmode

Internal Server Error

  1. 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

  2. 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

  3. Lisää rivejä saat näkyville antamalla "tail"-ohjelmalle parametrin "-n <rivien määrä>"

  4. WWW-lokia saat seurattua reaaliaikaisesti parametrilla "-f":
    % tail -f /etc/httpd/logs/<lokitiedosto>

  5. 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

  1. 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".

  2. 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.

Nodeta Oy
Kutomotie 9 C
00380 Helsinki
nodeta@nodeta.fi