» Tukisivuston etusivulle
PHP-sovellusten ajaminen palvelimella
Kaikkiin webhotellipaketteihimme kuuluu vakiona PHP-ohjelmointikielen tuki. PHP on suosituin dynaamisten web-palveluiden tuottamiseen tarkoitettu tekniikka, ja useimmat kotisivujen ja verkkokauppojen ylläpitämiseen tarkoitetut sovellukset, kuten WordPress, WooCommerce, Joomla, Drupal, Prestashop, Zen Cart ja monet muut on tehty tällä ohjelmointikielellä.

Tyypillisesti kotisivujen tai verkkokaupan suunnittelijan ei kuitenkaan nykypäivänä tarvitse osata ohjelmoida tai edes asentaa valmiita sovelluksia manuaalisesti, vaan asentaminen tapahtuu automaattisesti hallintapaneelin työkaluilla. Esimerkiksi WordPressin asentaminen tehdään palvelimellemme WordPress Toolkit -nimisen työkalun avulla. Tämä ohjeisto onkin tarkoitettu lähinnä PHP-ohjelmointikielen perusteiden ymmärtämiseen ja tekijöille, jotka ohjelmoivat itse tai käyttävät muiden tekemiä PHP-pohjaisia skriptejä ja sovelluksia. PHP-ohjelmoinnin perusteiden ymmärtämisestä ei ole haittakaan, sillä se auttaa myös valmiiden julkaisujärjestelmien toiminnan ymmärtämisessä, ohjelmistojen mukauttamisessa ja erilaisten vikatilanteiden itsenäisessä selvittämisessä.

PHP-tiedostojen ajaminen

PHP-tiedostot sijoitetaan samaan sijaintiin, kuin perinteiset HTML-kotisivutiedostotkin. Palvelimellamme tämä sijainti on kotihakemistosta löytyvä httpdocs-hakemisto.

Erotuksena stattisista HTML-tiedostoista (esim. index.html) PHP-tiedostot on nimetty .php-päätteisenä (esim. index.php), jolloin palvelimen komentotulkki ymmärtää kääntää ja ajaa tiedostosta löytyvän PHP-ohjelmakoodin. Erotuksena muusta HTML-sisällöstä ohjelmakoodia sisältävät osiot alkavat aina merkinnällä <?php ja päättyvät merkintään ?>, minkä väliin ajettava ohjelmakoodi sijoitetaan.

Mikäli olet kiinnostunut PHP-ohjelmoinnin opettelusta, aloittelijoille suosittelemme esimerkiksi w3shools.com:in PHP-tutoriaaleja, joilla pääsee mainiosti alkuun. Usein PHP-ohjelmointikielen yhteydessä käytetään myös MySQL-tietokantoja tietojen tehokkaaseen tallentamiseen ja hakemiseen. Useimmista webhotellipaketeistamme löytyy myös MySQL-tuki vakiona.

Turvallisuusnäkökulmia

Mikä tahansa dynaaminen sovellus, johon voidaan vaikuttaa julkisesta sijainnista ulkopuolelta (kuten verkosta) muodostaa aina potentiaalisen turvallisuusuhan. Asennettaessa kolmannen osapuolen PHP-sovelluksia, tulee muistaa aina muutama tärkeä tietoturvaseikka:

  • Asenna vain luotettavilta tahoilta lataamiasi PHP-ohjelmia. Lataa ohjelmistopaketti ohjelmistovalmistajan omilta kotisivuilta, älä kolmannen osapuolen sivuilta. Asenna ohjelmisto noudattaen tarkkaan sovellusvalmistajan ohjeita (mukaanlukien ohjeistettujen tiedosto-oikeuksien asettaminen, mahdollisen install-tiedoston poistaminen sekä riittävän turvallisten salasanojen käyttäminen).

  • Muista päivittää ohjelmisto säännöllisesti noudattaen ohjelmistovalmistajan ohjeita, jotta asennus säilyy tietoturvallisena, eikä levytilaasi pääse haittaohjelmia mahdollisten sovellushaavoittuvuuksien kautta

Ohjelmoitaessa sovelluksia itse on tärkeää tiedostaa muutama vähintään muutama tietoturvaperuste:

  • Kaikki ulkoisista syötteistä (WWW-lomakkeista, kekseistä, web-palveluista, palvelimen muuttujista ja tietokantakyselyistä) tuleva data on aina sanitoitava (eli puhdistettava) ennen tallentamista tai muuta käsittelyä.

  • Erityisesti POST- tai GET -metodein lomakkeilta noudettua dataa tulee puhdistuksen lisäksi käsitellä aina siten, ettei sen kautta voida ajaa mitään ohjelmakoodia kohteessa

  • Jos dataa tulostetaan ruudulle (echo tai print -komennoin), se on käsiteltävä ensin vähintään htmlspecialchars:n ja mahdollisesti myös strip_tags:in avulla erilaisten XML-injektioiden välttämiseksi. 

  • Jos data tallennetaan MySQL-tietokantaan, se on käsiteltävä lisäksi PHP:n mysqli_real_escape_string:n kautta (tai vielä paremmin, käytettäväprepared statements:eja) erilaisten SQL-injektioiden välttämiseksi. Ylivoimaisesti paras ja turvallisin vaihtoehto tietokannan käskyttämiseksi on kuitenkin käyttää PDO:ta ja prepared statements:eja, vaikka se vaatiikin ohjelmoijalta alkuun enemmän vaivannäköä ja perehtymistä.

  • Mikäli käytettyä dataa käytetään shell-komentojen ajamiseen (edellyttää omaa palvelinympäristöä erityisoikeuksin) esim. exec-komennolla, data on puhdistettava myös escapeshellcmd ja escapeshellarg -komennoin

PHP-virheilmoitusten kytkeminen päälle

Oletuksena palvelimillamme julkisesti näkyvät PHP:n virheilmoitukset on turvallisuussyistä estetty ja virheen sattuessa selaimessa näkyy valkoinen ruutu. Näet osan virheistä Plesk-hallintapaneelista kohdasta Verkkosivustot ja toimialueet -> Lokit, mutta tämä koskee vain Apache- ja Nginx-palvelintason virheitä ja joukossa ei näy pääsääntöisesti kaikkia PHP-virheilmoituksia. Voit halutessasi pyytää asiakastuestamme PHP-virheilmoitusten päällekytkentää webhotelliin- tai kehitysympäristöön, jossa teet ohjelmistokehitystä, tai tarvitset muusta syystä nähdä virheellisen PHP-scriptin virheilmoitukset oletuksena webhotellissasi.

Suosittelemme kuitenkin ensisijaisesti näiden asetusten hallintaa suoraan PHP-ohjelman omalta asetustasolta. Voit siis ohjata myös PHP-virheilmoitusasetuksia sovelluksen sisältä asettamalla sovelluksellesi PHP-ohjelmakoodin alkuun asetukset:

error_reporting(E_ALL);
ini_set("display_errors", 1);

Turvallisuuden vuoksi PHP-virheilmoituksia tulisi näyttää ainoastaan ohjelmiston kehitysvaiheessa (ja myös esimerkiksi tällöin suojata kehitettävä ohjelmisto salasanalla). Kun ohjelmisto julkaistaan julkiseksi, kyseinen PHP-virheilmoitusasetus tulisi palauttaa alkuperäiseksi ("display errors", 0), jolloin virheilmoituksia ei näytetä.

Asetuksen käyttäminen kuitenkin edellyttää, että olet toteuttanut ohjelmistorakenteen siten, että virhe ei ilmene tässä ohjelmatiedostossa jossa asetus asetetaan (esim. erillinen asetustiedosto, joka ajetaan alkuun), ja PHP ehtii ajamaan tiedoston ennen virheellisen tiedoston ajamista. (PHP-tulkki kääntää tiedoston kokonaan ennen virheilmoituksen tulostamista, jolloin virheellisen PHP-tiedoston kautta asetusta ei voida asettaa). Esimerkinomaisesti yksinkertaistaen, jos toteuttamasi ohjelma koostuu yhdestä tiedostosta (esim. ohjelma.php) ja siinä ilmenee virhe, jonka haluaisit nähdä, onnistuu tämä luomalla samaan hakemistoon uusi tiedosto (esim. error.php) jonka sisällöksi määritellään:

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include("ohjelma.php");
?>
Tämän jälkeen ajamalla (avaamalla selaimessa) kyseisen tiedoston error.php, näet virheilmoituksen tiedostosta ohjelma.php.

PHP-virheilmoitusten ja virhelokin kytkentä päälle WordPressissä

Jos käytät WordPressiä, voit kytkeä PHP-virheilmoitukset päälle muokkaamalla wp-config.php -tiedostoa ja lisäämällä sinne rivin:

define( 'WP_DEBUG', true );

jos haluat virheilmoitukset kirjautuvan lokitiedostoon, lisää myös rivi:

define( 'WP_DEBUG_LOG', true );

Tällöin WordPressin PHP-virheilmoitukset kirjautuvat wp-content -hakemistosta löytyvään debug.log -tiedostoon. Kun olet paikallistanut virheen, muistathan turvallisuussyistä kytkeä tuotantokäytössä olevilta sivuilta virheilmoitukset taas pois päältä.


Hostaan Support