<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ellang</id>
	<title>ICO wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ellang"/>
	<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php/Special:Contributions/Ellang"/>
	<updated>2026-05-12T18:58:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=6783</id>
		<title>PHP seadistamine</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=6783"/>
		<updated>2010-04-16T14:03:12Z</updated>

		<summary type="html">&lt;p&gt;Ellang: /* Autor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PHP seadistamine =&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
[[User:Ellang|Elar Lang]]&amp;lt;br&amp;gt;AK32&lt;br /&gt;
&lt;br /&gt;
== Sissejuhatus ==&lt;br /&gt;
Acunitex nimelise turbega tegeleva firma andmetel (http://www.acunetix.com/blog/web-security-zone/articles/statistics-from-the-top-1000000-websites/) on 2010 aasta alguse seisuga 68% veebiserverites Apache ning 70% veebiserverites PHP.&lt;br /&gt;
&lt;br /&gt;
Serverite hooldamise ja PHP rakenduste kirjutamise vahele jääb oluline osa - PHP seadistamine ja rakendusele õigete õiguste määramine. Kuna arendaja võib pidada seda administraatori tööks ning administraator omakorda arendaja tööks, siis võib selle töö tegemise (st tegemata jätmise) juures tekkida oluline turvarisk.&lt;br /&gt;
&lt;br /&gt;
Antud artikli eesmärk on juhtida tähelepanu olulisematele nüanssidele PHP seadistuse juures.&lt;br /&gt;
&lt;br /&gt;
= PHP seadistamine - mida jälgida =&lt;br /&gt;
.. teise nurga alt vaadatuna - mis on enamlevinud ämbrid PHP veebikeskkonna seadistamisel?&lt;br /&gt;
&lt;br /&gt;
== Veateated ==&lt;br /&gt;
=== Kuvamine ===&lt;br /&gt;
Toodangukeskkonnas ei tohi mitte mingil juhul kuvada välja tarkvara poolt tekkinud vigade veateateid. See annab ründajale olulist infot rakenduse ülesehituse kohta ning lihtsustab rünnaku teostamist. Arenduskeskkonnas (ja ka test keskkonnas) peaks aga veateateid kuvama.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.display-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ini_set (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ini_set(&#039;display_errors&#039;, 0); // hide errors&lt;br /&gt;
//ini_set(&#039;display_errors&#039;, 1); // show errors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See ei kuulu küll otseselt PHP seadistamise juurde, kuid reegel peaks ka olema, et programmikood ise ei kuva veateateid välja - näiteks, kui tekib viga SQL päringu teostamisel, siis ei tohi seda mitte mingil juhul toodangu keskkonnas välja kuvada (lihtsustab näiteks SQL injection rünnakute teostamist).&lt;br /&gt;
&lt;br /&gt;
=== Logimine ===&lt;br /&gt;
Kõik tekkinud vead tuleb kindlasti logida, et vajadusel otsida tekkinud vigade põhjuseid (ja põhjustajaid). Veateadete logi tuleks ka jälgida, mitte lihtsalt logida.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.log-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Detailsus ===&lt;br /&gt;
Veateateid tuleks tuvastada võimalikult suure detailsusega. Kindlasti mitte ignoreerida E_NOTICE taseme vigu, sest ka need näitavad välja programmi koodi nõrkuseid või vigu (koodis tekib situatsioon, mida arendaja pole ette näinud).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting&lt;br /&gt;
Eeldefineeritud detailsuse konstandid: http://ee.php.net/manual/en/errorfunc.constants.php&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL&amp;lt;/pre&amp;gt;&lt;br /&gt;
E_ALL ei sisaldanud E_WARNING teateid kuni PHP versioonini 5.2. Alates PHP versioonist 5.3 E_ALL raporteerib kõiki teateid peale E_STRICT teadete. Alates PHP versioonist 6 on E_ALL teadete hulgas ka E_STRICT teated. Tasub jälgida PHP dokumentatsiooni.&lt;br /&gt;
&amp;quot;error_reporting&amp;quot; väärtust saab määrata ka numbrina, igal konstandil on oma numbriline väärtus. Kuid kuna see number võib erinevate PHP versioonide puhul tähendada erinevaid asju (nt E_ALL puhul), siis on turvalisem kasutada selleks ikkagi nimelisi konstante. Samas ei ole eeldefineeritud konstandid kasutatavad kui määrata php seade väärtust Apache httpd.conf või .htaccess vahendusel.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL ~ E_STRICT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ini_set (seade määramine jooksvalt php koodis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
error_reporting(E_ALL ~ E_STRICT);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Failide halduse ja üles laadimise seadistus ==&lt;br /&gt;
&lt;br /&gt;
=== open_basedir ===&lt;br /&gt;
open_basedir parameeter määrab, millistest kataloogidest võib rakendus failisid avada. Vaikimisi on väärtus määratama, mis tähendab, et rakendus saab faile avada tervest serverist (kui failide õigustega seda ei ole piiratud).&lt;br /&gt;
Selle parameetri puudumine annab võimaluste teostada LFI (Local File Include) ründeid kogu failisüsteemi ulatuses.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.open-basedir&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
open_basedir vaikeväärtus PHP&#039;s puudub, st PHP poolt mingeid piiranguid ei ole (loevad vaid failiõigustest tulenevad piirangud).&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = /path/to/application/root/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga mugav oleks määrata open_basedir väärtuseks &amp;quot;.&amp;quot; (ehk siis see sama kataloog, kus skript käivitatakse). See on aga ohtlik, kuna PHP chdir käsuga saab &amp;quot;aktiivse kataloogi&amp;quot; ja seega ka väärtuse &amp;quot;.&amp;quot; tähendust muuta.&lt;br /&gt;
Jälgida tuleks väärtuse (või väärtuste) määramisel, et vajalikele kataloogidele ligipääs alles jääks (nt kui ei ole muudetud upload_tmp_dir väärtust, siis lisada open_basedir väärtusele ka /tmp kataloog).&lt;br /&gt;
&lt;br /&gt;
Saab määrata ka httpd.conf failis (ja ka .htaccess failis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
  php_admin_value open_basedir /path/to/application/root/&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
NB! määrates open_basedir piirangu httpd confi kaudu, ei rakendu see siis kui php käivitada käsurealt (ehk siis kui rakendus ise on juba turvaauguga ja saab tekitada käivitatava php koodi rakenduse alla, siis saab sellest piirangust mööda).&lt;br /&gt;
&lt;br /&gt;
=== allow_url_fopen ===&lt;br /&gt;
Selle parameetriga juhitakse, kas failide avamise funktsioonidel on õigus avada fail üle urli. Kui rakendus sellist võimalust ei vaja, peaks selline võimalus olema keelatud (et välistada RFI (Remote File Include) rünnakuid).&lt;br /&gt;
&lt;br /&gt;
php manual:http://ee.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide avamist üle urli):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== file_uploads ===&lt;br /&gt;
Parameetriga juhitakse, kas HTTP failide üles laadimine on toetatud. Kui rakenduse funktsionaalsus seda võimalust ei vaja, peaks see olema keelatud.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide üles laadimist):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== upload_tmp_dir ===&lt;br /&gt;
Asukoht üles laetavate failide ajutiseks talletamiseks, kuni PHP programm nendega tegeleb. Pärast pöördumist tmp kataloogist failid kustutatakse.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on määramata, kasutatakse süsteemi vaikeväärtust (mis linuxi puhul on /tmp kataloog)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = /path/to/application/root/tmp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
upload_tmp_dir parameetri väärtus ei tohiks kindlasti olla avalikku veebi paistev kataloog (st ei tohi olla &amp;quot;document_root&amp;quot; alamkataloog).&lt;br /&gt;
Vaikeväärtus võiks olla muudetud, kuna failide üleslaadimine on ka üks DoS (Denial of Service) ründemeetodeid. Koormatakse veebiserverit lõputute failide üleslaadimistega, veebiserver tekitab iga faili jaoks &amp;quot;upload_tmp_dir&amp;quot; parameetriga kataloogi ajutisi php* nimelisi faile. Kui DoS rünnaku peale veebiserver hangus, siis võib tekkida olukord, kus tmp kataloogi jäävad need üles laetud ajutised failid alles. Samal ajal LFI (Local File Include) ründevõimalust omades saab ründaja niimoodi sokutada endale vajaliku koodi veebiserverisse.&lt;br /&gt;
&lt;br /&gt;
=== upload_max_filesize ===&lt;br /&gt;
Maksimaalne ühe üles laetava faili suurus.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.upload-max-filesize&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_max_filesize = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui suuri faile ei oodata, ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
=== max_file_uploads ===&lt;br /&gt;
Maksimaalne ühe päringuga üles laetavate failide arv.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.max-file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui mitme faili korraga üles laadimist ei oodata, siis ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
== Muud limiidid ==&lt;br /&gt;
&lt;br /&gt;
=== post_max_size ===&lt;br /&gt;
Maksimaalne postituse suurus. See ei ole nüüd otseselt failide üles laadimise parameeter, kuid üldjuhul rakendub see piirang just failide üles laadimisele.&lt;br /&gt;
Valitud väärtus ei tohiks olla põhjendamatult suur. Kui file_uploads parameetriga on failide üles laadimine välja lülitatud, siis lihtsalt vormide täitmise kaudu eriti mahukaid postitusi lubama ei peaks.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.post-max-size&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = 8M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui kasutatakse failide üles laadimist, siis peaks post_max_size olema suurem kui &amp;quot;upload_max_filesize * max_file_uploads&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== memory_limit ===&lt;br /&gt;
Määrab kui palju on võimalik PHP rakendusel maksimaalselt mälu kasutada. Väärtus peaks olema sõltuvuses rakenduse reaalsete vajadustega. Kehvale rakenduse koodile mälu juurde andmine ei ole lahendus (pikas perspektiivis), sel juhul tuleks kood ringi kirjutada.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.memory-limit&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
memory_limit = 128M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
memory_limit = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Üldjuhul on 128M pisikese PHP rakenduse jaoks väga palju (32MB&#039;st peaks varuga piisama). Kui rakendus juhtub auklik olema ning ründaja suudab oma koodijupi serverisse toimetada, siis on ka temal korralikult ressursse käes mida kasutada.&lt;br /&gt;
&lt;br /&gt;
=== max_execution_time ===&lt;br /&gt;
Määrab maksimaalse PHP skripti töötamise aja. Kui PHP rakendus ei tegele mahukate väljundandmete genereerimisega, siis võiks väärtus olla üsna väike. Juhul kui kasutatakse ka käsurealt PHP&#039;d, siis seal võiks olla see piirang maas (tavaliselt käsurealt käivitatavad rakendused on cronjobid, mis tegelevad näiteks mahukate andmetöötlusprotsessidega, andmete importimisega jne).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/info.configuration.php#ini.max-execution-time&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus, sekundites):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_execution_time = 30&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtus käsurealt käivitades on 0.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_execution_time = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuna max_execution_time parameetri väärtust saab määrata ka jooksvalt ini_set funktsiooni kasutades, võiks algne väärtus olla võimalikult väike. Lisaks võiks kasutada vigade ilmnemiseks arendus- ja testkeskkondades oluliselt väiksemat väärtust kui toodangukeskkonnast.&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set_time_limit(0); // piirangut ei ole&lt;br /&gt;
set_time_limit(10); // piirang on 10 sekundit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jooksvalt võib muuta ajapiirangu suuremaks kui &amp;quot;streamitakse&amp;quot; kasutajale mingeid andmeid PHP&#039;ga (sest sel juhul sõltub see kiirus ka kasutaja interneti ühenduse kiirusest - suutlikusest talle serveeritavat infot vastu võtta).&lt;br /&gt;
&lt;br /&gt;
== Aeguvad parameetrid ==&lt;br /&gt;
NB! Selles peatükis käsitletavad parameetrid on kuulutatud aegunuks (kasutamine annab DEPRECATED vea) alates PHP 5.3&#039;st ning need seaded kaovad ära alates PHP 6&#039;st.&lt;br /&gt;
&lt;br /&gt;
=== safe_mode ===&lt;br /&gt;
&amp;quot;Sade mode&amp;quot; kujutab endast vaikimsi mitte muudetavaid turvalisusele suunatud seadeid. Safe mode parameetri peale panemine (väärtus 1) ei pruugi alati olla &amp;quot;safe&amp;quot;, see tuleks ikkagi eelnevalt läbi testida.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
safe_mode = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
safe_mode = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== magic_quotes_gpc ===&lt;br /&gt;
Parameetriga juhitakse, kas automaatselt &amp;quot;escapeda&amp;quot; kasutaja sisendandmeid &amp;quot;backslashidega&amp;quot; (\). Automaatsed tegevused kasutaja andmetega ei ole head. Lisaks tähendab selle parameetri olemasolu, et kogu programmikood peab arvestama serveri seadetega (et vältida topelt escapemist või escapemise puudumist).&lt;br /&gt;
&lt;br /&gt;
Kuna see parameeter on kuulutatud aegunuks ning kaob ära PHP 6&#039;st, on irooniline, et just magic_quotes_gps on ravim vanade katkiste lehtede juures NULL-Byte rünnakute vastu.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
magic_quotes_gpc = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
magic_quotes_gpc = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Rakenduse kood peab ise tegelema sisendandmete valideerimise ja kontrolliga.&lt;br /&gt;
&lt;br /&gt;
=== register_globals ===&lt;br /&gt;
Julgen väita, et selle parameetri ja võimaluse olemasolu on rikkunud kõige enam PHP mainet (õnneks on sellest ka PHP loojad ise teinud omad järedlused). See laseb olla arendajal laisk ja lohakas ning kirjutada kohutavalt ebaturvalisi rakendusi.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.register-globals&lt;br /&gt;
&lt;br /&gt;
register_globals parameeter annab arendajale võimaluse kasutada Environment, GET, POST, Cookie ja SERVER muutujaid nagu tavalisi muutujaid. Väga lihtne näide (reaalselt eksisteeriv ühes Eesti firma poolt loodud CMS süsteemis) - kui kasutaja logib sisse admin keskkonda, tekitatakse sessioon võtmega &amp;quot;logged_in&amp;quot; (võtme nimi igaks juhuks muudetud).&lt;br /&gt;
Vastava sessioni olemasolu korrektne kontroll oleks:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (isset($_SESSION, $_SESSION[&#039;logged_in&#039;]) &amp;amp;&amp;amp; $_SESSION[&#039;logged_in&#039;] == 1) {&lt;br /&gt;
	// käivitada logimiskontrolli all olev kood siin&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oli aga tehtud nii:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logged_in == 1) {&lt;br /&gt;
	// käivitada logimiskontrolli all olev kood siin&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sellise kontrolli puhul piisab, kui pöörduda administreerimiskeskkonna poole GET päringuga /admin/?logged_in=1 ning ligipääsu kontrollist ollaksegi möödas.&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register_globals = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga vanadel PHP&#039;del (varasemad kui PHP 4.2) oli vaikeväärtuseks 1.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register_globals = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sessioonide haldus ==&lt;br /&gt;
Sessioon on selleks, et hoida kasutaja külastuse kohta andmeid serveril. Sessioonis ei tohiks kindlasti hoida kriitilise tähtsusega andmeid (nagu näiteks lahtise tekstina kasutaja parool).&lt;br /&gt;
&lt;br /&gt;
Antud parameetreid lahates eeldan, et parameetri session.save_handler väärtuseks on vaikimisi väärtus &amp;quot;files&amp;quot; (ehk siis ei ole kirjutatud mõnda oma sessioonide manageerijat).&lt;br /&gt;
&lt;br /&gt;
=== session.autostart ===&lt;br /&gt;
Määrab, kas kasutaja külastuse kohta käivitada automaatselt sessioon. Kui rakenduse iseloom ei vaja kasutaja identifitseerimist (suvaline koduleht), siis ole mõtet ka serverit koormata selle külastuse kohta sessiooni loomisega. Vaikimisi tehakse iga sessiooni jaoks /tmp/ (vt session.save_path parameetrit) ka fail. Ebaturvalise rakenduse korral võib sessiooni fail olla ka LFI2RFE (Local File Include to Remote Code Execution) rünnaku teostamise koht.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.auto-start&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.auto_start = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.auto_start = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Käivitada vajadusel sessioon rakenduse koodis session_start funktsiooniga.&lt;br /&gt;
&lt;br /&gt;
=== session.cookie_httponly ===&lt;br /&gt;
Selle parameetriga juhitakse, kas HTML&#039;s (nt JavaScripti poolt) on sessiooni cookie kättesaadav. Saab raskendada XSS (Cross-Site-Scripting) rünnakute ja cookie&#039;de varastamise rünnakuid.&lt;br /&gt;
See võimalus tekkis PHP&#039;sse alates versioonist 5.2.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.cookie-httponly&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.cookie_httponly = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.cookie_httponly = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== session.hash_function ===&lt;br /&gt;
hash_function määrab, millist algoritmi krüpteerimiseks kasutada. Väärtus 0 tähendab MD5 (128 bitti) ja väärtus 1 SHA-1 (160 bitti) algoritmi.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.hash-function&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.hash_function = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.hash_function = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuna MD5 loetakse tänapäeval juba ebaturvaliseks algoritmiks, siis võiks kasutada väärtust 1 ehk siis algoritmi SHA-1.&lt;br /&gt;
&lt;br /&gt;
=== session.name ===&lt;br /&gt;
Määrab ära, millist sessiooni identifikaatorit kasutada (cookie nimetus). Et mitte alluda automaatsetele XSS cookie varastamise rünnetele, võiks vaikimi nimetuse siiski ära muuta.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.name&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = PHPSESSID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = MyApp-Sid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtuseks lihtsalt midagi muud kui vaikeväärtus.&lt;br /&gt;
&lt;br /&gt;
=== session.save_path ===&lt;br /&gt;
save_path määrab kataloogi, kus hoitakse sessiooni failisid. Vaikeväärtuseks on süsteemi &amp;quot;temporary&amp;quot; kataloog, kuhu võib ka teistel kasutajatel olla &amp;quot;listingu&amp;quot; ja lugemise õigused, st et on võimalik teostada &amp;quot;session hijacking&amp;quot; rünnakuid.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.save-path&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.save_path = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Määramata väärtus tähendab, et kasutada süsteemi vaikimisi väärtust (Linuxi puhul /tmp, Windowsi puhul nt C:\WINDOWS\Temp\)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = /path/to/application/root/session/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Väärtus on võimalik määrata ka scriptis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session_save_path(&#039;/path/to/application/root/session/&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
php manual: http://ee.php.net/manual/en/function.session-save-path.php&lt;br /&gt;
&lt;br /&gt;
=== session.use_only_cookies ===&lt;br /&gt;
Määrab, et sessiooni identifikaatori hoidmine on lubatud ainult küpsistes. Kui kasutaja lehitsejal küpsised ei ole lubatud, siis sessiooni tekitada ei saa. Vastasel juhul hakatakse sessiooni id&#039;d kaasa vedama URL parameetrina, nt PHPSESSID=hash. See aga on oluline turvarisk ning võimaldab väga lihtsalt kasutaja sessiooni varastada (session hijacking rünnak). Piisab sellest, kui kasutaja klikib antud lehel mõnd viidet teisele lehele. Teisele lehele minnes kirjutatakse sinna logidesse (nt külastuste) REFERER, ehk siis mis lehelt kasutaja tuli ja kus oli viide. Viites on aga kaasas tema sessiooni id. Kui keegi saab täpse referer aadressi teada ning läheb sellele, saabki ta omale selle kasutaja sessiooni.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.use-only-cookies&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus alates PHP 5.3&#039;st)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Muud parameetrid ==&lt;br /&gt;
=== short_open_tag ===&lt;br /&gt;
short_open_tag parameeter määrab, kas PHP koodi võib alustada süntaksiga &amp;quot;&amp;lt;?&amp;quot; või &amp;quot;&amp;lt;?php&amp;quot;. Kui rakenduse koodis on alustatud failisid, mille poole pöördutakse &amp;quot;&amp;lt;?&amp;quot; süntaksiga ning parameeter short_open_tag on väärtusega 0, siis kuvatakse pöördujale antud faili PHP lähtekood. Selle parameetri muutmiseks peab veenduma, et PHP kood on ka vastavalt kirjutatud. Mõistlik on kasutada selleks mingeid automaatkontrolle, nt CodeSniffer PEAR packaget (http://pear.php.net/package/PHP_CodeSniffer/redirected).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.short-open-tag&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
short_open_tag = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
short_open_tag = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Muud olulised seadistused =&lt;br /&gt;
== Failide õigused ==&lt;br /&gt;
&lt;br /&gt;
=== Serveri logid ===&lt;br /&gt;
PHP rakendusel ei tohiks olla serveri logide lugemise õigust. Juhul kui rakenduse koodis on viga/turvauk LFI (Local File Include) teostamiseks, on vaja ründajal saada serverisse oma koodi LFI2RCE (Local File Include to Remote Code Execution) rünnaku teostamiseks. PHP koodi saab sokutada ka serveri logidesse, nt Apache logisse võltsides lehitseja USER_AGENT parameetrit (või saata see parameeter curl&#039;i kasutades).&lt;br /&gt;
&lt;br /&gt;
=== Üles laetavad failid ===&lt;br /&gt;
Kataloogidele, kuhu salvestatakse kasutajate poolt üles laetud faile, ei peaks andma failide käivitamise ja kataloogide listingu õigust (x). Samuti tuleb välistada, et kasutaja saaks üles laadida .htaccess failisid.&lt;br /&gt;
&lt;br /&gt;
=== Avalike kataloogide failide nimekirjad ===&lt;br /&gt;
Docroot alamkataloogides olevatele failidele tuleks keelata kataloogide sisu näitamine (kui see just ei ole taotluslik). Tihti asuvad strateegilised rakenduse failid avalikus kataloogis (kuigi ei tohiks!) ning see annab ründajale olulist infot rakenduse ülesehituse kohta.&lt;br /&gt;
Keelata saab seda nii failiõiguste tasemel kui ka Apache seadetega. Veebikülastajate eest peitmiseks piisab kui lisada igasse kataloogi näiteks tühi index.html või index.php nimeline fail.&lt;br /&gt;
&lt;br /&gt;
== Viirusetõrje ==&lt;br /&gt;
Kuna viiruste levitamine kolib ka veebi, siis on igati asjakohane rakendada regulaarset viirusekontrolli veebirakenduse kataloogi sisule.&lt;br /&gt;
&lt;br /&gt;
== Serveri info ==&lt;br /&gt;
Tuleks peita kõik serveri versioone reklaamiv info (nt annab vaikimisi Apache errorleht teada, mis versiooniga on tegu). Kui peaks ilmnema mingi oluline turvaauk, siis ei oleks vähemalt selline info automaatselt tuvastatav (mingite infot koguvate bottide poolt, mis teevad päringuid /thisfiledoesnotexists.php ning saavad versioonid teada).&lt;br /&gt;
&lt;br /&gt;
= Kokkuvõte =&lt;br /&gt;
PHP seadistamisel on palju nüansse, mis vajavad, et arendajad ja administraatorid suhtleks omavahel. Rakenduse loomist alustades peaksid olema kõik seaded määratud &amp;quot;nii on kõige turvalisem&amp;quot; seisukoha järgi. Kui rakendus tõesti vajab oma funktsionaalsuse vajaduste tõttu teisiti, siis saab tagasi muuta.&lt;br /&gt;
&lt;br /&gt;
Väga abiks oleks luua skript, mis kontrollib serveri seadete väärtuseid ja serverilt oodatud seadete väärtuseid. Võib muutuda rakenduse iseloom ja vajadused, tehakse serverisse tarkvara uuendusi jne - sellise kontrolliskripti vastu oleks alati kiiresti ja tõhus kontrollida.&lt;br /&gt;
&lt;br /&gt;
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Ellang</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Diff&amp;diff=6782</id>
		<title>Diff</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Diff&amp;diff=6782"/>
		<updated>2010-04-16T14:02:42Z</updated>

		<summary type="html">&lt;p&gt;Ellang: /* Autor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Võrdlemise tööriist - Diff =&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
[[User:Ellang|Elar Lang]]&amp;lt;br&amp;gt;AK32&lt;br /&gt;
&lt;br /&gt;
== Diff ==&lt;br /&gt;
Tihti on vaja administraatoril saada ülevaade, millised on kahe faili erinevused (näiteks konfiguratsioonifailides).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff fail1 fail2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kasutusala näide ==&lt;br /&gt;
Hea tava näeb ette, et enne konfiguratsioonifailide muutmist tehakse sellest varukoopia.&lt;br /&gt;
Apache httpd.conf konfiguratsioonifaili muutmine ubuntu näitel.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /etc/apache2/httpd.conf /etc/apache2/httpd.conf.backup&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pärast konfiguratsioonimuudatuste teostamist saab diff funktsionaalsust kasutades ülevaate muudatusetest&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff /etc/apache2/httpd.conf /etc/apache2/httpd.conf.backup&lt;br /&gt;
1c1&lt;br /&gt;
&amp;lt; ServerToken Full&lt;br /&gt;
---&lt;br /&gt;
&amp;gt; ServerToken Prod&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tulemusest näeme, et&lt;br /&gt;
* 1c1 - erinevus on esimese rea esimesel tähel (column)&lt;br /&gt;
* Väärtus algses failis (tähistatud &amp;quot;&amp;lt;&amp;quot;), mille vastu võrreldi: ServerToken Full&lt;br /&gt;
* Väärtus teises failis (tähistatud &amp;quot;&amp;gt;&amp;quot;), millega võrreldi: ServerToken Prod&lt;br /&gt;
&lt;br /&gt;
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Ellang</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Diff&amp;diff=6778</id>
		<title>Diff</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Diff&amp;diff=6778"/>
		<updated>2010-04-16T13:44:50Z</updated>

		<summary type="html">&lt;p&gt;Ellang: /* Kasutusala näide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Võrdlemise tööriist - Diff =&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
Elar Lang&amp;lt;br&amp;gt;AK32&lt;br /&gt;
&lt;br /&gt;
== Diff ==&lt;br /&gt;
Tihti on vaja administraatoril saada ülevaade, millised on kahe faili erinevused (näiteks konfiguratsioonifailides).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff fail1 fail2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kasutusala näide ==&lt;br /&gt;
Hea tava näeb ette, et enne konfiguratsioonifailide muutmist tehakse sellest varukoopia.&lt;br /&gt;
Apache httpd.conf konfiguratsioonifaili muutmine ubuntu näitel.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /etc/apache2/httpd.conf /etc/apache2/httpd.conf.backup&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pärast konfiguratsioonimuudatuste teostamist saab diff funktsionaalsust kasutades ülevaate muudatusetest&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff /etc/apache2/httpd.conf /etc/apache2/httpd.conf.backup&lt;br /&gt;
1c1&lt;br /&gt;
&amp;lt; ServerToken Full&lt;br /&gt;
---&lt;br /&gt;
&amp;gt; ServerToken Prod&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tulemusest näeme, et&lt;br /&gt;
* 1c1 - erinevus on esimese rea esimesel tähel (column)&lt;br /&gt;
* Väärtus algses failis (tähistatud &amp;quot;&amp;lt;&amp;quot;), mille vastu võrreldi: ServerToken Full&lt;br /&gt;
* Väärtus teises failis (tähistatud &amp;quot;&amp;gt;&amp;quot;), millega võrreldi: ServerToken Prod&lt;br /&gt;
&lt;br /&gt;
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Ellang</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Diff&amp;diff=6777</id>
		<title>Diff</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Diff&amp;diff=6777"/>
		<updated>2010-04-16T13:43:30Z</updated>

		<summary type="html">&lt;p&gt;Ellang: New page: = Võrdlemise tööriist - Diff =  == Autor == Elar Lang&amp;lt;br&amp;gt;AK32  == Diff == Tihti on vaja administraatoril saada ülevaade, millised on kahe faili erinevused (näiteks konfiguratsioonifai...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Võrdlemise tööriist - Diff =&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
Elar Lang&amp;lt;br&amp;gt;AK32&lt;br /&gt;
&lt;br /&gt;
== Diff ==&lt;br /&gt;
Tihti on vaja administraatoril saada ülevaade, millised on kahe faili erinevused (näiteks konfiguratsioonifailides).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff fail1 fail2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kasutusala näide ==&lt;br /&gt;
Hea tava näeb ette, et enne konfiguratsioonifailide muutmist tehakse sellest varukoopia.&lt;br /&gt;
Apache httpd.conf konfiguratsioonifaili muutmine ubuntu näitel.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /etc/apache2/httpd.conf /etc/apache2/httpd.conf.backup&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pärast konfiguratsioonimuudatuste teostamist saab diff funktsionaalsust kasutades ülevaate muudatusetest&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff /etc/apache2/httpd.conf /etc/apache2/httpd.conf.backup&lt;br /&gt;
1c1&lt;br /&gt;
&amp;lt; ServerToken Full&lt;br /&gt;
---&lt;br /&gt;
&amp;gt; ServerToken Prod&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tulemusest näeme, et&lt;br /&gt;
* 1c1 - erinevus on esimese rea esimesel &amp;quot;columnlil&amp;quot;&lt;br /&gt;
* Väärtus algses failis (tähistatud &amp;quot;&amp;lt;&amp;quot;), mille vastu võrreldi: ServerToken Full&lt;br /&gt;
* Väärtus teises failis (tähistatud &amp;quot;&amp;gt;&amp;quot;), millega võrreldi: ServerToken Prod&lt;br /&gt;
&lt;br /&gt;
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Ellang</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=User:Ellang&amp;diff=6774</id>
		<title>User:Ellang</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=User:Ellang&amp;diff=6774"/>
		<updated>2010-04-16T13:27:09Z</updated>

		<summary type="html">&lt;p&gt;Ellang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vaata jutuvada PHP seadistamise kohta - [[PHP seadistamine]]&lt;br /&gt;
ja ka failide võrdluse kohta [[Diff]]&lt;/div&gt;</summary>
		<author><name>Ellang</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4551</id>
		<title>PHP seadistamine</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4551"/>
		<updated>2010-03-03T17:47:54Z</updated>

		<summary type="html">&lt;p&gt;Ellang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PHP seadistamine =&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
Elar Lang&amp;lt;br&amp;gt;AK32&lt;br /&gt;
&lt;br /&gt;
== Sissejuhatus ==&lt;br /&gt;
Acunitex nimelise turbega tegeleva firma andmetel (http://www.acunetix.com/blog/web-security-zone/articles/statistics-from-the-top-1000000-websites/) on 2010 aasta alguse seisuga 68% veebiserverites Apache ning 70% veebiserverites PHP.&lt;br /&gt;
&lt;br /&gt;
Serverite hooldamise ja PHP rakenduste kirjutamise vahele jääb oluline osa - PHP seadistamine ja rakendusele õigete õiguste määramine. Kuna arendaja võib pidada seda administraatori tööks ning administraator omakorda arendaja tööks, siis võib selle töö tegemise (st tegemata jätmise) juures tekkida oluline turvarisk.&lt;br /&gt;
&lt;br /&gt;
Antud artikli eesmärk on juhtida tähelepanu olulisematele nüanssidele PHP seadistuse juures.&lt;br /&gt;
&lt;br /&gt;
= PHP seadistamine - mida jälgida =&lt;br /&gt;
.. teise nurga alt vaadatuna - mis on enamlevinud ämbrid PHP veebikeskkonna seadistamisel?&lt;br /&gt;
&lt;br /&gt;
== Veateated ==&lt;br /&gt;
=== Kuvamine ===&lt;br /&gt;
Toodangukeskkonnas ei tohi mitte mingil juhul kuvada välja tarkvara poolt tekkinud vigade veateateid. See annab ründajale olulist infot rakenduse ülesehituse kohta ning lihtsustab rünnaku teostamist. Arenduskeskkonnas (ja ka test keskkonnas) peaks aga veateateid kuvama.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.display-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ini_set (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ini_set(&#039;display_errors&#039;, 0); // hide errors&lt;br /&gt;
//ini_set(&#039;display_errors&#039;, 1); // show errors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See ei kuulu küll otseselt PHP seadistamise juurde, kuid reegel peaks ka olema, et programmikood ise ei kuva veateateid välja - näiteks, kui tekib viga SQL päringu teostamisel, siis ei tohi seda mitte mingil juhul toodangu keskkonnas välja kuvada (lihtsustab näiteks SQL injection rünnakute teostamist).&lt;br /&gt;
&lt;br /&gt;
=== Logimine ===&lt;br /&gt;
Kõik tekkinud vead tuleb kindlasti logida, et vajadusel otsida tekkinud vigade põhjuseid (ja põhjustajaid). Veateadete logi tuleks ka jälgida, mitte lihtsalt logida.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.log-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Detailsus ===&lt;br /&gt;
Veateateid tuleks tuvastada võimalikult suure detailsusega. Kindlasti mitte ignoreerida E_NOTICE taseme vigu, sest ka need näitavad välja programmi koodi nõrkuseid või vigu (koodis tekib situatsioon, mida arendaja pole ette näinud).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting&lt;br /&gt;
Eeldefineeritud detailsuse konstandid: http://ee.php.net/manual/en/errorfunc.constants.php&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL&amp;lt;/pre&amp;gt;&lt;br /&gt;
E_ALL ei sisaldanud E_WARNING teateid kuni PHP versioonini 5.2. Alates PHP versioonist 5.3 E_ALL raporteerib kõiki teateid peale E_STRICT teadete. Alates PHP versioonist 6 on E_ALL teadete hulgas ka E_STRICT teated. Tasub jälgida PHP dokumentatsiooni.&lt;br /&gt;
&amp;quot;error_reporting&amp;quot; väärtust saab määrata ka numbrina, igal konstandil on oma numbriline väärtus. Kuid kuna see number võib erinevate PHP versioonide puhul tähendada erinevaid asju (nt E_ALL puhul), siis on turvalisem kasutada selleks ikkagi nimelisi konstante. Samas ei ole eeldefineeritud konstandid kasutatavad kui määrata php seade väärtust Apache httpd.conf või .htaccess vahendusel.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL ~ E_STRICT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ini_set (seade määramine jooksvalt php koodis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
error_reporting(E_ALL ~ E_STRICT);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Failide halduse ja üles laadimise seadistus ==&lt;br /&gt;
&lt;br /&gt;
=== open_basedir ===&lt;br /&gt;
open_basedir parameeter määrab, millistest kataloogidest võib rakendus failisid avada. Vaikimisi on väärtus määratama, mis tähendab, et rakendus saab faile avada tervest serverist (kui failide õigustega seda ei ole piiratud).&lt;br /&gt;
Selle parameetri puudumine annab võimaluste teostada LFI (Local File Include) ründeid kogu failisüsteemi ulatuses.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.open-basedir&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
open_basedir vaikeväärtus PHP&#039;s puudub, st PHP poolt mingeid piiranguid ei ole (loevad vaid failiõigustest tulenevad piirangud).&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = /path/to/application/root/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga mugav oleks määrata open_basedir väärtuseks &amp;quot;.&amp;quot; (ehk siis see sama kataloog, kus skript käivitatakse). See on aga ohtlik, kuna PHP chdir käsuga saab &amp;quot;aktiivse kataloogi&amp;quot; ja seega ka väärtuse &amp;quot;.&amp;quot; tähendust muuta.&lt;br /&gt;
Jälgida tuleks väärtuse (või väärtuste) määramisel, et vajalikele kataloogidele ligipääs alles jääks (nt kui ei ole muudetud upload_tmp_dir väärtust, siis lisada open_basedir väärtusele ka /tmp kataloog).&lt;br /&gt;
&lt;br /&gt;
Saab määrata ka httpd.conf failis (ja ka .htaccess failis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
  php_admin_value open_basedir /path/to/application/root/&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
NB! määrates open_basedir piirangu httpd confi kaudu, ei rakendu see siis kui php käivitada käsurealt (ehk siis kui rakendus ise on juba turvaauguga ja saab tekitada käivitatava php koodi rakenduse alla, siis saab sellest piirangust mööda).&lt;br /&gt;
&lt;br /&gt;
=== allow_url_fopen ===&lt;br /&gt;
Selle parameetriga juhitakse, kas failide avamise funktsioonidel on õigus avada fail üle urli. Kui rakendus sellist võimalust ei vaja, peaks selline võimalus olema keelatud (et välistada RFI (Remote File Include) rünnakuid).&lt;br /&gt;
&lt;br /&gt;
php manual:http://ee.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide avamist üle urli):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== file_uploads ===&lt;br /&gt;
Parameetriga juhitakse, kas HTTP failide üles laadimine on toetatud. Kui rakenduse funktsionaalsus seda võimalust ei vaja, peaks see olema keelatud.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide üles laadimist):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== upload_tmp_dir ===&lt;br /&gt;
Asukoht üles laetavate failide ajutiseks talletamiseks, kuni PHP programm nendega tegeleb. Pärast pöördumist tmp kataloogist failid kustutatakse.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on määramata, kasutatakse süsteemi vaikeväärtust (mis linuxi puhul on /tmp kataloog)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = /path/to/application/root/tmp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
upload_tmp_dir parameetri väärtus ei tohiks kindlasti olla avalikku veebi paistev kataloog (st ei tohi olla &amp;quot;document_root&amp;quot; alamkataloog).&lt;br /&gt;
Vaikeväärtus võiks olla muudetud, kuna failide üleslaadimine on ka üks DoS (Denial of Service) ründemeetodeid. Koormatakse veebiserverit lõputute failide üleslaadimistega, veebiserver tekitab iga faili jaoks &amp;quot;upload_tmp_dir&amp;quot; parameetriga kataloogi ajutisi php* nimelisi faile. Kui DoS rünnaku peale veebiserver hangus, siis võib tekkida olukord, kus tmp kataloogi jäävad need üles laetud ajutised failid alles. Samal ajal LFI (Local File Include) ründevõimalust omades saab ründaja niimoodi sokutada endale vajaliku koodi veebiserverisse.&lt;br /&gt;
&lt;br /&gt;
=== upload_max_filesize ===&lt;br /&gt;
Maksimaalne ühe üles laetava faili suurus.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.upload-max-filesize&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_max_filesize = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui suuri faile ei oodata, ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
=== max_file_uploads ===&lt;br /&gt;
Maksimaalne ühe päringuga üles laetavate failide arv.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.max-file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui mitme faili korraga üles laadimist ei oodata, siis ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
== Muud limiidid ==&lt;br /&gt;
&lt;br /&gt;
=== post_max_size ===&lt;br /&gt;
Maksimaalne postituse suurus. See ei ole nüüd otseselt failide üles laadimise parameeter, kuid üldjuhul rakendub see piirang just failide üles laadimisele.&lt;br /&gt;
Valitud väärtus ei tohiks olla põhjendamatult suur. Kui file_uploads parameetriga on failide üles laadimine välja lülitatud, siis lihtsalt vormide täitmise kaudu eriti mahukaid postitusi lubama ei peaks.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.post-max-size&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = 8M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui kasutatakse failide üles laadimist, siis peaks post_max_size olema suurem kui &amp;quot;upload_max_filesize * max_file_uploads&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== memory_limit ===&lt;br /&gt;
Määrab kui palju on võimalik PHP rakendusel maksimaalselt mälu kasutada. Väärtus peaks olema sõltuvuses rakenduse reaalsete vajadustega. Kehvale rakenduse koodile mälu juurde andmine ei ole lahendus (pikas perspektiivis), sel juhul tuleks kood ringi kirjutada.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.memory-limit&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
memory_limit = 128M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
memory_limit = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Üldjuhul on 128M pisikese PHP rakenduse jaoks väga palju (32MB&#039;st peaks varuga piisama). Kui rakendus juhtub auklik olema ning ründaja suudab oma koodijupi serverisse toimetada, siis on ka temal korralikult ressursse käes mida kasutada.&lt;br /&gt;
&lt;br /&gt;
=== max_execution_time ===&lt;br /&gt;
Määrab maksimaalse PHP skripti töötamise aja. Kui PHP rakendus ei tegele mahukate väljundandmete genereerimisega, siis võiks väärtus olla üsna väike. Juhul kui kasutatakse ka käsurealt PHP&#039;d, siis seal võiks olla see piirang maas (tavaliselt käsurealt käivitatavad rakendused on cronjobid, mis tegelevad näiteks mahukate andmetöötlusprotsessidega, andmete importimisega jne).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/info.configuration.php#ini.max-execution-time&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus, sekundites):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_execution_time = 30&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtus käsurealt käivitades on 0.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_execution_time = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuna max_execution_time parameetri väärtust saab määrata ka jooksvalt ini_set funktsiooni kasutades, võiks algne väärtus olla võimalikult väike. Lisaks võiks kasutada vigade ilmnemiseks arendus- ja testkeskkondades oluliselt väiksemat väärtust kui toodangukeskkonnast.&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set_time_limit(0); // piirangut ei ole&lt;br /&gt;
set_time_limit(10); // piirang on 10 sekundit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jooksvalt võib muuta ajapiirangu suuremaks kui &amp;quot;streamitakse&amp;quot; kasutajale mingeid andmeid PHP&#039;ga (sest sel juhul sõltub see kiirus ka kasutaja interneti ühenduse kiirusest - suutlikusest talle serveeritavat infot vastu võtta).&lt;br /&gt;
&lt;br /&gt;
== Aeguvad parameetrid ==&lt;br /&gt;
NB! Selles peatükis käsitletavad parameetrid on kuulutatud aegunuks (kasutamine annab DEPRECATED vea) alates PHP 5.3&#039;st ning need seaded kaovad ära alates PHP 6&#039;st.&lt;br /&gt;
&lt;br /&gt;
=== safe_mode ===&lt;br /&gt;
&amp;quot;Sade mode&amp;quot; kujutab endast vaikimsi mitte muudetavaid turvalisusele suunatud seadeid. Safe mode parameetri peale panemine (väärtus 1) ei pruugi alati olla &amp;quot;safe&amp;quot;, see tuleks ikkagi eelnevalt läbi testida.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
safe_mode = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
safe_mode = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== magic_quotes_gpc ===&lt;br /&gt;
Parameetriga juhitakse, kas automaatselt &amp;quot;escapeda&amp;quot; kasutaja sisendandmeid &amp;quot;backslashidega&amp;quot; (\). Automaatsed tegevused kasutaja andmetega ei ole head. Lisaks tähendab selle parameetri olemasolu, et kogu programmikood peab arvestama serveri seadetega (et vältida topelt escapemist või escapemise puudumist).&lt;br /&gt;
&lt;br /&gt;
Kuna see parameeter on kuulutatud aegunuks ning kaob ära PHP 6&#039;st, on irooniline, et just magic_quotes_gps on ravim vanade katkiste lehtede juures NULL-Byte rünnakute vastu.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
magic_quotes_gpc = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
magic_quotes_gpc = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Rakenduse kood peab ise tegelema sisendandmete valideerimise ja kontrolliga.&lt;br /&gt;
&lt;br /&gt;
=== register_globals ===&lt;br /&gt;
Julgen väita, et selle parameetri ja võimaluse olemasolu on rikkunud kõige enam PHP mainet (õnneks on sellest ka PHP loojad ise teinud omad järedlused). See laseb olla arendajal laisk ja lohakas ning kirjutada kohutavalt ebaturvalisi rakendusi.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.register-globals&lt;br /&gt;
&lt;br /&gt;
register_globals parameeter annab arendajale võimaluse kasutada Environment, GET, POST, Cookie ja SERVER muutujaid nagu tavalisi muutujaid. Väga lihtne näide (reaalselt eksisteeriv ühes Eesti firma poolt loodud CMS süsteemis) - kui kasutaja logib sisse admin keskkonda, tekitatakse sessioon võtmega &amp;quot;logged_in&amp;quot; (võtme nimi igaks juhuks muudetud).&lt;br /&gt;
Vastava sessioni olemasolu korrektne kontroll oleks:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (isset($_SESSION, $_SESSION[&#039;logged_in&#039;]) &amp;amp;&amp;amp; $_SESSION[&#039;logged_in&#039;] == 1) {&lt;br /&gt;
	// käivitada logimiskontrolli all olev kood siin&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oli aga tehtud nii:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logged_in == 1) {&lt;br /&gt;
	// käivitada logimiskontrolli all olev kood siin&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sellise kontrolli puhul piisab, kui pöörduda administreerimiskeskkonna poole GET päringuga /admin/?logged_in=1 ning ligipääsu kontrollist ollaksegi möödas.&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register_globals = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga vanadel PHP&#039;del (varasemad kui PHP 4.2) oli vaikeväärtuseks 1.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register_globals = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sessioonide haldus ==&lt;br /&gt;
Sessioon on selleks, et hoida kasutaja külastuse kohta andmeid serveril. Sessioonis ei tohiks kindlasti hoida kriitilise tähtsusega andmeid (nagu näiteks lahtise tekstina kasutaja parool).&lt;br /&gt;
&lt;br /&gt;
Antud parameetreid lahates eeldan, et parameetri session.save_handler väärtuseks on vaikimisi väärtus &amp;quot;files&amp;quot; (ehk siis ei ole kirjutatud mõnda oma sessioonide manageerijat).&lt;br /&gt;
&lt;br /&gt;
=== session.autostart ===&lt;br /&gt;
Määrab, kas kasutaja külastuse kohta käivitada automaatselt sessioon. Kui rakenduse iseloom ei vaja kasutaja identifitseerimist (suvaline koduleht), siis ole mõtet ka serverit koormata selle külastuse kohta sessiooni loomisega. Vaikimisi tehakse iga sessiooni jaoks /tmp/ (vt session.save_path parameetrit) ka fail. Ebaturvalise rakenduse korral võib sessiooni fail olla ka LFI2RFE (Local File Include to Remote Code Execution) rünnaku teostamise koht.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.auto-start&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.auto_start = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.auto_start = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Käivitada vajadusel sessioon rakenduse koodis session_start funktsiooniga.&lt;br /&gt;
&lt;br /&gt;
=== session.cookie_httponly ===&lt;br /&gt;
Selle parameetriga juhitakse, kas HTML&#039;s (nt JavaScripti poolt) on sessiooni cookie kättesaadav. Saab raskendada XSS (Cross-Site-Scripting) rünnakute ja cookie&#039;de varastamise rünnakuid.&lt;br /&gt;
See võimalus tekkis PHP&#039;sse alates versioonist 5.2.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.cookie-httponly&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.cookie_httponly = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.cookie_httponly = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== session.hash_function ===&lt;br /&gt;
hash_function määrab, millist algoritmi krüpteerimiseks kasutada. Väärtus 0 tähendab MD5 (128 bitti) ja väärtus 1 SHA-1 (160 bitti) algoritmi.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.hash-function&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.hash_function = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.hash_function = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuna MD5 loetakse tänapäeval juba ebaturvaliseks algoritmiks, siis võiks kasutada väärtust 1 ehk siis algoritmi SHA-1.&lt;br /&gt;
&lt;br /&gt;
=== session.name ===&lt;br /&gt;
Määrab ära, millist sessiooni identifikaatorit kasutada (cookie nimetus). Et mitte alluda automaatsetele XSS cookie varastamise rünnetele, võiks vaikimi nimetuse siiski ära muuta.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.name&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = PHPSESSID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = MyApp-Sid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtuseks lihtsalt midagi muud kui vaikeväärtus.&lt;br /&gt;
&lt;br /&gt;
=== session.save_path ===&lt;br /&gt;
save_path määrab kataloogi, kus hoitakse sessiooni failisid. Vaikeväärtuseks on süsteemi &amp;quot;temporary&amp;quot; kataloog, kuhu võib ka teistel kasutajatel olla &amp;quot;listingu&amp;quot; ja lugemise õigused, st et on võimalik teostada &amp;quot;session hijacking&amp;quot; rünnakuid.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.save-path&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.save_path = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Määramata väärtus tähendab, et kasutada süsteemi vaikimisi väärtust (Linuxi puhul /tmp, Windowsi puhul nt C:\WINDOWS\Temp\)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = /path/to/application/root/session/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Väärtus on võimalik määrata ka scriptis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session_save_path(&#039;/path/to/application/root/session/&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
php manual: http://ee.php.net/manual/en/function.session-save-path.php&lt;br /&gt;
&lt;br /&gt;
=== session.use_only_cookies ===&lt;br /&gt;
Määrab, et sessiooni identifikaatori hoidmine on lubatud ainult küpsistes. Kui kasutaja lehitsejal küpsised ei ole lubatud, siis sessiooni tekitada ei saa. Vastasel juhul hakatakse sessiooni id&#039;d kaasa vedama URL parameetrina, nt PHPSESSID=hash. See aga on oluline turvarisk ning võimaldab väga lihtsalt kasutaja sessiooni varastada (session hijacking rünnak). Piisab sellest, kui kasutaja klikib antud lehel mõnd viidet teisele lehele. Teisele lehele minnes kirjutatakse sinna logidesse (nt külastuste) REFERER, ehk siis mis lehelt kasutaja tuli ja kus oli viide. Viites on aga kaasas tema sessiooni id. Kui keegi saab täpse referer aadressi teada ning läheb sellele, saabki ta omale selle kasutaja sessiooni.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.use-only-cookies&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus alates PHP 5.3&#039;st)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Muud parameetrid ==&lt;br /&gt;
=== short_open_tag ===&lt;br /&gt;
short_open_tag parameeter määrab, kas PHP koodi võib alustada süntaksiga &amp;quot;&amp;lt;?&amp;quot; või &amp;quot;&amp;lt;?php&amp;quot;. Kui rakenduse koodis on alustatud failisid, mille poole pöördutakse &amp;quot;&amp;lt;?&amp;quot; süntaksiga ning parameeter short_open_tag on väärtusega 0, siis kuvatakse pöördujale antud faili PHP lähtekood. Selle parameetri muutmiseks peab veenduma, et PHP kood on ka vastavalt kirjutatud. Mõistlik on kasutada selleks mingeid automaatkontrolle, nt CodeSniffer PEAR packaget (http://pear.php.net/package/PHP_CodeSniffer/redirected).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.short-open-tag&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
short_open_tag = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
short_open_tag = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Muud olulised seadistused =&lt;br /&gt;
== Failide õigused ==&lt;br /&gt;
&lt;br /&gt;
=== Serveri logid ===&lt;br /&gt;
PHP rakendusel ei tohiks olla serveri logide lugemise õigust. Juhul kui rakenduse koodis on viga/turvauk LFI (Local File Include) teostamiseks, on vaja ründajal saada serverisse oma koodi LFI2RCE (Local File Include to Remote Code Execution) rünnaku teostamiseks. PHP koodi saab sokutada ka serveri logidesse, nt Apache logisse võltsides lehitseja USER_AGENT parameetrit (või saata see parameeter curl&#039;i kasutades).&lt;br /&gt;
&lt;br /&gt;
=== Üles laetavad failid ===&lt;br /&gt;
Kataloogidele, kuhu salvestatakse kasutajate poolt üles laetud faile, ei peaks andma failide käivitamise ja kataloogide listingu õigust (x). Samuti tuleb välistada, et kasutaja saaks üles laadida .htaccess failisid.&lt;br /&gt;
&lt;br /&gt;
=== Avalike kataloogide failide nimekirjad ===&lt;br /&gt;
Docroot alamkataloogides olevatele failidele tuleks keelata kataloogide sisu näitamine (kui see just ei ole taotluslik). Tihti asuvad strateegilised rakenduse failid avalikus kataloogis (kuigi ei tohiks!) ning see annab ründajale olulist infot rakenduse ülesehituse kohta.&lt;br /&gt;
Keelata saab seda nii failiõiguste tasemel kui ka Apache seadetega. Veebikülastajate eest peitmiseks piisab kui lisada igasse kataloogi näiteks tühi index.html või index.php nimeline fail.&lt;br /&gt;
&lt;br /&gt;
== Viirusetõrje ==&lt;br /&gt;
Kuna viiruste levitamine kolib ka veebi, siis on igati asjakohane rakendada regulaarset viirusekontrolli veebirakenduse kataloogi sisule.&lt;br /&gt;
&lt;br /&gt;
== Serveri info ==&lt;br /&gt;
Tuleks peita kõik serveri versioone reklaamiv info (nt annab vaikimisi Apache errorleht teada, mis versiooniga on tegu). Kui peaks ilmnema mingi oluline turvaauk, siis ei oleks vähemalt selline info automaatselt tuvastatav (mingite infot koguvate bottide poolt, mis teevad päringuid /thisfiledoesnotexists.php ning saavad versioonid teada).&lt;br /&gt;
&lt;br /&gt;
= Kokkuvõte =&lt;br /&gt;
PHP seadistamisel on palju nüansse, mis vajavad, et arendajad ja administraatorid suhtleks omavahel. Rakenduse loomist alustades peaksid olema kõik seaded määratud &amp;quot;nii on kõige turvalisem&amp;quot; seisukoha järgi. Kui rakendus tõesti vajab oma funktsionaalsuse vajaduste tõttu teisiti, siis saab tagasi muuta.&lt;br /&gt;
&lt;br /&gt;
Väga abiks oleks luua skript, mis kontrollib serveri seadete väärtuseid ja serverilt oodatud seadete väärtuseid. Võib muutuda rakenduse iseloom ja vajadused, tehakse serverisse tarkvara uuendusi jne - sellise kontrolliskripti vastu oleks alati kiiresti ja tõhus kontrollida.&lt;br /&gt;
&lt;br /&gt;
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Ellang</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4080</id>
		<title>PHP seadistamine</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4080"/>
		<updated>2010-02-21T20:40:56Z</updated>

		<summary type="html">&lt;p&gt;Ellang: /* Sissejuhatus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PHP seadistamine =&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
Elar Lang&amp;lt;br&amp;gt;AK32&lt;br /&gt;
&lt;br /&gt;
== Sissejuhatus ==&lt;br /&gt;
Acunitex nimeline turbega tegelev firma andmetel (http://www.acunetix.com/blog/web-security-zone/articles/statistics-from-the-top-1000000-websites/) on 2010 aasta alguse seisuga 68% veebiserverites Apache ning 70% veebiserverites PHP.&lt;br /&gt;
&lt;br /&gt;
Serverite hooldamise ja PHP rakenduste kirjutamise vahele jääb oluline osa - PHP seadistamine ja rakendusele õigete õiguste määramine. Kuna arendaja võib pidada seda administraatori tööks ning administraator omakorda arendaja tööks, siis võib selle töö tegemise (st tegemata jätmise) juures tekkida oluline turvarisk.&lt;br /&gt;
&lt;br /&gt;
Antud kirjatüki eesmärk on juhtida tähelepanu olulisematele nüanssidele PHP seadistuse juures.&lt;br /&gt;
&lt;br /&gt;
= PHP seadistamine - mida jälgida =&lt;br /&gt;
.. teise nurga alt vaadatuna - mis on enamlevinud ämbrid PHP veebikeskkonna seadistamisel?&lt;br /&gt;
&lt;br /&gt;
== Veateated ==&lt;br /&gt;
=== Kuvamine ===&lt;br /&gt;
Toodangukeskkonnas ei tohi mitte mingil juhul kuvada välja tarkvara poolt tekkinud vigade veateateid. See annab ründajale olulist infot rakenduse ülesehituse kohta ning lihtsustab rünnaku teostamist. Arenduskeskkonnas (ja ka test keskkonnas) peaks aga veateateid kuvama.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.display-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ini_set(&#039;display_errors&#039;, 0); // hide errors&lt;br /&gt;
//ini_set(&#039;display_errors&#039;, 1); // show errors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See ei kuulu küll otseselt PHP seadistamise juurde, kuid reegel peaks ka olema, et programmikood ise ei kuva veateateid välja - näiteks, kui tekib viga SQL päringu teostamisel, siis ei tohi seda mitte mingil toodangu keskkonnas juhul välja kuvada (lihtsustab näiteks SQL injection rünnakute teostamist).&lt;br /&gt;
&lt;br /&gt;
=== Logimine ===&lt;br /&gt;
Kõik tekkinud vead tuleb kindlasti maha logida, et vajadusel otsida tekkinud vigae põhjuseid (ja põhjustajaid). Veateadete logi tuleks ka jälgida, mitte lihtsalt logida.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.log-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Detailsus ===&lt;br /&gt;
Veateateid tuleks tuvastada võimalikult suure detailsusega. Kindlasti mitte ignoreerida E_NOTICE taseme vigu, sest ka need näitavad välja koodi nõrkuseid või vigu (koodis tekib situatsioon, mida arendaja pole ette näinud).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting&lt;br /&gt;
Eeldefineeritud detailsuse konstandid: http://ee.php.net/manual/en/errorfunc.constants.php&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuni PHP 5.2&#039;ni E_ALL ei sisaldanud E_WARNING teateid. Alates PHP 5.3&#039;st E_ALL raporteerib kõiki teateid peale E_STRICT teadete. Alates PHP 6&#039;st on E_ALL teadete hulgas ka E_STRICT teated. Tasub jälgida PHP dokumentatsiooni.&lt;br /&gt;
&amp;quot;error_reporting&amp;quot; väärtust saab määrata ka numbrina, igal konstandil on oma numbriline väärtus. Kuid kuna see number võib erinvate PHP versioonide puhul tähendada erinevaid asju (nt E_ALL puhul), siis on turvalisem kasutada selleks ikkagi nimelisi konstante.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL ~ E_STRICT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
error_reporting(E_ALL ~ E_STRICT);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Failide halduse ja üles laadimise seadistus ==&lt;br /&gt;
&lt;br /&gt;
=== open_basedir ===&lt;br /&gt;
open_basedir parameeter määrab, millistest kataloogidest võib rakendus faile avada. Vaikimisi on väärtus määratama, mis tähendab, et rakendus saab faile avada tervest serverist (kui failide õigustega seda ei ole piiratud).&lt;br /&gt;
Selle parameetri puudumine annab võimaluste teostada LFI (Local File Include) ründeid kogu failisüsteemi ulatuses.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.open-basedir&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
open_basedir vaikeväärtus PHP&#039;s puudub, st PHP poolt mingeid piiranguid ei ole (loevad vaid failiõigustest tulenevad piirangud).&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = /path/to/application/root/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga mugav oleks määrata open_basedir väärtuseks &amp;quot;.&amp;quot; (ehk siis see sama kataloog, kus skript käivitatakse). See on aga ohtlik, kuna PHP chdir käsuga saab &amp;quot;aktiivse kataloogi&amp;quot; ja seega ka selle &amp;quot;.&amp;quot; tähendust muuta.&lt;br /&gt;
Jälgida tuleks väärtuse (või väärtuste) määramisel, et vajalikele kataloogidele ligipääs alles jääks (nt kui ei ole muudetud upload_tmp_dir väärtust, siis lisada open_basedir väärtusele ka /tmp kataloog).&lt;br /&gt;
&lt;br /&gt;
Saab määrata ka httpd.conf failis (ja ka .htaccess failis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
  php_admin_value open_basedir /path/to/application/root/&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
NB! määrates open_basedir piirangu httpd confi kaudu, ei rakendu see siis kui php käivitada käsurealt (ehk siis kui rakendus ise on juba turvaauguga ja saab tekitada käivitatava php koodi rakenduse alla, siis saab sellest piirangust mööda).&lt;br /&gt;
&lt;br /&gt;
=== allow_url_fopen ===&lt;br /&gt;
Selle parameetriga juhitakse, kas failide avamise funktsioonidel on õigus avada fail üle urli. Kui rakendus sellist võimalust ei vaja, peaks selline võimalus olema keelatud (et välistada RFI (Remote File Include) rünnakuid).&lt;br /&gt;
&lt;br /&gt;
php manual:http://ee.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide avamist üle urli):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== file_uploads ===&lt;br /&gt;
Parameetriga juhitakse, kas HTTP failide üles laadimine on toetatud. Kui rakenduse funktsionaalsus seda võimalust ei vaja, peaks see olema keelatud.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide üles laadimist):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== upload_tmp_dir ===&lt;br /&gt;
Asukoht üles laetavate failide ajutiseks talletamiseks, kuni PHP programm nendega tegeleb. Pärast pöördumist tmp kataloogist failid kustutatakse.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on määramata, kasutatakse süsteemi vaikeväärtust (mis linuxi puhul on /tmp kataloog)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = /path/to/application/root/tmp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
upload_tmp_dir parameetri väärtus ei tohiks kindlasti olla avalikku veebi paistev kataloog (st ei tohi olla &amp;quot;document_root&amp;quot; alamkataloog).&lt;br /&gt;
Vaikeväärtus võiks olla muudetud, kuna failide üleslaadimine on ka üks DoS (Denial of Service) ründemeetodeid. Koormatakse veebiserverit lõputute failide üleslaadimistega, veebiserver tekitab iga faili jaoks &amp;quot;upload_tmp_dir&amp;quot; parameetriga kataloogi ajutisi php* nimelisi faile. Kui DoS rünnaku peale veebiserver kokku jooksis, siis võib tekkida olukord, kus tmp kataloogi jäävad need üles laetud ajutised failid alles. Samal ajal LFI (Local File Include) ründevõimalust omades saab ründaja niimoodi sokutada endale vajaliku koodi veebiserverisse.&lt;br /&gt;
&lt;br /&gt;
=== upload_max_filesize ===&lt;br /&gt;
Maksimaalne ühe üles laetava faili suurus.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.upload-max-filesize&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_max_filesize = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui suuri faile ei oodata, ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
=== max_file_uploads ===&lt;br /&gt;
Maksimaalne ühe päringuga üles laetavate failide arv.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.max-file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui mitme faili korraga üles laadimist ei oodata, siis ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
== Muud limiidid ==&lt;br /&gt;
&lt;br /&gt;
=== post_max_size ===&lt;br /&gt;
Maksimaalne postituse suurus. See ei ole nüüd otseselt failide üles laadimise parameeter, kuid üldjuhul rakendub see piirang just failide üles laadimisele.&lt;br /&gt;
Valitud väärtus ei tohiks olla põhjendamatult suur. Kui file_uploads parameetriga on failide üles laadimine välja lülitatud, siis lihtsalt vormide täitmise kaudu eriti mahukaid postitusi lubama ei peaks.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.post-max-size&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = 8M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui kasutatakse failide üles laadimist, siis peaks post_max_size olema suurem kui &amp;quot;upload_max_filesize * max_file_uploads&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== memory_limit ===&lt;br /&gt;
Määrab kui palju on võimalik PHP rakendusel maksimaalselt mälu kasutada. Väärtus peaks olema sõltuvuses rakenduse reaalsete vajadustega. Kehvale rakenduse koodile mälu juurde andmine ei ole lahendus (pikas perspektiivis), sel juhul tuleks kood ringi kirjutada.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.memory-limit&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
memory_limit = 128M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
memory_limit = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Üldjuhul on 128M pisikese PHP rakenduse jaoks väga palju (32MB&#039;st peaks varuga piisama). Kui rakendus juhtub auklik olema ning ründaja suudab oma koodijupi serverisse toimetada, siis on ka temal korralikult ressursse käes mida kasutada.&lt;br /&gt;
&lt;br /&gt;
=== max_execution_time ===&lt;br /&gt;
Määrab maksimaalse PHP skripti töötamise aja. Kui PHP rakendus ei tegele mahukate väljundandmete genereerimisega, siis võiks väärtus olla üsna väike. Juhul kui kasutatakse ka käsurealt PHP&#039;d, siis seal võiks olla see piirang maas (tavaliselt käsurealt käivitatavad rakendused on cronjobid, mis tegelevad näiteks mahukate andmetöötlusprotsessidega, andmete importimisega jne).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/info.configuration.php#ini.max-execution-time&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus, sekundites):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_execution_time = 30&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtus käsurealt käivitades on 0.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_execution_time = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuna max_execution_time parameetri väärtust saab määrata ka jooksvalt ini_set funktsiooni kasutades, võiks algne väärtus olla võimalikult väike. Lisaks võiks kasutada vigade ilmnemiseks arendus- ja testkeskkondades oluliselt väiksemat väärtust kui toodangukeskkonnast.&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set_time_limit(0); // piirangut ei ole&lt;br /&gt;
set_time_limit(10); // piirang on 10 sekundit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jooksvalt võib muuta ajapiirangu suuremaks kui &amp;quot;streamitakse&amp;quot; kasutajale mingeid andmeid PHP&#039;ga (sest sel juhul sõltub see kiirus ka kasutaja interneti ühenduse kiirusest - suutlikusest talle serveeritavat infot vastu võtta).&lt;br /&gt;
&lt;br /&gt;
== Aeguvad parameetrid ==&lt;br /&gt;
NB! Selles peatükis käsitletavad parameetrid on kuulutatud aegunuks (kasutamine annab DEPRECATED vea) alates PHP 5.3&#039;st ning need seaded kaovad ära alates PHP 6&#039;st.&lt;br /&gt;
&lt;br /&gt;
=== safe_mode ===&lt;br /&gt;
&amp;quot;Sade mode&amp;quot; kujutab endast vaikimsi mitte muudetavaid turvalisusele suunatud seadeid. Safe mode parameetri peale panemine (väärtus 1) ei pruugi alati olla &amp;quot;safe&amp;quot;, see tuleks ikkagi eelnevalt läbi testida.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
safe_mode = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
safe_mode = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== magic_quotes_gpc ===&lt;br /&gt;
Parameetriga juhitakse, kas automaatselt &amp;quot;escapeda&amp;quot; kasutaja sisendandmeid &amp;quot;backslashidega&amp;quot; (\). Automaatsed tegevused kasutaja andmetega ei ole head. Lisaks tähendab selle parameetri olemasolu, et kogu programmikood peab arvestama serveri seadetega (et vältida topelt escapemist või escapemise puudumist).&lt;br /&gt;
&lt;br /&gt;
Kuna see parameeter on kuulutatud aegunuks ning kaob ära PHP 6&#039;st, on irooniline, et just magic_quotes_gps on ravim vanade katkiste lehtede juures NULL-Byte rünnakute vastu.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
magic_quotes_gpc = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
magic_quotes_gpc = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Rakenduse kood peab ise tegelema sisendandmete valideerimise ja kontrolliga.&lt;br /&gt;
&lt;br /&gt;
=== register_globals ===&lt;br /&gt;
Julgen väita, et selle parameetri ja võimaluse olemasolu on rikkunud kõige enam PHP mainet (õnneks on sellest ka PHP loojad ise teinud omad järedlused). See laseb olla arendajal laisk ja lohakas ning kirjutada kohutavalt ebaturvalisi rakendusi.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.register-globals&lt;br /&gt;
&lt;br /&gt;
register_globals parameeter annab arendajale võimaluse kasutada Environment, GET, POST, Cookie ja SERVER muutujaid nagu tavalisi muutujaid. Väga lihtne näide (reaalselt eksisteeriv ühes Eesti firma poolt loodud CMS süsteemis) - kui kasutaja logib sisse admin keskkonda, tekitatakse sessioon võtmega &amp;quot;logged_in&amp;quot; (võtme nimi igaks juhuks muudetud).&lt;br /&gt;
Vastava sessioni olemasolu korrektne kontroll oleks:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (isset($_SESSION, $_SESSION[&#039;logged_in&#039;]) &amp;amp;&amp;amp; $_SESSION[&#039;logged_in&#039;] == 1) {&lt;br /&gt;
	// käivitada logimiskontrolli all olev kood siin&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oli aga tehtud nii:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logged_in == 1) {&lt;br /&gt;
	// käivitada logimiskontrolli all olev kood siin&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sellise kontrolli puhul piisab, kui pöörduda administreerimiskeskkonna poole GET päringuga /admin/?logged_in=1 ning ligipääsu kontrollist ollaksegi möödas.&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register_globals = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga vanadel PHP&#039;del (varasemad kui PHP 4.2) oli vaikeväärtuseks 1.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register_globals = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sessioonide haldus ==&lt;br /&gt;
Sessioon on selleks, et hoida kasutaja külastuse kohta andmeid serveril. Sessioonis ei tohiks kindlasti hoida kriitilise tähtsusega andmeid (nagu näiteks lahtise tekstina kasutaja parool).&lt;br /&gt;
&lt;br /&gt;
Antud parameetreid lahates eeldan, et parameetri session.save_handler väärtuseks on vaikimisi väärtus &amp;quot;files&amp;quot; (ehk siis ei ole kirjutatud mõnda oma sessioonide manageerijat).&lt;br /&gt;
&lt;br /&gt;
=== session.autostart ===&lt;br /&gt;
Määrab, kas kasutaja külastuse kohta käivitada automaatselt sessioon. Kui rakenduse iseloom ei vaja kasutaja identifitseerimist (suvaline koduleht), siis ole mõtet ka serverit koormata selle külastuse kohta sessiooni loomisega. Vaikimisi tehakse iga sessiooni jaoks /tmp/ (vt session.save_path parameetrit) ka fail. Ebaturvalise rakenduse korral võib sessiooni fail olla ka LFI2RFE (Local File Include to Remote Code Execution) rünnaku teostamise koht.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.auto-start&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.auto_start = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.auto_start = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Käivitada vajadusel sessioon rakenduse koodis session_start funktsiooniga.&lt;br /&gt;
&lt;br /&gt;
=== session.cookie_httponly ===&lt;br /&gt;
Selle parameetriga juhitakse, kas HTML&#039;s (nt JavaScripti poolt) on sessiooni cookie kättesaadav. Saab raskendada XSS (Cross-Site-Scripting) rünnakute ja cookie&#039;de varastamise rünnakuid.&lt;br /&gt;
See võimalus tekkis PHP&#039;sse alates versioonist 5.2.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.cookie-httponly&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.cookie_httponly = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.cookie_httponly = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== session.hash_function ===&lt;br /&gt;
hash_function määrab, millist algoritmi krüpteerimiseks kasutada. Väärtus 0 tähendab MD5 (128 bitti) ja väärtus 1 SHA-1 (160 bitti) algoritmi.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.hash-function&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.hash_function = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.hash_function = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuna MD5 loetakse tänapäeval juba ebaturvaliseks algoritmiks, siis võiks kasutada väärtust 1 ehk siis algoritmi SHA-1.&lt;br /&gt;
&lt;br /&gt;
=== session.name ===&lt;br /&gt;
Määrab ära, millist sessiooni identifikaatorit kasutada (cookie nimetus). Et mitte alluda automaatsetele XSS cookie varastamise rünnetele, võiks vaikimi nimetuse siiski ära muuta.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.name&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = PHPSESSID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = MyApp-Sid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtuseks lihtsalt midagi muud kui vaikeväärtus.&lt;br /&gt;
&lt;br /&gt;
=== session.save_path ===&lt;br /&gt;
save_path määrab kataloogi, kus hoitakse sessiooni failisid. Vaikeväärtuseks on süsteemi &amp;quot;temporary&amp;quot; kataloog, kuhu võib ka teistel kasutajatel olla &amp;quot;listingu&amp;quot; ja lugemise õigused, st et on võimalik teostada &amp;quot;session hijacking&amp;quot; rünnakuid.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.save-path&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.save_path = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Määramata väärtus tähendab, et kasutada süsteemi vaikimisi väärtust (Linuxi puhul /tmp, Windowsi puhul nt C:\WINDOWS\Temp\)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = /path/to/application/root/session/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Väärtus on võimalik määrata ka scriptis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session_save_path(&#039;/path/to/application/root/session/&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
php manual: http://ee.php.net/manual/en/function.session-save-path.php&lt;br /&gt;
&lt;br /&gt;
=== session.use_only_cookies ===&lt;br /&gt;
Määrab, et sessiooni identifikaatori hoidmine on lubatud ainult küpsistes. Kui kasutaja lehitsejal küpsised ei ole lubatud, siis sessiooni tekitada ei saa. Vastasel juhul hakatakse sessiooni id&#039;d kaasa vedama URL parameetrina, nt PHPSESSID=hash. See aga on oluline turvarisk ning võimaldab väga lihtsalt kasutaja sessiooni varastada (session hijacking rünnak). Piisab sellest, kui kasutaja klikib antud lehel mõnd viidet teisele lehele. Teisele lehele minnes kirjutatakse sinna logidesse (nt külastuste) REFERER, ehk siis mis lehelt kasutaja tuli ja kus oli viide. Viites on aga kaasas tema sessiooni id. Kui keegi saab täpse referer aadressi teada ning läheb sellele, saabki ta omale selle kasutaja sessiooni.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.use-only-cookies&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus alates PHP 5.3&#039;st)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Muud parameetrid ==&lt;br /&gt;
=== short_open_tag ===&lt;br /&gt;
short_open_tag parameeter määrab, kas PHP koodi võib alustada süntaksiga &amp;quot;&amp;lt;?&amp;quot; või &amp;quot;&amp;lt;?php&amp;quot;. Kui rakenduse koodis on alustatud failisid, mille poole pöördutakse &amp;quot;&amp;lt;?&amp;quot; süntaksiga ning parameeter short_open_tag on väärtusega 0, siis kuvatakse pöördujale antud faili PHP lähtekood. Selle parameetri muutmiseks peab veenduma, et PHP kood on ka vastavalt kirjutatud. Mõistlik on kasutada selleks mingeid automaatkontrolle, nt CodeSniffer PEAR packaget (http://pear.php.net/package/PHP_CodeSniffer/redirected).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.short-open-tag&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
short_open_tag = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
short_open_tag = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Muud olulised seadistused =&lt;br /&gt;
== Failide õigused ==&lt;br /&gt;
&lt;br /&gt;
=== Serveri logid ===&lt;br /&gt;
PHP rakendusel ei tohiks olla serveri logide lugemise õigust. Juhul kui rakenduse koodis on viga/turvauk LFI (Local File Include) teostamiseks, on vaja ründajal saada serverisse oma koodi LFI2RCE (Local File Include to Remote Code Execution) rünnaku teostamiseks. PHP koodi saab sokutada ka serveri logidesse, nt Apache logisse võltsides lehitseja USER_AGENT parameetrit (või saata see parameeter curl&#039;i kasutades).&lt;br /&gt;
&lt;br /&gt;
=== Üles laetavad failid ===&lt;br /&gt;
Kataloogidele, kuhu salvestatakse kasutajate poolt üles laetud faile, ei peaks andma failide käivitamise ja kataloogide listingu õigust (x). Samuti tuleb välistada, et kasutaja saaks üles laadida .htaccess failisid.&lt;br /&gt;
&lt;br /&gt;
=== Avalike kataloogide failide nimekirjad ===&lt;br /&gt;
Docroot alamkataloogides olevatele failidele tuleks keelata kataloogide sisu näitamine (kui see just ei ole taotluslik). Tihti asuvad strateegilised rakenduse failid avalikus kataloogis (kuigi ei tohiks!) ning see annab ründajale olulist infot rakenduse ülesehituse kohta.&lt;br /&gt;
Keelata saab seda nii failiõiguste tasemel kui ka Apache seadetega. Veebikülastajate eest peitmiseks piisab kui lisada igasse kataloogi näiteks tühi index.html või index.php nimeline fail.&lt;br /&gt;
&lt;br /&gt;
== Viirusetõrje ==&lt;br /&gt;
Kuna viiruste levitamine kolib ka veebi, siis on igati asjakohane rakendada regulaarset viirusekontrolli veebirakenduse kataloogi sisule.&lt;br /&gt;
&lt;br /&gt;
== Serveri info ==&lt;br /&gt;
Tuleks peita kõik serveri versioone reklaamiv info (nt annab vaikimisi Apache errorleht teada, mis versiooniga on tegu). Kui peaks ilmnema mingi oluline turvaauk, siis ei oleks vähemalt selline info automaatselt tuvastatav (mingite infot koguvate bottide poolt, mis teevad päringuid /thisfiledoesnotexists.php ning saavad versioonid teada).&lt;br /&gt;
&lt;br /&gt;
= Kokkuvõte =&lt;br /&gt;
PHP seadistamisel on palju nüansse, mis vajavad, et arendajad ja administraatorid suhtleks omavahel. Rakenduse loomist alustades peaksid olema kõik seaded määratud &amp;quot;nii on kõige turvalisem&amp;quot; seisukoha järgi. Kui rakendus tõesti vajab oma funktsionaalsuse vajaduste tõttu teisiti, siis saab tagasi muuta.&lt;br /&gt;
&lt;br /&gt;
Väga abiks oleks luua skript, mis kontrollib serveri seadete väärtuseid ja serverilt oodatud seadete väärtuseid. Võib muutuda rakenduse iseloom ja vajadused, tehakse serverisse tarkvara uuendusi jne - sellise kontrolliskripti vastu oleks alati kiiresti ja tõhus kontrollida.&lt;br /&gt;
&lt;br /&gt;
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Ellang</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4079</id>
		<title>PHP seadistamine</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4079"/>
		<updated>2010-02-21T20:25:43Z</updated>

		<summary type="html">&lt;p&gt;Ellang: /* session.autostart */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PHP seadistamine =&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
Elar Lang&amp;lt;br&amp;gt;AK32&lt;br /&gt;
&lt;br /&gt;
== Sissejuhatus ==&lt;br /&gt;
Acunitex nimeline turbega tegelev firma andmetel (http://www.acunetix.com/blog/web-security-zone/articles/statistics-from-the-top-1000000-websites/) on 2010 aasta alguse seisuga 68% veebiserverites Apache ning 70% veebiserverites PHP.&lt;br /&gt;
Serverite hooldamise ja PHP rakenduste kirjutamise vahele jääb oluline osa - PHP seadistamine ja rakendusele õigete õiguste määramine. Kuna arendaja võib pidada seda administraatori tööks ning administraator omakorda arendaja tööks, siis võib selle töö tegemise (st tegemata jätmise) juures tekkida oluline turvarisk.&lt;br /&gt;
Antud kirjatüki eesmärk on juhtida tähelepanu olulisematele nüanssidele PHP seadistuse juures.&lt;br /&gt;
&lt;br /&gt;
= PHP seadistamine - mida jälgida =&lt;br /&gt;
.. teise nurga alt vaadatuna - mis on enamlevinud ämbrid PHP veebikeskkonna seadistamisel?&lt;br /&gt;
&lt;br /&gt;
== Veateated ==&lt;br /&gt;
=== Kuvamine ===&lt;br /&gt;
Toodangukeskkonnas ei tohi mitte mingil juhul kuvada välja tarkvara poolt tekkinud vigade veateateid. See annab ründajale olulist infot rakenduse ülesehituse kohta ning lihtsustab rünnaku teostamist. Arenduskeskkonnas (ja ka test keskkonnas) peaks aga veateateid kuvama.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.display-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ini_set(&#039;display_errors&#039;, 0); // hide errors&lt;br /&gt;
//ini_set(&#039;display_errors&#039;, 1); // show errors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See ei kuulu küll otseselt PHP seadistamise juurde, kuid reegel peaks ka olema, et programmikood ise ei kuva veateateid välja - näiteks, kui tekib viga SQL päringu teostamisel, siis ei tohi seda mitte mingil toodangu keskkonnas juhul välja kuvada (lihtsustab näiteks SQL injection rünnakute teostamist).&lt;br /&gt;
&lt;br /&gt;
=== Logimine ===&lt;br /&gt;
Kõik tekkinud vead tuleb kindlasti maha logida, et vajadusel otsida tekkinud vigae põhjuseid (ja põhjustajaid). Veateadete logi tuleks ka jälgida, mitte lihtsalt logida.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.log-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Detailsus ===&lt;br /&gt;
Veateateid tuleks tuvastada võimalikult suure detailsusega. Kindlasti mitte ignoreerida E_NOTICE taseme vigu, sest ka need näitavad välja koodi nõrkuseid või vigu (koodis tekib situatsioon, mida arendaja pole ette näinud).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting&lt;br /&gt;
Eeldefineeritud detailsuse konstandid: http://ee.php.net/manual/en/errorfunc.constants.php&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuni PHP 5.2&#039;ni E_ALL ei sisaldanud E_WARNING teateid. Alates PHP 5.3&#039;st E_ALL raporteerib kõiki teateid peale E_STRICT teadete. Alates PHP 6&#039;st on E_ALL teadete hulgas ka E_STRICT teated. Tasub jälgida PHP dokumentatsiooni.&lt;br /&gt;
&amp;quot;error_reporting&amp;quot; väärtust saab määrata ka numbrina, igal konstandil on oma numbriline väärtus. Kuid kuna see number võib erinvate PHP versioonide puhul tähendada erinevaid asju (nt E_ALL puhul), siis on turvalisem kasutada selleks ikkagi nimelisi konstante.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL ~ E_STRICT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
error_reporting(E_ALL ~ E_STRICT);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Failide halduse ja üles laadimise seadistus ==&lt;br /&gt;
&lt;br /&gt;
=== open_basedir ===&lt;br /&gt;
open_basedir parameeter määrab, millistest kataloogidest võib rakendus faile avada. Vaikimisi on väärtus määratama, mis tähendab, et rakendus saab faile avada tervest serverist (kui failide õigustega seda ei ole piiratud).&lt;br /&gt;
Selle parameetri puudumine annab võimaluste teostada LFI (Local File Include) ründeid kogu failisüsteemi ulatuses.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.open-basedir&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
open_basedir vaikeväärtus PHP&#039;s puudub, st PHP poolt mingeid piiranguid ei ole (loevad vaid failiõigustest tulenevad piirangud).&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = /path/to/application/root/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga mugav oleks määrata open_basedir väärtuseks &amp;quot;.&amp;quot; (ehk siis see sama kataloog, kus skript käivitatakse). See on aga ohtlik, kuna PHP chdir käsuga saab &amp;quot;aktiivse kataloogi&amp;quot; ja seega ka selle &amp;quot;.&amp;quot; tähendust muuta.&lt;br /&gt;
Jälgida tuleks väärtuse (või väärtuste) määramisel, et vajalikele kataloogidele ligipääs alles jääks (nt kui ei ole muudetud upload_tmp_dir väärtust, siis lisada open_basedir väärtusele ka /tmp kataloog).&lt;br /&gt;
&lt;br /&gt;
Saab määrata ka httpd.conf failis (ja ka .htaccess failis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
  php_admin_value open_basedir /path/to/application/root/&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
NB! määrates open_basedir piirangu httpd confi kaudu, ei rakendu see siis kui php käivitada käsurealt (ehk siis kui rakendus ise on juba turvaauguga ja saab tekitada käivitatava php koodi rakenduse alla, siis saab sellest piirangust mööda).&lt;br /&gt;
&lt;br /&gt;
=== allow_url_fopen ===&lt;br /&gt;
Selle parameetriga juhitakse, kas failide avamise funktsioonidel on õigus avada fail üle urli. Kui rakendus sellist võimalust ei vaja, peaks selline võimalus olema keelatud (et välistada RFI (Remote File Include) rünnakuid).&lt;br /&gt;
&lt;br /&gt;
php manual:http://ee.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide avamist üle urli):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== file_uploads ===&lt;br /&gt;
Parameetriga juhitakse, kas HTTP failide üles laadimine on toetatud. Kui rakenduse funktsionaalsus seda võimalust ei vaja, peaks see olema keelatud.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide üles laadimist):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== upload_tmp_dir ===&lt;br /&gt;
Asukoht üles laetavate failide ajutiseks talletamiseks, kuni PHP programm nendega tegeleb. Pärast pöördumist tmp kataloogist failid kustutatakse.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on määramata, kasutatakse süsteemi vaikeväärtust (mis linuxi puhul on /tmp kataloog)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = /path/to/application/root/tmp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
upload_tmp_dir parameetri väärtus ei tohiks kindlasti olla avalikku veebi paistev kataloog (st ei tohi olla &amp;quot;document_root&amp;quot; alamkataloog).&lt;br /&gt;
Vaikeväärtus võiks olla muudetud, kuna failide üleslaadimine on ka üks DoS (Denial of Service) ründemeetodeid. Koormatakse veebiserverit lõputute failide üleslaadimistega, veebiserver tekitab iga faili jaoks &amp;quot;upload_tmp_dir&amp;quot; parameetriga kataloogi ajutisi php* nimelisi faile. Kui DoS rünnaku peale veebiserver kokku jooksis, siis võib tekkida olukord, kus tmp kataloogi jäävad need üles laetud ajutised failid alles. Samal ajal LFI (Local File Include) ründevõimalust omades saab ründaja niimoodi sokutada endale vajaliku koodi veebiserverisse.&lt;br /&gt;
&lt;br /&gt;
=== upload_max_filesize ===&lt;br /&gt;
Maksimaalne ühe üles laetava faili suurus.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.upload-max-filesize&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_max_filesize = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui suuri faile ei oodata, ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
=== max_file_uploads ===&lt;br /&gt;
Maksimaalne ühe päringuga üles laetavate failide arv.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.max-file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui mitme faili korraga üles laadimist ei oodata, siis ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
== Muud limiidid ==&lt;br /&gt;
&lt;br /&gt;
=== post_max_size ===&lt;br /&gt;
Maksimaalne postituse suurus. See ei ole nüüd otseselt failide üles laadimise parameeter, kuid üldjuhul rakendub see piirang just failide üles laadimisele.&lt;br /&gt;
Valitud väärtus ei tohiks olla põhjendamatult suur. Kui file_uploads parameetriga on failide üles laadimine välja lülitatud, siis lihtsalt vormide täitmise kaudu eriti mahukaid postitusi lubama ei peaks.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.post-max-size&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = 8M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui kasutatakse failide üles laadimist, siis peaks post_max_size olema suurem kui &amp;quot;upload_max_filesize * max_file_uploads&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== memory_limit ===&lt;br /&gt;
Määrab kui palju on võimalik PHP rakendusel maksimaalselt mälu kasutada. Väärtus peaks olema sõltuvuses rakenduse reaalsete vajadustega. Kehvale rakenduse koodile mälu juurde andmine ei ole lahendus (pikas perspektiivis), sel juhul tuleks kood ringi kirjutada.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.memory-limit&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
memory_limit = 128M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
memory_limit = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Üldjuhul on 128M pisikese PHP rakenduse jaoks väga palju (32MB&#039;st peaks varuga piisama). Kui rakendus juhtub auklik olema ning ründaja suudab oma koodijupi serverisse toimetada, siis on ka temal korralikult ressursse käes mida kasutada.&lt;br /&gt;
&lt;br /&gt;
=== max_execution_time ===&lt;br /&gt;
Määrab maksimaalse PHP skripti töötamise aja. Kui PHP rakendus ei tegele mahukate väljundandmete genereerimisega, siis võiks väärtus olla üsna väike. Juhul kui kasutatakse ka käsurealt PHP&#039;d, siis seal võiks olla see piirang maas (tavaliselt käsurealt käivitatavad rakendused on cronjobid, mis tegelevad näiteks mahukate andmetöötlusprotsessidega, andmete importimisega jne).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/info.configuration.php#ini.max-execution-time&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus, sekundites):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_execution_time = 30&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtus käsurealt käivitades on 0.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_execution_time = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuna max_execution_time parameetri väärtust saab määrata ka jooksvalt ini_set funktsiooni kasutades, võiks algne väärtus olla võimalikult väike. Lisaks võiks kasutada vigade ilmnemiseks arendus- ja testkeskkondades oluliselt väiksemat väärtust kui toodangukeskkonnast.&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set_time_limit(0); // piirangut ei ole&lt;br /&gt;
set_time_limit(10); // piirang on 10 sekundit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jooksvalt võib muuta ajapiirangu suuremaks kui &amp;quot;streamitakse&amp;quot; kasutajale mingeid andmeid PHP&#039;ga (sest sel juhul sõltub see kiirus ka kasutaja interneti ühenduse kiirusest - suutlikusest talle serveeritavat infot vastu võtta).&lt;br /&gt;
&lt;br /&gt;
== Aeguvad parameetrid ==&lt;br /&gt;
NB! Selles peatükis käsitletavad parameetrid on kuulutatud aegunuks (kasutamine annab DEPRECATED vea) alates PHP 5.3&#039;st ning need seaded kaovad ära alates PHP 6&#039;st.&lt;br /&gt;
&lt;br /&gt;
=== safe_mode ===&lt;br /&gt;
&amp;quot;Sade mode&amp;quot; kujutab endast vaikimsi mitte muudetavaid turvalisusele suunatud seadeid. Safe mode parameetri peale panemine (väärtus 1) ei pruugi alati olla &amp;quot;safe&amp;quot;, see tuleks ikkagi eelnevalt läbi testida.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
safe_mode = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
safe_mode = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== magic_quotes_gpc ===&lt;br /&gt;
Parameetriga juhitakse, kas automaatselt &amp;quot;escapeda&amp;quot; kasutaja sisendandmeid &amp;quot;backslashidega&amp;quot; (\). Automaatsed tegevused kasutaja andmetega ei ole head. Lisaks tähendab selle parameetri olemasolu, et kogu programmikood peab arvestama serveri seadetega (et vältida topelt escapemist või escapemise puudumist).&lt;br /&gt;
&lt;br /&gt;
Kuna see parameeter on kuulutatud aegunuks ning kaob ära PHP 6&#039;st, on irooniline, et just magic_quotes_gps on ravim vanade katkiste lehtede juures NULL-Byte rünnakute vastu.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
magic_quotes_gpc = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
magic_quotes_gpc = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Rakenduse kood peab ise tegelema sisendandmete valideerimise ja kontrolliga.&lt;br /&gt;
&lt;br /&gt;
=== register_globals ===&lt;br /&gt;
Julgen väita, et selle parameetri ja võimaluse olemasolu on rikkunud kõige enam PHP mainet (õnneks on sellest ka PHP loojad ise teinud omad järedlused). See laseb olla arendajal laisk ja lohakas ning kirjutada kohutavalt ebaturvalisi rakendusi.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.register-globals&lt;br /&gt;
&lt;br /&gt;
register_globals parameeter annab arendajale võimaluse kasutada Environment, GET, POST, Cookie ja SERVER muutujaid nagu tavalisi muutujaid. Väga lihtne näide (reaalselt eksisteeriv ühes Eesti firma poolt loodud CMS süsteemis) - kui kasutaja logib sisse admin keskkonda, tekitatakse sessioon võtmega &amp;quot;logged_in&amp;quot; (võtme nimi igaks juhuks muudetud).&lt;br /&gt;
Vastava sessioni olemasolu korrektne kontroll oleks:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (isset($_SESSION, $_SESSION[&#039;logged_in&#039;]) &amp;amp;&amp;amp; $_SESSION[&#039;logged_in&#039;] == 1) {&lt;br /&gt;
	// käivitada logimiskontrolli all olev kood siin&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oli aga tehtud nii:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logged_in == 1) {&lt;br /&gt;
	// käivitada logimiskontrolli all olev kood siin&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sellise kontrolli puhul piisab, kui pöörduda administreerimiskeskkonna poole GET päringuga /admin/?logged_in=1 ning ligipääsu kontrollist ollaksegi möödas.&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register_globals = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga vanadel PHP&#039;del (varasemad kui PHP 4.2) oli vaikeväärtuseks 1.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register_globals = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sessioonide haldus ==&lt;br /&gt;
Sessioon on selleks, et hoida kasutaja külastuse kohta andmeid serveril. Sessioonis ei tohiks kindlasti hoida kriitilise tähtsusega andmeid (nagu näiteks lahtise tekstina kasutaja parool).&lt;br /&gt;
&lt;br /&gt;
Antud parameetreid lahates eeldan, et parameetri session.save_handler väärtuseks on vaikimisi väärtus &amp;quot;files&amp;quot; (ehk siis ei ole kirjutatud mõnda oma sessioonide manageerijat).&lt;br /&gt;
&lt;br /&gt;
=== session.autostart ===&lt;br /&gt;
Määrab, kas kasutaja külastuse kohta käivitada automaatselt sessioon. Kui rakenduse iseloom ei vaja kasutaja identifitseerimist (suvaline koduleht), siis ole mõtet ka serverit koormata selle külastuse kohta sessiooni loomisega. Vaikimisi tehakse iga sessiooni jaoks /tmp/ (vt session.save_path parameetrit) ka fail. Ebaturvalise rakenduse korral võib sessiooni fail olla ka LFI2RFE (Local File Include to Remote Code Execution) rünnaku teostamise koht.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.auto-start&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.auto_start = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.auto_start = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Käivitada vajadusel sessioon rakenduse koodis session_start funktsiooniga.&lt;br /&gt;
&lt;br /&gt;
=== session.cookie_httponly ===&lt;br /&gt;
Selle parameetriga juhitakse, kas HTML&#039;s (nt JavaScripti poolt) on sessiooni cookie kättesaadav. Saab raskendada XSS (Cross-Site-Scripting) rünnakute ja cookie&#039;de varastamise rünnakuid.&lt;br /&gt;
See võimalus tekkis PHP&#039;sse alates versioonist 5.2.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.cookie-httponly&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.cookie_httponly = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.cookie_httponly = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== session.hash_function ===&lt;br /&gt;
hash_function määrab, millist algoritmi krüpteerimiseks kasutada. Väärtus 0 tähendab MD5 (128 bitti) ja väärtus 1 SHA-1 (160 bitti) algoritmi.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.hash-function&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.hash_function = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.hash_function = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuna MD5 loetakse tänapäeval juba ebaturvaliseks algoritmiks, siis võiks kasutada väärtust 1 ehk siis algoritmi SHA-1.&lt;br /&gt;
&lt;br /&gt;
=== session.name ===&lt;br /&gt;
Määrab ära, millist sessiooni identifikaatorit kasutada (cookie nimetus). Et mitte alluda automaatsetele XSS cookie varastamise rünnetele, võiks vaikimi nimetuse siiski ära muuta.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.name&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = PHPSESSID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = MyApp-Sid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtuseks lihtsalt midagi muud kui vaikeväärtus.&lt;br /&gt;
&lt;br /&gt;
=== session.save_path ===&lt;br /&gt;
save_path määrab kataloogi, kus hoitakse sessiooni failisid. Vaikeväärtuseks on süsteemi &amp;quot;temporary&amp;quot; kataloog, kuhu võib ka teistel kasutajatel olla &amp;quot;listingu&amp;quot; ja lugemise õigused, st et on võimalik teostada &amp;quot;session hijacking&amp;quot; rünnakuid.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.save-path&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.save_path = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Määramata väärtus tähendab, et kasutada süsteemi vaikimisi väärtust (Linuxi puhul /tmp, Windowsi puhul nt C:\WINDOWS\Temp\)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = /path/to/application/root/session/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Väärtus on võimalik määrata ka scriptis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session_save_path(&#039;/path/to/application/root/session/&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
php manual: http://ee.php.net/manual/en/function.session-save-path.php&lt;br /&gt;
&lt;br /&gt;
=== session.use_only_cookies ===&lt;br /&gt;
Määrab, et sessiooni identifikaatori hoidmine on lubatud ainult küpsistes. Kui kasutaja lehitsejal küpsised ei ole lubatud, siis sessiooni tekitada ei saa. Vastasel juhul hakatakse sessiooni id&#039;d kaasa vedama URL parameetrina, nt PHPSESSID=hash. See aga on oluline turvarisk ning võimaldab väga lihtsalt kasutaja sessiooni varastada (session hijacking rünnak). Piisab sellest, kui kasutaja klikib antud lehel mõnd viidet teisele lehele. Teisele lehele minnes kirjutatakse sinna logidesse (nt külastuste) REFERER, ehk siis mis lehelt kasutaja tuli ja kus oli viide. Viites on aga kaasas tema sessiooni id. Kui keegi saab täpse referer aadressi teada ning läheb sellele, saabki ta omale selle kasutaja sessiooni.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.use-only-cookies&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus alates PHP 5.3&#039;st)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Muud parameetrid ==&lt;br /&gt;
=== short_open_tag ===&lt;br /&gt;
short_open_tag parameeter määrab, kas PHP koodi võib alustada süntaksiga &amp;quot;&amp;lt;?&amp;quot; või &amp;quot;&amp;lt;?php&amp;quot;. Kui rakenduse koodis on alustatud failisid, mille poole pöördutakse &amp;quot;&amp;lt;?&amp;quot; süntaksiga ning parameeter short_open_tag on väärtusega 0, siis kuvatakse pöördujale antud faili PHP lähtekood. Selle parameetri muutmiseks peab veenduma, et PHP kood on ka vastavalt kirjutatud. Mõistlik on kasutada selleks mingeid automaatkontrolle, nt CodeSniffer PEAR packaget (http://pear.php.net/package/PHP_CodeSniffer/redirected).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.short-open-tag&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
short_open_tag = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
short_open_tag = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Muud olulised seadistused =&lt;br /&gt;
== Failide õigused ==&lt;br /&gt;
&lt;br /&gt;
=== Serveri logid ===&lt;br /&gt;
PHP rakendusel ei tohiks olla serveri logide lugemise õigust. Juhul kui rakenduse koodis on viga/turvauk LFI (Local File Include) teostamiseks, on vaja ründajal saada serverisse oma koodi LFI2RCE (Local File Include to Remote Code Execution) rünnaku teostamiseks. PHP koodi saab sokutada ka serveri logidesse, nt Apache logisse võltsides lehitseja USER_AGENT parameetrit (või saata see parameeter curl&#039;i kasutades).&lt;br /&gt;
&lt;br /&gt;
=== Üles laetavad failid ===&lt;br /&gt;
Kataloogidele, kuhu salvestatakse kasutajate poolt üles laetud faile, ei peaks andma failide käivitamise ja kataloogide listingu õigust (x). Samuti tuleb välistada, et kasutaja saaks üles laadida .htaccess failisid.&lt;br /&gt;
&lt;br /&gt;
=== Avalike kataloogide failide nimekirjad ===&lt;br /&gt;
Docroot alamkataloogides olevatele failidele tuleks keelata kataloogide sisu näitamine (kui see just ei ole taotluslik). Tihti asuvad strateegilised rakenduse failid avalikus kataloogis (kuigi ei tohiks!) ning see annab ründajale olulist infot rakenduse ülesehituse kohta.&lt;br /&gt;
Keelata saab seda nii failiõiguste tasemel kui ka Apache seadetega. Veebikülastajate eest peitmiseks piisab kui lisada igasse kataloogi näiteks tühi index.html või index.php nimeline fail.&lt;br /&gt;
&lt;br /&gt;
== Viirusetõrje ==&lt;br /&gt;
Kuna viiruste levitamine kolib ka veebi, siis on igati asjakohane rakendada regulaarset viirusekontrolli veebirakenduse kataloogi sisule.&lt;br /&gt;
&lt;br /&gt;
== Serveri info ==&lt;br /&gt;
Tuleks peita kõik serveri versioone reklaamiv info (nt annab vaikimisi Apache errorleht teada, mis versiooniga on tegu). Kui peaks ilmnema mingi oluline turvaauk, siis ei oleks vähemalt selline info automaatselt tuvastatav (mingite infot koguvate bottide poolt, mis teevad päringuid /thisfiledoesnotexists.php ning saavad versioonid teada).&lt;br /&gt;
&lt;br /&gt;
= Kokkuvõte =&lt;br /&gt;
PHP seadistamisel on palju nüansse, mis vajavad, et arendajad ja administraatorid suhtleks omavahel. Rakenduse loomist alustades peaksid olema kõik seaded määratud &amp;quot;nii on kõige turvalisem&amp;quot; seisukoha järgi. Kui rakendus tõesti vajab oma funktsionaalsuse vajaduste tõttu teisiti, siis saab tagasi muuta.&lt;br /&gt;
&lt;br /&gt;
Väga abiks oleks luua skript, mis kontrollib serveri seadete väärtuseid ja serverilt oodatud seadete väärtuseid. Võib muutuda rakenduse iseloom ja vajadused, tehakse serverisse tarkvara uuendusi jne - sellise kontrolliskripti vastu oleks alati kiiresti ja tõhus kontrollida.&lt;br /&gt;
&lt;br /&gt;
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Ellang</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4078</id>
		<title>PHP seadistamine</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4078"/>
		<updated>2010-02-21T20:21:48Z</updated>

		<summary type="html">&lt;p&gt;Ellang: /* Aeguvad parameetrid, PHP kurjajuured */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PHP seadistamine =&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
Elar Lang&amp;lt;br&amp;gt;AK32&lt;br /&gt;
&lt;br /&gt;
== Sissejuhatus ==&lt;br /&gt;
Acunitex nimeline turbega tegelev firma andmetel (http://www.acunetix.com/blog/web-security-zone/articles/statistics-from-the-top-1000000-websites/) on 2010 aasta alguse seisuga 68% veebiserverites Apache ning 70% veebiserverites PHP.&lt;br /&gt;
Serverite hooldamise ja PHP rakenduste kirjutamise vahele jääb oluline osa - PHP seadistamine ja rakendusele õigete õiguste määramine. Kuna arendaja võib pidada seda administraatori tööks ning administraator omakorda arendaja tööks, siis võib selle töö tegemise (st tegemata jätmise) juures tekkida oluline turvarisk.&lt;br /&gt;
Antud kirjatüki eesmärk on juhtida tähelepanu olulisematele nüanssidele PHP seadistuse juures.&lt;br /&gt;
&lt;br /&gt;
= PHP seadistamine - mida jälgida =&lt;br /&gt;
.. teise nurga alt vaadatuna - mis on enamlevinud ämbrid PHP veebikeskkonna seadistamisel?&lt;br /&gt;
&lt;br /&gt;
== Veateated ==&lt;br /&gt;
=== Kuvamine ===&lt;br /&gt;
Toodangukeskkonnas ei tohi mitte mingil juhul kuvada välja tarkvara poolt tekkinud vigade veateateid. See annab ründajale olulist infot rakenduse ülesehituse kohta ning lihtsustab rünnaku teostamist. Arenduskeskkonnas (ja ka test keskkonnas) peaks aga veateateid kuvama.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.display-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ini_set(&#039;display_errors&#039;, 0); // hide errors&lt;br /&gt;
//ini_set(&#039;display_errors&#039;, 1); // show errors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See ei kuulu küll otseselt PHP seadistamise juurde, kuid reegel peaks ka olema, et programmikood ise ei kuva veateateid välja - näiteks, kui tekib viga SQL päringu teostamisel, siis ei tohi seda mitte mingil toodangu keskkonnas juhul välja kuvada (lihtsustab näiteks SQL injection rünnakute teostamist).&lt;br /&gt;
&lt;br /&gt;
=== Logimine ===&lt;br /&gt;
Kõik tekkinud vead tuleb kindlasti maha logida, et vajadusel otsida tekkinud vigae põhjuseid (ja põhjustajaid). Veateadete logi tuleks ka jälgida, mitte lihtsalt logida.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.log-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Detailsus ===&lt;br /&gt;
Veateateid tuleks tuvastada võimalikult suure detailsusega. Kindlasti mitte ignoreerida E_NOTICE taseme vigu, sest ka need näitavad välja koodi nõrkuseid või vigu (koodis tekib situatsioon, mida arendaja pole ette näinud).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting&lt;br /&gt;
Eeldefineeritud detailsuse konstandid: http://ee.php.net/manual/en/errorfunc.constants.php&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuni PHP 5.2&#039;ni E_ALL ei sisaldanud E_WARNING teateid. Alates PHP 5.3&#039;st E_ALL raporteerib kõiki teateid peale E_STRICT teadete. Alates PHP 6&#039;st on E_ALL teadete hulgas ka E_STRICT teated. Tasub jälgida PHP dokumentatsiooni.&lt;br /&gt;
&amp;quot;error_reporting&amp;quot; väärtust saab määrata ka numbrina, igal konstandil on oma numbriline väärtus. Kuid kuna see number võib erinvate PHP versioonide puhul tähendada erinevaid asju (nt E_ALL puhul), siis on turvalisem kasutada selleks ikkagi nimelisi konstante.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL ~ E_STRICT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
error_reporting(E_ALL ~ E_STRICT);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Failide halduse ja üles laadimise seadistus ==&lt;br /&gt;
&lt;br /&gt;
=== open_basedir ===&lt;br /&gt;
open_basedir parameeter määrab, millistest kataloogidest võib rakendus faile avada. Vaikimisi on väärtus määratama, mis tähendab, et rakendus saab faile avada tervest serverist (kui failide õigustega seda ei ole piiratud).&lt;br /&gt;
Selle parameetri puudumine annab võimaluste teostada LFI (Local File Include) ründeid kogu failisüsteemi ulatuses.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.open-basedir&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
open_basedir vaikeväärtus PHP&#039;s puudub, st PHP poolt mingeid piiranguid ei ole (loevad vaid failiõigustest tulenevad piirangud).&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = /path/to/application/root/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga mugav oleks määrata open_basedir väärtuseks &amp;quot;.&amp;quot; (ehk siis see sama kataloog, kus skript käivitatakse). See on aga ohtlik, kuna PHP chdir käsuga saab &amp;quot;aktiivse kataloogi&amp;quot; ja seega ka selle &amp;quot;.&amp;quot; tähendust muuta.&lt;br /&gt;
Jälgida tuleks väärtuse (või väärtuste) määramisel, et vajalikele kataloogidele ligipääs alles jääks (nt kui ei ole muudetud upload_tmp_dir väärtust, siis lisada open_basedir väärtusele ka /tmp kataloog).&lt;br /&gt;
&lt;br /&gt;
Saab määrata ka httpd.conf failis (ja ka .htaccess failis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
  php_admin_value open_basedir /path/to/application/root/&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
NB! määrates open_basedir piirangu httpd confi kaudu, ei rakendu see siis kui php käivitada käsurealt (ehk siis kui rakendus ise on juba turvaauguga ja saab tekitada käivitatava php koodi rakenduse alla, siis saab sellest piirangust mööda).&lt;br /&gt;
&lt;br /&gt;
=== allow_url_fopen ===&lt;br /&gt;
Selle parameetriga juhitakse, kas failide avamise funktsioonidel on õigus avada fail üle urli. Kui rakendus sellist võimalust ei vaja, peaks selline võimalus olema keelatud (et välistada RFI (Remote File Include) rünnakuid).&lt;br /&gt;
&lt;br /&gt;
php manual:http://ee.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide avamist üle urli):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== file_uploads ===&lt;br /&gt;
Parameetriga juhitakse, kas HTTP failide üles laadimine on toetatud. Kui rakenduse funktsionaalsus seda võimalust ei vaja, peaks see olema keelatud.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide üles laadimist):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== upload_tmp_dir ===&lt;br /&gt;
Asukoht üles laetavate failide ajutiseks talletamiseks, kuni PHP programm nendega tegeleb. Pärast pöördumist tmp kataloogist failid kustutatakse.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on määramata, kasutatakse süsteemi vaikeväärtust (mis linuxi puhul on /tmp kataloog)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = /path/to/application/root/tmp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
upload_tmp_dir parameetri väärtus ei tohiks kindlasti olla avalikku veebi paistev kataloog (st ei tohi olla &amp;quot;document_root&amp;quot; alamkataloog).&lt;br /&gt;
Vaikeväärtus võiks olla muudetud, kuna failide üleslaadimine on ka üks DoS (Denial of Service) ründemeetodeid. Koormatakse veebiserverit lõputute failide üleslaadimistega, veebiserver tekitab iga faili jaoks &amp;quot;upload_tmp_dir&amp;quot; parameetriga kataloogi ajutisi php* nimelisi faile. Kui DoS rünnaku peale veebiserver kokku jooksis, siis võib tekkida olukord, kus tmp kataloogi jäävad need üles laetud ajutised failid alles. Samal ajal LFI (Local File Include) ründevõimalust omades saab ründaja niimoodi sokutada endale vajaliku koodi veebiserverisse.&lt;br /&gt;
&lt;br /&gt;
=== upload_max_filesize ===&lt;br /&gt;
Maksimaalne ühe üles laetava faili suurus.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.upload-max-filesize&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_max_filesize = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui suuri faile ei oodata, ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
=== max_file_uploads ===&lt;br /&gt;
Maksimaalne ühe päringuga üles laetavate failide arv.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.max-file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui mitme faili korraga üles laadimist ei oodata, siis ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
== Muud limiidid ==&lt;br /&gt;
&lt;br /&gt;
=== post_max_size ===&lt;br /&gt;
Maksimaalne postituse suurus. See ei ole nüüd otseselt failide üles laadimise parameeter, kuid üldjuhul rakendub see piirang just failide üles laadimisele.&lt;br /&gt;
Valitud väärtus ei tohiks olla põhjendamatult suur. Kui file_uploads parameetriga on failide üles laadimine välja lülitatud, siis lihtsalt vormide täitmise kaudu eriti mahukaid postitusi lubama ei peaks.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.post-max-size&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = 8M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui kasutatakse failide üles laadimist, siis peaks post_max_size olema suurem kui &amp;quot;upload_max_filesize * max_file_uploads&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== memory_limit ===&lt;br /&gt;
Määrab kui palju on võimalik PHP rakendusel maksimaalselt mälu kasutada. Väärtus peaks olema sõltuvuses rakenduse reaalsete vajadustega. Kehvale rakenduse koodile mälu juurde andmine ei ole lahendus (pikas perspektiivis), sel juhul tuleks kood ringi kirjutada.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.memory-limit&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
memory_limit = 128M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
memory_limit = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Üldjuhul on 128M pisikese PHP rakenduse jaoks väga palju (32MB&#039;st peaks varuga piisama). Kui rakendus juhtub auklik olema ning ründaja suudab oma koodijupi serverisse toimetada, siis on ka temal korralikult ressursse käes mida kasutada.&lt;br /&gt;
&lt;br /&gt;
=== max_execution_time ===&lt;br /&gt;
Määrab maksimaalse PHP skripti töötamise aja. Kui PHP rakendus ei tegele mahukate väljundandmete genereerimisega, siis võiks väärtus olla üsna väike. Juhul kui kasutatakse ka käsurealt PHP&#039;d, siis seal võiks olla see piirang maas (tavaliselt käsurealt käivitatavad rakendused on cronjobid, mis tegelevad näiteks mahukate andmetöötlusprotsessidega, andmete importimisega jne).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/info.configuration.php#ini.max-execution-time&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus, sekundites):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_execution_time = 30&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtus käsurealt käivitades on 0.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_execution_time = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuna max_execution_time parameetri väärtust saab määrata ka jooksvalt ini_set funktsiooni kasutades, võiks algne väärtus olla võimalikult väike. Lisaks võiks kasutada vigade ilmnemiseks arendus- ja testkeskkondades oluliselt väiksemat väärtust kui toodangukeskkonnast.&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set_time_limit(0); // piirangut ei ole&lt;br /&gt;
set_time_limit(10); // piirang on 10 sekundit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jooksvalt võib muuta ajapiirangu suuremaks kui &amp;quot;streamitakse&amp;quot; kasutajale mingeid andmeid PHP&#039;ga (sest sel juhul sõltub see kiirus ka kasutaja interneti ühenduse kiirusest - suutlikusest talle serveeritavat infot vastu võtta).&lt;br /&gt;
&lt;br /&gt;
== Aeguvad parameetrid ==&lt;br /&gt;
NB! Selles peatükis käsitletavad parameetrid on kuulutatud aegunuks (kasutamine annab DEPRECATED vea) alates PHP 5.3&#039;st ning need seaded kaovad ära alates PHP 6&#039;st.&lt;br /&gt;
&lt;br /&gt;
=== safe_mode ===&lt;br /&gt;
&amp;quot;Sade mode&amp;quot; kujutab endast vaikimsi mitte muudetavaid turvalisusele suunatud seadeid. Safe mode parameetri peale panemine (väärtus 1) ei pruugi alati olla &amp;quot;safe&amp;quot;, see tuleks ikkagi eelnevalt läbi testida.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
safe_mode = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
safe_mode = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== magic_quotes_gpc ===&lt;br /&gt;
Parameetriga juhitakse, kas automaatselt &amp;quot;escapeda&amp;quot; kasutaja sisendandmeid &amp;quot;backslashidega&amp;quot; (\). Automaatsed tegevused kasutaja andmetega ei ole head. Lisaks tähendab selle parameetri olemasolu, et kogu programmikood peab arvestama serveri seadetega (et vältida topelt escapemist või escapemise puudumist).&lt;br /&gt;
&lt;br /&gt;
Kuna see parameeter on kuulutatud aegunuks ning kaob ära PHP 6&#039;st, on irooniline, et just magic_quotes_gps on ravim vanade katkiste lehtede juures NULL-Byte rünnakute vastu.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
magic_quotes_gpc = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
magic_quotes_gpc = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Rakenduse kood peab ise tegelema sisendandmete valideerimise ja kontrolliga.&lt;br /&gt;
&lt;br /&gt;
=== register_globals ===&lt;br /&gt;
Julgen väita, et selle parameetri ja võimaluse olemasolu on rikkunud kõige enam PHP mainet (õnneks on sellest ka PHP loojad ise teinud omad järedlused). See laseb olla arendajal laisk ja lohakas ning kirjutada kohutavalt ebaturvalisi rakendusi.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.register-globals&lt;br /&gt;
&lt;br /&gt;
register_globals parameeter annab arendajale võimaluse kasutada Environment, GET, POST, Cookie ja SERVER muutujaid nagu tavalisi muutujaid. Väga lihtne näide (reaalselt eksisteeriv ühes Eesti firma poolt loodud CMS süsteemis) - kui kasutaja logib sisse admin keskkonda, tekitatakse sessioon võtmega &amp;quot;logged_in&amp;quot; (võtme nimi igaks juhuks muudetud).&lt;br /&gt;
Vastava sessioni olemasolu korrektne kontroll oleks:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (isset($_SESSION, $_SESSION[&#039;logged_in&#039;]) &amp;amp;&amp;amp; $_SESSION[&#039;logged_in&#039;] == 1) {&lt;br /&gt;
	// käivitada logimiskontrolli all olev kood siin&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oli aga tehtud nii:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logged_in == 1) {&lt;br /&gt;
	// käivitada logimiskontrolli all olev kood siin&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sellise kontrolli puhul piisab, kui pöörduda administreerimiskeskkonna poole GET päringuga /admin/?logged_in=1 ning ligipääsu kontrollist ollaksegi möödas.&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register_globals = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga vanadel PHP&#039;del (varasemad kui PHP 4.2) oli vaikeväärtuseks 1.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register_globals = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sessioonide haldus ==&lt;br /&gt;
Sessioon on selleks, et hoida kasutaja külastuse kohta andmeid serveril. Sessioonis ei tohiks kindlasti hoida kriitilise tähtsusega andmeid (nagu näiteks lahtise tekstina kasutaja parool).&lt;br /&gt;
&lt;br /&gt;
Antud parameetreid lahates eeldan, et parameetri session.save_handler väärtuseks on vaikimisi väärtus &amp;quot;files&amp;quot; (ehk siis ei ole kirjutatud mõnda oma sessioonide manageerijat).&lt;br /&gt;
&lt;br /&gt;
=== session.autostart ===&lt;br /&gt;
Määrab, kas kasutaja külastuse kohta käivitada automaatselt sessioon. Kui rakenduse iseloom ei vaja kasutaja identifitseerimist (suvaline koduleht), siis ole mõtet ka serverit koormata selle külastuse kohta sessiooni loomisega. Vaikimisi tehakse iga sessiooni jaoks /tmp/ (vt session.save_path parameetrit) ka fail. Ebaturvalise rakenduse korral võib sessiooni fail olla ka LFI2RFE (Local File Inclusion to Remote Code Execution) rünnaku teostamise koht.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.auto-start&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.auto_start = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.auto_start = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Käivitada vajadusel sessioon rakenduse koodis session_start funktsiooniga.&lt;br /&gt;
&lt;br /&gt;
=== session.cookie_httponly ===&lt;br /&gt;
Selle parameetriga juhitakse, kas HTML&#039;s (nt JavaScripti poolt) on sessiooni cookie kättesaadav. Saab raskendada XSS (Cross-Site-Scripting) rünnakute ja cookie&#039;de varastamise rünnakuid.&lt;br /&gt;
See võimalus tekkis PHP&#039;sse alates versioonist 5.2.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.cookie-httponly&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.cookie_httponly = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.cookie_httponly = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== session.hash_function ===&lt;br /&gt;
hash_function määrab, millist algoritmi krüpteerimiseks kasutada. Väärtus 0 tähendab MD5 (128 bitti) ja väärtus 1 SHA-1 (160 bitti) algoritmi.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.hash-function&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.hash_function = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.hash_function = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuna MD5 loetakse tänapäeval juba ebaturvaliseks algoritmiks, siis võiks kasutada väärtust 1 ehk siis algoritmi SHA-1.&lt;br /&gt;
&lt;br /&gt;
=== session.name ===&lt;br /&gt;
Määrab ära, millist sessiooni identifikaatorit kasutada (cookie nimetus). Et mitte alluda automaatsetele XSS cookie varastamise rünnetele, võiks vaikimi nimetuse siiski ära muuta.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.name&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = PHPSESSID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = MyApp-Sid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtuseks lihtsalt midagi muud kui vaikeväärtus.&lt;br /&gt;
&lt;br /&gt;
=== session.save_path ===&lt;br /&gt;
save_path määrab kataloogi, kus hoitakse sessiooni failisid. Vaikeväärtuseks on süsteemi &amp;quot;temporary&amp;quot; kataloog, kuhu võib ka teistel kasutajatel olla &amp;quot;listingu&amp;quot; ja lugemise õigused, st et on võimalik teostada &amp;quot;session hijacking&amp;quot; rünnakuid.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.save-path&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.save_path = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Määramata väärtus tähendab, et kasutada süsteemi vaikimisi väärtust (Linuxi puhul /tmp, Windowsi puhul nt C:\WINDOWS\Temp\)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = /path/to/application/root/session/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Väärtus on võimalik määrata ka scriptis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session_save_path(&#039;/path/to/application/root/session/&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
php manual: http://ee.php.net/manual/en/function.session-save-path.php&lt;br /&gt;
&lt;br /&gt;
=== session.use_only_cookies ===&lt;br /&gt;
Määrab, et sessiooni identifikaatori hoidmine on lubatud ainult küpsistes. Kui kasutaja lehitsejal küpsised ei ole lubatud, siis sessiooni tekitada ei saa. Vastasel juhul hakatakse sessiooni id&#039;d kaasa vedama URL parameetrina, nt PHPSESSID=hash. See aga on oluline turvarisk ning võimaldab väga lihtsalt kasutaja sessiooni varastada (session hijacking rünnak). Piisab sellest, kui kasutaja klikib antud lehel mõnd viidet teisele lehele. Teisele lehele minnes kirjutatakse sinna logidesse (nt külastuste) REFERER, ehk siis mis lehelt kasutaja tuli ja kus oli viide. Viites on aga kaasas tema sessiooni id. Kui keegi saab täpse referer aadressi teada ning läheb sellele, saabki ta omale selle kasutaja sessiooni.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.use-only-cookies&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus alates PHP 5.3&#039;st)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Muud parameetrid ==&lt;br /&gt;
=== short_open_tag ===&lt;br /&gt;
short_open_tag parameeter määrab, kas PHP koodi võib alustada süntaksiga &amp;quot;&amp;lt;?&amp;quot; või &amp;quot;&amp;lt;?php&amp;quot;. Kui rakenduse koodis on alustatud failisid, mille poole pöördutakse &amp;quot;&amp;lt;?&amp;quot; süntaksiga ning parameeter short_open_tag on väärtusega 0, siis kuvatakse pöördujale antud faili PHP lähtekood. Selle parameetri muutmiseks peab veenduma, et PHP kood on ka vastavalt kirjutatud. Mõistlik on kasutada selleks mingeid automaatkontrolle, nt CodeSniffer PEAR packaget (http://pear.php.net/package/PHP_CodeSniffer/redirected).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.short-open-tag&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
short_open_tag = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
short_open_tag = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Muud olulised seadistused =&lt;br /&gt;
== Failide õigused ==&lt;br /&gt;
&lt;br /&gt;
=== Serveri logid ===&lt;br /&gt;
PHP rakendusel ei tohiks olla serveri logide lugemise õigust. Juhul kui rakenduse koodis on viga/turvauk LFI (Local File Include) teostamiseks, on vaja ründajal saada serverisse oma koodi LFI2RCE (Local File Include to Remote Code Execution) rünnaku teostamiseks. PHP koodi saab sokutada ka serveri logidesse, nt Apache logisse võltsides lehitseja USER_AGENT parameetrit (või saata see parameeter curl&#039;i kasutades).&lt;br /&gt;
&lt;br /&gt;
=== Üles laetavad failid ===&lt;br /&gt;
Kataloogidele, kuhu salvestatakse kasutajate poolt üles laetud faile, ei peaks andma failide käivitamise ja kataloogide listingu õigust (x). Samuti tuleb välistada, et kasutaja saaks üles laadida .htaccess failisid.&lt;br /&gt;
&lt;br /&gt;
=== Avalike kataloogide failide nimekirjad ===&lt;br /&gt;
Docroot alamkataloogides olevatele failidele tuleks keelata kataloogide sisu näitamine (kui see just ei ole taotluslik). Tihti asuvad strateegilised rakenduse failid avalikus kataloogis (kuigi ei tohiks!) ning see annab ründajale olulist infot rakenduse ülesehituse kohta.&lt;br /&gt;
Keelata saab seda nii failiõiguste tasemel kui ka Apache seadetega. Veebikülastajate eest peitmiseks piisab kui lisada igasse kataloogi näiteks tühi index.html või index.php nimeline fail.&lt;br /&gt;
&lt;br /&gt;
== Viirusetõrje ==&lt;br /&gt;
Kuna viiruste levitamine kolib ka veebi, siis on igati asjakohane rakendada regulaarset viirusekontrolli veebirakenduse kataloogi sisule.&lt;br /&gt;
&lt;br /&gt;
== Serveri info ==&lt;br /&gt;
Tuleks peita kõik serveri versioone reklaamiv info (nt annab vaikimisi Apache errorleht teada, mis versiooniga on tegu). Kui peaks ilmnema mingi oluline turvaauk, siis ei oleks vähemalt selline info automaatselt tuvastatav (mingite infot koguvate bottide poolt, mis teevad päringuid /thisfiledoesnotexists.php ning saavad versioonid teada).&lt;br /&gt;
&lt;br /&gt;
= Kokkuvõte =&lt;br /&gt;
PHP seadistamisel on palju nüansse, mis vajavad, et arendajad ja administraatorid suhtleks omavahel. Rakenduse loomist alustades peaksid olema kõik seaded määratud &amp;quot;nii on kõige turvalisem&amp;quot; seisukoha järgi. Kui rakendus tõesti vajab oma funktsionaalsuse vajaduste tõttu teisiti, siis saab tagasi muuta.&lt;br /&gt;
&lt;br /&gt;
Väga abiks oleks luua skript, mis kontrollib serveri seadete väärtuseid ja serverilt oodatud seadete väärtuseid. Võib muutuda rakenduse iseloom ja vajadused, tehakse serverisse tarkvara uuendusi jne - sellise kontrolliskripti vastu oleks alati kiiresti ja tõhus kontrollida.&lt;br /&gt;
&lt;br /&gt;
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Ellang</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4077</id>
		<title>PHP seadistamine</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4077"/>
		<updated>2010-02-21T20:19:03Z</updated>

		<summary type="html">&lt;p&gt;Ellang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PHP seadistamine =&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
Elar Lang&amp;lt;br&amp;gt;AK32&lt;br /&gt;
&lt;br /&gt;
== Sissejuhatus ==&lt;br /&gt;
Acunitex nimeline turbega tegelev firma andmetel (http://www.acunetix.com/blog/web-security-zone/articles/statistics-from-the-top-1000000-websites/) on 2010 aasta alguse seisuga 68% veebiserverites Apache ning 70% veebiserverites PHP.&lt;br /&gt;
Serverite hooldamise ja PHP rakenduste kirjutamise vahele jääb oluline osa - PHP seadistamine ja rakendusele õigete õiguste määramine. Kuna arendaja võib pidada seda administraatori tööks ning administraator omakorda arendaja tööks, siis võib selle töö tegemise (st tegemata jätmise) juures tekkida oluline turvarisk.&lt;br /&gt;
Antud kirjatüki eesmärk on juhtida tähelepanu olulisematele nüanssidele PHP seadistuse juures.&lt;br /&gt;
&lt;br /&gt;
= PHP seadistamine - mida jälgida =&lt;br /&gt;
.. teise nurga alt vaadatuna - mis on enamlevinud ämbrid PHP veebikeskkonna seadistamisel?&lt;br /&gt;
&lt;br /&gt;
== Veateated ==&lt;br /&gt;
=== Kuvamine ===&lt;br /&gt;
Toodangukeskkonnas ei tohi mitte mingil juhul kuvada välja tarkvara poolt tekkinud vigade veateateid. See annab ründajale olulist infot rakenduse ülesehituse kohta ning lihtsustab rünnaku teostamist. Arenduskeskkonnas (ja ka test keskkonnas) peaks aga veateateid kuvama.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.display-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ini_set(&#039;display_errors&#039;, 0); // hide errors&lt;br /&gt;
//ini_set(&#039;display_errors&#039;, 1); // show errors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See ei kuulu küll otseselt PHP seadistamise juurde, kuid reegel peaks ka olema, et programmikood ise ei kuva veateateid välja - näiteks, kui tekib viga SQL päringu teostamisel, siis ei tohi seda mitte mingil toodangu keskkonnas juhul välja kuvada (lihtsustab näiteks SQL injection rünnakute teostamist).&lt;br /&gt;
&lt;br /&gt;
=== Logimine ===&lt;br /&gt;
Kõik tekkinud vead tuleb kindlasti maha logida, et vajadusel otsida tekkinud vigae põhjuseid (ja põhjustajaid). Veateadete logi tuleks ka jälgida, mitte lihtsalt logida.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.log-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Detailsus ===&lt;br /&gt;
Veateateid tuleks tuvastada võimalikult suure detailsusega. Kindlasti mitte ignoreerida E_NOTICE taseme vigu, sest ka need näitavad välja koodi nõrkuseid või vigu (koodis tekib situatsioon, mida arendaja pole ette näinud).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting&lt;br /&gt;
Eeldefineeritud detailsuse konstandid: http://ee.php.net/manual/en/errorfunc.constants.php&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuni PHP 5.2&#039;ni E_ALL ei sisaldanud E_WARNING teateid. Alates PHP 5.3&#039;st E_ALL raporteerib kõiki teateid peale E_STRICT teadete. Alates PHP 6&#039;st on E_ALL teadete hulgas ka E_STRICT teated. Tasub jälgida PHP dokumentatsiooni.&lt;br /&gt;
&amp;quot;error_reporting&amp;quot; väärtust saab määrata ka numbrina, igal konstandil on oma numbriline väärtus. Kuid kuna see number võib erinvate PHP versioonide puhul tähendada erinevaid asju (nt E_ALL puhul), siis on turvalisem kasutada selleks ikkagi nimelisi konstante.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL ~ E_STRICT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
error_reporting(E_ALL ~ E_STRICT);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Failide halduse ja üles laadimise seadistus ==&lt;br /&gt;
&lt;br /&gt;
=== open_basedir ===&lt;br /&gt;
open_basedir parameeter määrab, millistest kataloogidest võib rakendus faile avada. Vaikimisi on väärtus määratama, mis tähendab, et rakendus saab faile avada tervest serverist (kui failide õigustega seda ei ole piiratud).&lt;br /&gt;
Selle parameetri puudumine annab võimaluste teostada LFI (Local File Include) ründeid kogu failisüsteemi ulatuses.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.open-basedir&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
open_basedir vaikeväärtus PHP&#039;s puudub, st PHP poolt mingeid piiranguid ei ole (loevad vaid failiõigustest tulenevad piirangud).&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = /path/to/application/root/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga mugav oleks määrata open_basedir väärtuseks &amp;quot;.&amp;quot; (ehk siis see sama kataloog, kus skript käivitatakse). See on aga ohtlik, kuna PHP chdir käsuga saab &amp;quot;aktiivse kataloogi&amp;quot; ja seega ka selle &amp;quot;.&amp;quot; tähendust muuta.&lt;br /&gt;
Jälgida tuleks väärtuse (või väärtuste) määramisel, et vajalikele kataloogidele ligipääs alles jääks (nt kui ei ole muudetud upload_tmp_dir väärtust, siis lisada open_basedir väärtusele ka /tmp kataloog).&lt;br /&gt;
&lt;br /&gt;
Saab määrata ka httpd.conf failis (ja ka .htaccess failis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
  php_admin_value open_basedir /path/to/application/root/&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
NB! määrates open_basedir piirangu httpd confi kaudu, ei rakendu see siis kui php käivitada käsurealt (ehk siis kui rakendus ise on juba turvaauguga ja saab tekitada käivitatava php koodi rakenduse alla, siis saab sellest piirangust mööda).&lt;br /&gt;
&lt;br /&gt;
=== allow_url_fopen ===&lt;br /&gt;
Selle parameetriga juhitakse, kas failide avamise funktsioonidel on õigus avada fail üle urli. Kui rakendus sellist võimalust ei vaja, peaks selline võimalus olema keelatud (et välistada RFI (Remote File Include) rünnakuid).&lt;br /&gt;
&lt;br /&gt;
php manual:http://ee.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide avamist üle urli):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== file_uploads ===&lt;br /&gt;
Parameetriga juhitakse, kas HTTP failide üles laadimine on toetatud. Kui rakenduse funktsionaalsus seda võimalust ei vaja, peaks see olema keelatud.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide üles laadimist):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== upload_tmp_dir ===&lt;br /&gt;
Asukoht üles laetavate failide ajutiseks talletamiseks, kuni PHP programm nendega tegeleb. Pärast pöördumist tmp kataloogist failid kustutatakse.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on määramata, kasutatakse süsteemi vaikeväärtust (mis linuxi puhul on /tmp kataloog)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = /path/to/application/root/tmp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
upload_tmp_dir parameetri väärtus ei tohiks kindlasti olla avalikku veebi paistev kataloog (st ei tohi olla &amp;quot;document_root&amp;quot; alamkataloog).&lt;br /&gt;
Vaikeväärtus võiks olla muudetud, kuna failide üleslaadimine on ka üks DoS (Denial of Service) ründemeetodeid. Koormatakse veebiserverit lõputute failide üleslaadimistega, veebiserver tekitab iga faili jaoks &amp;quot;upload_tmp_dir&amp;quot; parameetriga kataloogi ajutisi php* nimelisi faile. Kui DoS rünnaku peale veebiserver kokku jooksis, siis võib tekkida olukord, kus tmp kataloogi jäävad need üles laetud ajutised failid alles. Samal ajal LFI (Local File Include) ründevõimalust omades saab ründaja niimoodi sokutada endale vajaliku koodi veebiserverisse.&lt;br /&gt;
&lt;br /&gt;
=== upload_max_filesize ===&lt;br /&gt;
Maksimaalne ühe üles laetava faili suurus.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.upload-max-filesize&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_max_filesize = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui suuri faile ei oodata, ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
=== max_file_uploads ===&lt;br /&gt;
Maksimaalne ühe päringuga üles laetavate failide arv.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.max-file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui mitme faili korraga üles laadimist ei oodata, siis ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
== Muud limiidid ==&lt;br /&gt;
&lt;br /&gt;
=== post_max_size ===&lt;br /&gt;
Maksimaalne postituse suurus. See ei ole nüüd otseselt failide üles laadimise parameeter, kuid üldjuhul rakendub see piirang just failide üles laadimisele.&lt;br /&gt;
Valitud väärtus ei tohiks olla põhjendamatult suur. Kui file_uploads parameetriga on failide üles laadimine välja lülitatud, siis lihtsalt vormide täitmise kaudu eriti mahukaid postitusi lubama ei peaks.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.post-max-size&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = 8M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui kasutatakse failide üles laadimist, siis peaks post_max_size olema suurem kui &amp;quot;upload_max_filesize * max_file_uploads&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== memory_limit ===&lt;br /&gt;
Määrab kui palju on võimalik PHP rakendusel maksimaalselt mälu kasutada. Väärtus peaks olema sõltuvuses rakenduse reaalsete vajadustega. Kehvale rakenduse koodile mälu juurde andmine ei ole lahendus (pikas perspektiivis), sel juhul tuleks kood ringi kirjutada.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.memory-limit&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
memory_limit = 128M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
memory_limit = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Üldjuhul on 128M pisikese PHP rakenduse jaoks väga palju (32MB&#039;st peaks varuga piisama). Kui rakendus juhtub auklik olema ning ründaja suudab oma koodijupi serverisse toimetada, siis on ka temal korralikult ressursse käes mida kasutada.&lt;br /&gt;
&lt;br /&gt;
=== max_execution_time ===&lt;br /&gt;
Määrab maksimaalse PHP skripti töötamise aja. Kui PHP rakendus ei tegele mahukate väljundandmete genereerimisega, siis võiks väärtus olla üsna väike. Juhul kui kasutatakse ka käsurealt PHP&#039;d, siis seal võiks olla see piirang maas (tavaliselt käsurealt käivitatavad rakendused on cronjobid, mis tegelevad näiteks mahukate andmetöötlusprotsessidega, andmete importimisega jne).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/info.configuration.php#ini.max-execution-time&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus, sekundites):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_execution_time = 30&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtus käsurealt käivitades on 0.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_execution_time = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuna max_execution_time parameetri väärtust saab määrata ka jooksvalt ini_set funktsiooni kasutades, võiks algne väärtus olla võimalikult väike. Lisaks võiks kasutada vigade ilmnemiseks arendus- ja testkeskkondades oluliselt väiksemat väärtust kui toodangukeskkonnast.&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set_time_limit(0); // piirangut ei ole&lt;br /&gt;
set_time_limit(10); // piirang on 10 sekundit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jooksvalt võib muuta ajapiirangu suuremaks kui &amp;quot;streamitakse&amp;quot; kasutajale mingeid andmeid PHP&#039;ga (sest sel juhul sõltub see kiirus ka kasutaja interneti ühenduse kiirusest - suutlikusest talle serveeritavat infot vastu võtta).&lt;br /&gt;
&lt;br /&gt;
== Aeguvad parameetrid, PHP kurjajuured ==&lt;br /&gt;
NB! Selles peatükis käsitletavad parameetrid on kuulutatud aegunuks (kasutamine annab DEPRECATED vea) alates PHP 5.3&#039;st ning need seaded kaovad ära alates PHP 6&#039;st.&lt;br /&gt;
&lt;br /&gt;
=== safe_mode ===&lt;br /&gt;
&amp;quot;Sade mode&amp;quot; kujutab endast vaikimsi mitte muudetavaid turvalisusele suunatud seadeid. Safe mode parameetri peale panemine (väärtus 1) ei pruugi alati olla &amp;quot;safe&amp;quot;, see tuleks ikkagi eelnevalt läbi testida.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
safe_mode = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
safe_mode = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== magic_quotes_gpc ===&lt;br /&gt;
Parameetriga juhitakse, kas automaatselt &amp;quot;escapeda&amp;quot; kasutaja sisendandmeid &amp;quot;backslashidega&amp;quot; (\). Automaatsed tegevused kasutaja andmetega ei ole head. Lisaks tähendab selle parameetri olemasolu, et kogu programmikood peab arvestama serveri seadetega (et vältida topelt escapemist või escapemise puudumist).&lt;br /&gt;
&lt;br /&gt;
Kuna see parameeter on kuulutatud aegunuks ning kaob ära PHP 6&#039;st, on irooniline, et just magic_quotes_gps on ravim vanade katkiste lehtede juures NULL-Byte rünnakute vastu.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
magic_quotes_gpc = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
magic_quotes_gpc = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Rakenduse kood peab ise tegelema sisendandmete valideerimise ja kontrolliga.&lt;br /&gt;
&lt;br /&gt;
=== register_globals ===&lt;br /&gt;
Julgen väita, et selle parameetri ja võimaluse olemasolu on rikkunud kõige enam PHP mainet (õnneks on sellest ka PHP loojad ise teinud omad järedlused). See laseb olla arendajal laisk ja lohakas ning kirjutada kohutavalt ebaturvalisi rakendusi.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.register-globals&lt;br /&gt;
&lt;br /&gt;
register_globals parameeter annab arendajale võimaluse kasutada Environment, GET, POST, Cookie ja SERVER muutujaid nagu tavalisi muutujaid. Väga lihtne näide (reaalselt eksisteeriv ühes Eesti firma poolt loodud CMS süsteemis) - kui kasutaja logib sisse admin keskkonda, tekitatakse sessioon võtmega &amp;quot;logged_in&amp;quot; (võtme nimi igaks juhuks muudetud).&lt;br /&gt;
Vastava sessioni olemasolu korrektne kontroll oleks:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (isset($_SESSION, $_SESSION[&#039;logged_in&#039;]) &amp;amp;&amp;amp; $_SESSION[&#039;logged_in&#039;] == 1) {&lt;br /&gt;
	// käivitada logimiskontrolli all olev kood siin&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oli aga tehtud nii:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logged_in == 1) {&lt;br /&gt;
	// käivitada logimiskontrolli all olev kood siin&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sellise kontrolli puhul piisab, kui pöörduda administreerimiskeskkonna poole GET päringuga /admin/?logged_in=1 ning ligipääsu kontrollist ollaksegi möödas.&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register_globals = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga vanadel PHP&#039;del (varasemad kui PHP 4.2) oli vaikeväärtuseks 1.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register_globals = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sessioonide haldus ==&lt;br /&gt;
Sessioon on selleks, et hoida kasutaja külastuse kohta andmeid serveril. Sessioonis ei tohiks kindlasti hoida kriitilise tähtsusega andmeid (nagu näiteks lahtise tekstina kasutaja parool).&lt;br /&gt;
&lt;br /&gt;
Antud parameetreid lahates eeldan, et parameetri session.save_handler väärtuseks on vaikimisi väärtus &amp;quot;files&amp;quot; (ehk siis ei ole kirjutatud mõnda oma sessioonide manageerijat).&lt;br /&gt;
&lt;br /&gt;
=== session.autostart ===&lt;br /&gt;
Määrab, kas kasutaja külastuse kohta käivitada automaatselt sessioon. Kui rakenduse iseloom ei vaja kasutaja identifitseerimist (suvaline koduleht), siis ole mõtet ka serverit koormata selle külastuse kohta sessiooni loomisega. Vaikimisi tehakse iga sessiooni jaoks /tmp/ (vt session.save_path parameetrit) ka fail. Ebaturvalise rakenduse korral võib sessiooni fail olla ka LFI2RFE (Local File Inclusion to Remote Code Execution) rünnaku teostamise koht.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.auto-start&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.auto_start = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.auto_start = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Käivitada vajadusel sessioon rakenduse koodis session_start funktsiooniga.&lt;br /&gt;
&lt;br /&gt;
=== session.cookie_httponly ===&lt;br /&gt;
Selle parameetriga juhitakse, kas HTML&#039;s (nt JavaScripti poolt) on sessiooni cookie kättesaadav. Saab raskendada XSS (Cross-Site-Scripting) rünnakute ja cookie&#039;de varastamise rünnakuid.&lt;br /&gt;
See võimalus tekkis PHP&#039;sse alates versioonist 5.2.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.cookie-httponly&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.cookie_httponly = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.cookie_httponly = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== session.hash_function ===&lt;br /&gt;
hash_function määrab, millist algoritmi krüpteerimiseks kasutada. Väärtus 0 tähendab MD5 (128 bitti) ja väärtus 1 SHA-1 (160 bitti) algoritmi.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.hash-function&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.hash_function = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.hash_function = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuna MD5 loetakse tänapäeval juba ebaturvaliseks algoritmiks, siis võiks kasutada väärtust 1 ehk siis algoritmi SHA-1.&lt;br /&gt;
&lt;br /&gt;
=== session.name ===&lt;br /&gt;
Määrab ära, millist sessiooni identifikaatorit kasutada (cookie nimetus). Et mitte alluda automaatsetele XSS cookie varastamise rünnetele, võiks vaikimi nimetuse siiski ära muuta.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.name&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = PHPSESSID&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = MyApp-Sid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtuseks lihtsalt midagi muud kui vaikeväärtus.&lt;br /&gt;
&lt;br /&gt;
=== session.save_path ===&lt;br /&gt;
save_path määrab kataloogi, kus hoitakse sessiooni failisid. Vaikeväärtuseks on süsteemi &amp;quot;temporary&amp;quot; kataloog, kuhu võib ka teistel kasutajatel olla &amp;quot;listingu&amp;quot; ja lugemise õigused, st et on võimalik teostada &amp;quot;session hijacking&amp;quot; rünnakuid.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.save-path&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.save_path = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Määramata väärtus tähendab, et kasutada süsteemi vaikimisi väärtust (Linuxi puhul /tmp, Windowsi puhul nt C:\WINDOWS\Temp\)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.name = /path/to/application/root/session/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Väärtus on võimalik määrata ka scriptis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session_save_path(&#039;/path/to/application/root/session/&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
php manual: http://ee.php.net/manual/en/function.session-save-path.php&lt;br /&gt;
&lt;br /&gt;
=== session.use_only_cookies ===&lt;br /&gt;
Määrab, et sessiooni identifikaatori hoidmine on lubatud ainult küpsistes. Kui kasutaja lehitsejal küpsised ei ole lubatud, siis sessiooni tekitada ei saa. Vastasel juhul hakatakse sessiooni id&#039;d kaasa vedama URL parameetrina, nt PHPSESSID=hash. See aga on oluline turvarisk ning võimaldab väga lihtsalt kasutaja sessiooni varastada (session hijacking rünnak). Piisab sellest, kui kasutaja klikib antud lehel mõnd viidet teisele lehele. Teisele lehele minnes kirjutatakse sinna logidesse (nt külastuste) REFERER, ehk siis mis lehelt kasutaja tuli ja kus oli viide. Viites on aga kaasas tema sessiooni id. Kui keegi saab täpse referer aadressi teada ning läheb sellele, saabki ta omale selle kasutaja sessiooni.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/session.configuration.php#ini.session.use-only-cookies&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus alates PHP 5.3&#039;st)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
session.use_only_cookies = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Muud parameetrid ==&lt;br /&gt;
=== short_open_tag ===&lt;br /&gt;
short_open_tag parameeter määrab, kas PHP koodi võib alustada süntaksiga &amp;quot;&amp;lt;?&amp;quot; või &amp;quot;&amp;lt;?php&amp;quot;. Kui rakenduse koodis on alustatud failisid, mille poole pöördutakse &amp;quot;&amp;lt;?&amp;quot; süntaksiga ning parameeter short_open_tag on väärtusega 0, siis kuvatakse pöördujale antud faili PHP lähtekood. Selle parameetri muutmiseks peab veenduma, et PHP kood on ka vastavalt kirjutatud. Mõistlik on kasutada selleks mingeid automaatkontrolle, nt CodeSniffer PEAR packaget (http://pear.php.net/package/PHP_CodeSniffer/redirected).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.short-open-tag&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
short_open_tag = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
short_open_tag = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Muud olulised seadistused =&lt;br /&gt;
== Failide õigused ==&lt;br /&gt;
&lt;br /&gt;
=== Serveri logid ===&lt;br /&gt;
PHP rakendusel ei tohiks olla serveri logide lugemise õigust. Juhul kui rakenduse koodis on viga/turvauk LFI (Local File Include) teostamiseks, on vaja ründajal saada serverisse oma koodi LFI2RCE (Local File Include to Remote Code Execution) rünnaku teostamiseks. PHP koodi saab sokutada ka serveri logidesse, nt Apache logisse võltsides lehitseja USER_AGENT parameetrit (või saata see parameeter curl&#039;i kasutades).&lt;br /&gt;
&lt;br /&gt;
=== Üles laetavad failid ===&lt;br /&gt;
Kataloogidele, kuhu salvestatakse kasutajate poolt üles laetud faile, ei peaks andma failide käivitamise ja kataloogide listingu õigust (x). Samuti tuleb välistada, et kasutaja saaks üles laadida .htaccess failisid.&lt;br /&gt;
&lt;br /&gt;
=== Avalike kataloogide failide nimekirjad ===&lt;br /&gt;
Docroot alamkataloogides olevatele failidele tuleks keelata kataloogide sisu näitamine (kui see just ei ole taotluslik). Tihti asuvad strateegilised rakenduse failid avalikus kataloogis (kuigi ei tohiks!) ning see annab ründajale olulist infot rakenduse ülesehituse kohta.&lt;br /&gt;
Keelata saab seda nii failiõiguste tasemel kui ka Apache seadetega. Veebikülastajate eest peitmiseks piisab kui lisada igasse kataloogi näiteks tühi index.html või index.php nimeline fail.&lt;br /&gt;
&lt;br /&gt;
== Viirusetõrje ==&lt;br /&gt;
Kuna viiruste levitamine kolib ka veebi, siis on igati asjakohane rakendada regulaarset viirusekontrolli veebirakenduse kataloogi sisule.&lt;br /&gt;
&lt;br /&gt;
== Serveri info ==&lt;br /&gt;
Tuleks peita kõik serveri versioone reklaamiv info (nt annab vaikimisi Apache errorleht teada, mis versiooniga on tegu). Kui peaks ilmnema mingi oluline turvaauk, siis ei oleks vähemalt selline info automaatselt tuvastatav (mingite infot koguvate bottide poolt, mis teevad päringuid /thisfiledoesnotexists.php ning saavad versioonid teada).&lt;br /&gt;
&lt;br /&gt;
= Kokkuvõte =&lt;br /&gt;
PHP seadistamisel on palju nüansse, mis vajavad, et arendajad ja administraatorid suhtleks omavahel. Rakenduse loomist alustades peaksid olema kõik seaded määratud &amp;quot;nii on kõige turvalisem&amp;quot; seisukoha järgi. Kui rakendus tõesti vajab oma funktsionaalsuse vajaduste tõttu teisiti, siis saab tagasi muuta.&lt;br /&gt;
&lt;br /&gt;
Väga abiks oleks luua skript, mis kontrollib serveri seadete väärtuseid ja serverilt oodatud seadete väärtuseid. Võib muutuda rakenduse iseloom ja vajadused, tehakse serverisse tarkvara uuendusi jne - sellise kontrolliskripti vastu oleks alati kiiresti ja tõhus kontrollida.&lt;br /&gt;
&lt;br /&gt;
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Ellang</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4070</id>
		<title>PHP seadistamine</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4070"/>
		<updated>2010-02-21T17:12:59Z</updated>

		<summary type="html">&lt;p&gt;Ellang: /* post_max_size */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PHP seadistamine =&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
Elar Lang&amp;lt;br&amp;gt;AK32&lt;br /&gt;
&lt;br /&gt;
== Sissejuhatus ==&lt;br /&gt;
Acunitex nimeline turbega tegelev firma andmetel (http://www.acunetix.com/blog/web-security-zone/articles/statistics-from-the-top-1000000-websites/) on 2010 aasta alguse seisuga 68% veebiserverites Apache ning 70% veebiserverites PHP.&lt;br /&gt;
Serverite hooldamise ja PHP rakenduste kirjutamise vahele jääb oluline osa - PHP seadistamine ja rakendusele õigete õiguste määramine. Kuna arendaja võib pidada seda administraatori tööks ning administraator omakorda arendaja tööks, siis võib selle töö tegemise (st tegemata jätmise) juures tekkida oluline turvarisk.&lt;br /&gt;
Antud kirjatüki eesmärk on juhtida tähelepanu olulisematele nüanssidele PHP seadistuse juures.&lt;br /&gt;
&lt;br /&gt;
= PHP seadistamine - mida jälgida =&lt;br /&gt;
.. teise nurga alt vaadatuna - mis on enamlevinud ämbrid PHP veebikeskkonna seadistamisel?&lt;br /&gt;
&lt;br /&gt;
== Veateated ==&lt;br /&gt;
=== Kuvamine ===&lt;br /&gt;
Toodangukeskkonnas ei tohi mitte mingil juhul kuvada välja tarkvara poolt tekkinud vigade veateateid. See annab ründajale olulist infot rakenduse ülesehituse kohta ning lihtsustab rünnaku teostamist. Arenduskeskkonnas (ja ka test keskkonnas) peaks aga veateateid kuvama.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.display-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ini_set(&#039;display_errors&#039;, 0); // hide errors&lt;br /&gt;
//ini_set(&#039;display_errors&#039;, 1); // show errors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See ei kuulu küll otseselt PHP seadistamise juurde, kuid reegel peaks ka olema, et programmikood ise ei kuva veateateid välja - näiteks, kui tekib viga SQL päringu teostamisel, siis ei tohi seda mitte mingil toodangu keskkonnas juhul välja kuvada (lihtsustab näiteks SQL injection rünnakute teostamist).&lt;br /&gt;
&lt;br /&gt;
=== Logimine ===&lt;br /&gt;
Kõik tekkinud vead tuleb kindlasti maha logida, et vajadusel otsida tekkinud vigae põhjuseid (ja põhjustajaid). Veateadete logi tuleks ka jälgida, mitte lihtsalt logida.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.log-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Detailsus ===&lt;br /&gt;
Veateateid tuleks tuvastada võimalikult suure detailsusega. Kindlasti mitte ignoreerida E_NOTICE taseme vigu, sest ka need näitavad välja koodi nõrkuseid või vigu (koodis tekib situatsioon, mida arendaja pole ette näinud).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting&lt;br /&gt;
Eeldefineeritud detailsuse konstandid: http://ee.php.net/manual/en/errorfunc.constants.php&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuni PHP 5.2&#039;ni E_ALL ei sisaldanud E_WARNING teateid. Alates PHP 5.3&#039;st E_ALL raporteerib kõiki teateid peale E_STRICT teadete. Alates PHP 6&#039;st on E_ALL teadete hulgas ka E_STRICT teated. Tasub jälgida PHP dokumentatsiooni.&lt;br /&gt;
&amp;quot;error_reporting&amp;quot; väärtust saab määrata ka numbrina, igal konstandil on oma numbriline väärtus. Kuid kuna see number võib erinvate PHP versioonide puhul tähendada erinevaid asju (nt E_ALL puhul), siis on turvalisem kasutada selleks ikkagi nimelisi konstante.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL ~ E_STRICT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
error_reporting(E_ALL ~ E_STRICT);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Failide halduse ja üles laadimise seadistus ==&lt;br /&gt;
&lt;br /&gt;
=== open_basedir ===&lt;br /&gt;
open_basedir parameeter määrab, millistest kataloogidest võib rakendus faile avada. Vaikimisi on väärtus määratama, mis tähendab, et rakendus saab faile avada tervest serverist (kui failide õigustega seda ei ole piiratud).&lt;br /&gt;
Selle parameetri puudumine annab võimaluste teostada LFI (Local File Include) ründeid kogu failisüsteemi ulatuses.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.open-basedir&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
open_basedir vaikeväärtus PHP&#039;s puudub, st PHP poolt mingeid piiranguid ei ole (loevad vaid failiõigustest tulenevad piirangud).&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = /path/to/application/root/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga mugav oleks määrata open_basedir väärtuseks &amp;quot;.&amp;quot; (ehk siis see sama kataloog, kus skript käivitatakse). See on aga ohtlik, kuna PHP chdir käsuga saab &amp;quot;aktiivse kataloogi&amp;quot; ja seega ka selle &amp;quot;.&amp;quot; tähendust muuta.&lt;br /&gt;
Jälgida tuleks väärtuse (või väärtuste) määramisel, et vajalikele kataloogidele ligipääs alles jääks (nt kui ei ole muudetud upload_tmp_dir väärtust, siis lisada open_basedir väärtusele ka /tmp kataloog).&lt;br /&gt;
&lt;br /&gt;
Saab määrata ka httpd.conf failis (ja ka .htaccess failis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
  php_admin_value open_basedir /path/to/application/root/&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
NB! määrates open_basedir piirangu httpd confi kaudu, ei rakendu see siis kui php käivitada käsurealt (ehk siis kui rakendus ise on juba turvaauguga ja saab tekitada käivitatava php koodi rakenduse alla, siis saab sellest piirangust mööda).&lt;br /&gt;
&lt;br /&gt;
=== allow_url_fopen ===&lt;br /&gt;
Selle parameetriga juhitakse, kas failide avamise funktsioonidel on õigus avada fail üle urli. Kui rakendus sellist võimalust ei vaja, peaks selline võimalus olema keelatud (et välistada RFI (Remote File Include) rünnakuid).&lt;br /&gt;
&lt;br /&gt;
php manual:http://ee.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide avamist üle urli):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== file_uploads ===&lt;br /&gt;
Parameetriga juhitakse, kas HTTP failide üles laadimine on toetatud. Kui rakenduse funktsionaalsus seda võimalust ei vaja, peaks see olema keelatud.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide üles laadimist):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== upload_tmp_dir ===&lt;br /&gt;
Asukoht üles laetavate failide ajutiseks talletamiseks, kuni PHP programm nendega tegeleb. Pärast pöördumist tmp kataloogist failid kustutatakse.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on määramata, kasutatakse süsteemi vaikeväärtust (mis linuxi puhul on /tmp kataloog)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = /path/to/application/root/tmp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
upload_tmp_dir parameetri väärtus ei tohiks kindlasti olla avalikku veebi paistev kataloog (st ei tohi olla &amp;quot;document_root&amp;quot; alamkataloog).&lt;br /&gt;
Vaikeväärtus võiks olla muudetud, kuna failide üleslaadimine on ka üks DoS (Denial of Service) ründemeetodeid. Koormatakse veebiserverit lõputute failide üleslaadimistega, veebiserver tekitab iga faili jaoks &amp;quot;upload_tmp_dir&amp;quot; parameetriga kataloogi ajutisi php* nimelisi faile. Kui DoS rünnaku peale veebiserver kokku jooksis, siis võib tekkida olukord, kus tmp kataloogi jäävad need üles laetud ajutised failid alles. Samal ajal LFI (Local File Include) ründevõimalust omades saab ründaja niimoodi sokutada endale vajaliku koodi veebiserverisse.&lt;br /&gt;
&lt;br /&gt;
=== upload_max_filesize ===&lt;br /&gt;
Maksimaalne ühe üles laetava faili suurus.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.upload-max-filesize&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_max_filesize = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui suuri faile ei oodata, ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
=== max_file_uploads ===&lt;br /&gt;
Maksimaalne ühe päringuga üles laetavate failide arv.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.max-file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui mitme faili korraga üles laadimist ei oodata, siis ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
=== post_max_size ===&lt;br /&gt;
Maksimaalne postituse suurus. See ei ole nüüd otseselt failide üles laadimise parameeter, kuid üldjuhul rakendub see piirang just failide üles laadimisele.&lt;br /&gt;
Valitud väärtus ei tohiks olla põhjendamatult suur. Kui file_uploads parameetriga on failide üles laadimine välja lülitatud, siis lihtsalt vormide täitmise kaudu eriti mahukaid postitusi lubama ei peaks.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.post-max-size&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = 8M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui kasutatakse failide üles laadimist, siis peaks post_max_size olema suurem kui &amp;quot;upload_max_filesize * max_file_uploads&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Ellang</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4069</id>
		<title>PHP seadistamine</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4069"/>
		<updated>2010-02-21T17:11:07Z</updated>

		<summary type="html">&lt;p&gt;Ellang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PHP seadistamine =&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
Elar Lang&amp;lt;br&amp;gt;AK32&lt;br /&gt;
&lt;br /&gt;
== Sissejuhatus ==&lt;br /&gt;
Acunitex nimeline turbega tegelev firma andmetel (http://www.acunetix.com/blog/web-security-zone/articles/statistics-from-the-top-1000000-websites/) on 2010 aasta alguse seisuga 68% veebiserverites Apache ning 70% veebiserverites PHP.&lt;br /&gt;
Serverite hooldamise ja PHP rakenduste kirjutamise vahele jääb oluline osa - PHP seadistamine ja rakendusele õigete õiguste määramine. Kuna arendaja võib pidada seda administraatori tööks ning administraator omakorda arendaja tööks, siis võib selle töö tegemise (st tegemata jätmise) juures tekkida oluline turvarisk.&lt;br /&gt;
Antud kirjatüki eesmärk on juhtida tähelepanu olulisematele nüanssidele PHP seadistuse juures.&lt;br /&gt;
&lt;br /&gt;
= PHP seadistamine - mida jälgida =&lt;br /&gt;
.. teise nurga alt vaadatuna - mis on enamlevinud ämbrid PHP veebikeskkonna seadistamisel?&lt;br /&gt;
&lt;br /&gt;
== Veateated ==&lt;br /&gt;
=== Kuvamine ===&lt;br /&gt;
Toodangukeskkonnas ei tohi mitte mingil juhul kuvada välja tarkvara poolt tekkinud vigade veateateid. See annab ründajale olulist infot rakenduse ülesehituse kohta ning lihtsustab rünnaku teostamist. Arenduskeskkonnas (ja ka test keskkonnas) peaks aga veateateid kuvama.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.display-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ini_set(&#039;display_errors&#039;, 0); // hide errors&lt;br /&gt;
//ini_set(&#039;display_errors&#039;, 1); // show errors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See ei kuulu küll otseselt PHP seadistamise juurde, kuid reegel peaks ka olema, et programmikood ise ei kuva veateateid välja - näiteks, kui tekib viga SQL päringu teostamisel, siis ei tohi seda mitte mingil toodangu keskkonnas juhul välja kuvada (lihtsustab näiteks SQL injection rünnakute teostamist).&lt;br /&gt;
&lt;br /&gt;
=== Logimine ===&lt;br /&gt;
Kõik tekkinud vead tuleb kindlasti maha logida, et vajadusel otsida tekkinud vigae põhjuseid (ja põhjustajaid). Veateadete logi tuleks ka jälgida, mitte lihtsalt logida.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.log-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Detailsus ===&lt;br /&gt;
Veateateid tuleks tuvastada võimalikult suure detailsusega. Kindlasti mitte ignoreerida E_NOTICE taseme vigu, sest ka need näitavad välja koodi nõrkuseid või vigu (koodis tekib situatsioon, mida arendaja pole ette näinud).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting&lt;br /&gt;
Eeldefineeritud detailsuse konstandid: http://ee.php.net/manual/en/errorfunc.constants.php&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuni PHP 5.2&#039;ni E_ALL ei sisaldanud E_WARNING teateid. Alates PHP 5.3&#039;st E_ALL raporteerib kõiki teateid peale E_STRICT teadete. Alates PHP 6&#039;st on E_ALL teadete hulgas ka E_STRICT teated. Tasub jälgida PHP dokumentatsiooni.&lt;br /&gt;
&amp;quot;error_reporting&amp;quot; väärtust saab määrata ka numbrina, igal konstandil on oma numbriline väärtus. Kuid kuna see number võib erinvate PHP versioonide puhul tähendada erinevaid asju (nt E_ALL puhul), siis on turvalisem kasutada selleks ikkagi nimelisi konstante.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL ~ E_STRICT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
error_reporting(E_ALL ~ E_STRICT);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Failide halduse ja üles laadimise seadistus ==&lt;br /&gt;
&lt;br /&gt;
=== open_basedir ===&lt;br /&gt;
open_basedir parameeter määrab, millistest kataloogidest võib rakendus faile avada. Vaikimisi on väärtus määratama, mis tähendab, et rakendus saab faile avada tervest serverist (kui failide õigustega seda ei ole piiratud).&lt;br /&gt;
Selle parameetri puudumine annab võimaluste teostada LFI (Local File Include) ründeid kogu failisüsteemi ulatuses.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.open-basedir&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
open_basedir vaikeväärtus PHP&#039;s puudub, st PHP poolt mingeid piiranguid ei ole (loevad vaid failiõigustest tulenevad piirangud).&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = /path/to/application/root/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga mugav oleks määrata open_basedir väärtuseks &amp;quot;.&amp;quot; (ehk siis see sama kataloog, kus skript käivitatakse). See on aga ohtlik, kuna PHP chdir käsuga saab &amp;quot;aktiivse kataloogi&amp;quot; ja seega ka selle &amp;quot;.&amp;quot; tähendust muuta.&lt;br /&gt;
Jälgida tuleks väärtuse (või väärtuste) määramisel, et vajalikele kataloogidele ligipääs alles jääks (nt kui ei ole muudetud upload_tmp_dir väärtust, siis lisada open_basedir väärtusele ka /tmp kataloog).&lt;br /&gt;
&lt;br /&gt;
Saab määrata ka httpd.conf failis (ja ka .htaccess failis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
  php_admin_value open_basedir /path/to/application/root/&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
NB! määrates open_basedir piirangu httpd confi kaudu, ei rakendu see siis kui php käivitada käsurealt (ehk siis kui rakendus ise on juba turvaauguga ja saab tekitada käivitatava php koodi rakenduse alla, siis saab sellest piirangust mööda).&lt;br /&gt;
&lt;br /&gt;
=== allow_url_fopen ===&lt;br /&gt;
Selle parameetriga juhitakse, kas failide avamise funktsioonidel on õigus avada fail üle urli. Kui rakendus sellist võimalust ei vaja, peaks selline võimalus olema keelatud (et välistada RFI (Remote File Include) rünnakuid).&lt;br /&gt;
&lt;br /&gt;
php manual:http://ee.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide avamist üle urli):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== file_uploads ===&lt;br /&gt;
Parameetriga juhitakse, kas HTTP failide üles laadimine on toetatud. Kui rakenduse funktsionaalsus seda võimalust ei vaja, peaks see olema keelatud.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide üles laadimist):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== upload_tmp_dir ===&lt;br /&gt;
Asukoht üles laetavate failide ajutiseks talletamiseks, kuni PHP programm nendega tegeleb. Pärast pöördumist tmp kataloogist failid kustutatakse.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on määramata, kasutatakse süsteemi vaikeväärtust (mis linuxi puhul on /tmp kataloog)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = /path/to/application/root/tmp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
upload_tmp_dir parameetri väärtus ei tohiks kindlasti olla avalikku veebi paistev kataloog (st ei tohi olla &amp;quot;document_root&amp;quot; alamkataloog).&lt;br /&gt;
Vaikeväärtus võiks olla muudetud, kuna failide üleslaadimine on ka üks DoS (Denial of Service) ründemeetodeid. Koormatakse veebiserverit lõputute failide üleslaadimistega, veebiserver tekitab iga faili jaoks &amp;quot;upload_tmp_dir&amp;quot; parameetriga kataloogi ajutisi php* nimelisi faile. Kui DoS rünnaku peale veebiserver kokku jooksis, siis võib tekkida olukord, kus tmp kataloogi jäävad need üles laetud ajutised failid alles. Samal ajal LFI (Local File Include) ründevõimalust omades saab ründaja niimoodi sokutada endale vajaliku koodi veebiserverisse.&lt;br /&gt;
&lt;br /&gt;
=== upload_max_filesize ===&lt;br /&gt;
Maksimaalne ühe üles laetava faili suurus.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.upload-max-filesize&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_max_filesize = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui suuri faile ei oodata, ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
=== max_file_uploads ===&lt;br /&gt;
Maksimaalne ühe päringuga üles laetavate failide arv.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.max-file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui mitme faili korraga üles laadimist ei oodata, siis ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
=== post_max_size ===&lt;br /&gt;
Maksimaalne postituse suurus. See ei ole nüüd otseselt failide üles laadimise parameeter, kuid üldjuhul rakendub see piirang just failide üles laadimisele.&lt;br /&gt;
Valitud ei tohiks olla põhjendamatult suur. Kui file_uploads parameetriga on failide üles laadimine välja lülitatud, siis lihtsalt vormide täitmise kaudu eriti mahukaid postitusi lubama ei peaks.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.post-max-size&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = 8M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui kasutatakse failide üles laadimist, siis peaks post_max_size olema suurem kui &amp;quot;upload_max_filesize * max_file_uploads&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Ellang</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4068</id>
		<title>PHP seadistamine</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4068"/>
		<updated>2010-02-21T17:04:53Z</updated>

		<summary type="html">&lt;p&gt;Ellang: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PHP seadistamine - mida jälgida =&lt;br /&gt;
.. teise nurga alt vaadatuna - mis on enamlevinud ämbrid PHP veebikeskkonna seadistamisel?&lt;br /&gt;
&lt;br /&gt;
Acunitex nimeline turbega tegelev firma andmetel (http://www.acunetix.com/blog/web-security-zone/articles/statistics-from-the-top-1000000-websites/) on 2010 aasta alguse seisuga 68% veebiserverites Apache ning 70% veebiserverites PHP.&lt;br /&gt;
Serverite hooldamise ja PHP rakenduste kirjutamise vahele jääb oluline osa - PHP seadistamine ja rakendusele õigete õiguste määramine. Kuna arendaja võib pidada seda administraatori tööks ning administraator omakorda arendaja tööks, siis võib selle töö tegemise (st tegemata jätmise) juures tekkida oluline turvarisk.&lt;br /&gt;
Antud kirjatüki eesmärk on juhtida tähelepanu olulisematele nüanssidele.&lt;br /&gt;
&lt;br /&gt;
== Veateated ==&lt;br /&gt;
=== Kuvamine ===&lt;br /&gt;
Toodangukeskkonnas ei tohi mitte mingil juhul kuvada välja tarkvara poolt tekkinud vigade veateateid. See annab ründajale olulist infot rakenduse ülesehituse kohta ning lihtsustab rünnaku teostamist. Arenduskeskkonnas (ja ka test keskkonnas) peaks aga veateateid kuvama.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.display-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ini_set(&#039;display_errors&#039;, 0); // hide errors&lt;br /&gt;
//ini_set(&#039;display_errors&#039;, 1); // show errors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See ei kuulu küll otseselt PHP seadistamise juurde, kuid reegel peaks ka olema, et programmikood ise ei kuva veateateid välja - näiteks, kui tekib viga SQL päringu teostamisel, siis ei tohi seda mitte mingil toodangu keskkonnas juhul välja kuvada (lihtsustab näiteks SQL injection rünnakute teostamist).&lt;br /&gt;
&lt;br /&gt;
=== Logimine ===&lt;br /&gt;
Kõik tekkinud vead tuleb kindlasti maha logida, et vajadusel otsida tekkinud vigae põhjuseid (ja põhjustajaid). Veateadete logi tuleks ka jälgida, mitte lihtsalt logida.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.log-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Detailsus ===&lt;br /&gt;
Veateateid tuleks tuvastada võimalikult suure detailsusega. Kindlasti mitte ignoreerida E_NOTICE taseme vigu, sest ka need näitavad välja koodi nõrkuseid või vigu (koodis tekib situatsioon, mida arendaja pole ette näinud).&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting&lt;br /&gt;
Eeldefineeritud detailsuse konstandid: http://ee.php.net/manual/en/errorfunc.constants.php&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuni PHP 5.2&#039;ni E_ALL ei sisaldanud E_WARNING teateid. Alates PHP 5.3&#039;st E_ALL raporteerib kõiki teateid peale E_STRICT teadete. Alates PHP 6&#039;st on E_ALL teadete hulgas ka E_STRICT teated. Tasub jälgida PHP dokumentatsiooni.&lt;br /&gt;
&amp;quot;error_reporting&amp;quot; väärtust saab määrata ka numbrina, igal konstandil on oma numbriline väärtus. Kuid kuna see number võib erinvate PHP versioonide puhul tähendada erinevaid asju (nt E_ALL puhul), siis on turvalisem kasutada selleks ikkagi nimelisi konstante.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL ~ E_STRICT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
error_reporting(E_ALL ~ E_STRICT);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Failide halduse ja üles laadimise seadistus ==&lt;br /&gt;
&lt;br /&gt;
=== open_basedir ===&lt;br /&gt;
open_basedir parameeter määrab, millistest kataloogidest võib rakendus faile avada. Vaikimisi on väärtus määratama, mis tähendab, et rakendus saab faile avada tervest serverist (kui failide õigustega seda ei ole piiratud).&lt;br /&gt;
Selle parameetri puudumine annab võimaluste teostada LFI (Local File Include) ründeid kogu failisüsteemi ulatuses.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.open-basedir&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
open_basedir vaikeväärtus PHP&#039;s puudub, st PHP poolt mingeid piiranguid ei ole (loevad vaid failiõigustest tulenevad piirangud).&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = /path/to/application/root/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga mugav oleks määrata open_basedir väärtuseks &amp;quot;.&amp;quot; (ehk siis see sama kataloog, kus skript käivitatakse). See on aga ohtlik, kuna PHP chdir käsuga saab &amp;quot;aktiivse kataloogi&amp;quot; ja seega ka selle &amp;quot;.&amp;quot; tähendust muuta.&lt;br /&gt;
Jälgida tuleks väärtuse (või väärtuste) määramisel, et vajalikele kataloogidele ligipääs alles jääks (nt kui ei ole muudetud upload_tmp_dir väärtust, siis lisada open_basedir väärtusele ka /tmp kataloog).&lt;br /&gt;
&lt;br /&gt;
Saab määrata ka httpd.conf failis (ja ka .htaccess failis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
  php_admin_value open_basedir /path/to/application/root/&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
NB! määrates open_basedir piirangu httpd confi kaudu, ei rakendu see siis kui php käivitada käsurealt (ehk siis kui rakendus ise on juba turvaauguga ja saab tekitada käivitatava php koodi rakenduse alla, siis saab sellest piirangust mööda).&lt;br /&gt;
&lt;br /&gt;
=== allow_url_fopen ===&lt;br /&gt;
Selle parameetriga juhitakse, kas failide avamise funktsioonidel on õigus avada fail üle urli. Kui rakendus sellist võimalust ei vaja, peaks selline võimalus olema keelatud (et välistada RFI (Remote File Include) rünnakuid).&lt;br /&gt;
&lt;br /&gt;
php manual:http://ee.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide avamist üle urli):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== file_uploads ===&lt;br /&gt;
Parameetriga juhitakse, kas HTTP failide üles laadimine on toetatud. Kui rakenduse funktsionaalsus seda võimalust ei vaja, peaks see olema keelatud.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide üles laadimist):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== upload_tmp_dir ===&lt;br /&gt;
Asukoht üles laetavate failide ajutiseks talletamiseks, kuni PHP programm nendega tegeleb. Pärast pöördumist tmp kataloogist failid kustutatakse.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on määramata, kasutatakse süsteemi vaikeväärtust (mis linuxi puhul on /tmp kataloog)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = /path/to/application/root/tmp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
upload_tmp_dir parameetri väärtus ei tohiks kindlasti olla avalikku veebi paistev kataloog (st ei tohi olla &amp;quot;document_root&amp;quot; alamkataloog).&lt;br /&gt;
Vaikeväärtus võiks olla muudetud, kuna failide üleslaadimine on ka üks DoS (Denial of Service) ründemeetodeid. Koormatakse veebiserverit lõputute failide üleslaadimistega, veebiserver tekitab iga faili jaoks &amp;quot;upload_tmp_dir&amp;quot; parameetriga kataloogi ajutisi php* nimelisi faile. Kui DoS rünnaku peale veebiserver kokku jooksis, siis võib tekkida olukord, kus tmp kataloogi jäävad need üles laetud ajutised failid alles. Samal ajal LFI (Local File Include) ründevõimalust omades saab ründaja niimoodi sokutada endale vajaliku koodi veebiserverisse.&lt;br /&gt;
&lt;br /&gt;
=== upload_max_filesize ===&lt;br /&gt;
Maksimaalne ühe üles laetava faili suurus.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.upload-max-filesize&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_max_filesize = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui suuri faile ei oodata, ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
=== max_file_uploads ===&lt;br /&gt;
Maksimaalne ühe päringuga üles laetavate failide arv.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.max-file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui mitme faili korraga üles laadimist ei oodata, siis ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
=== post_max_size ===&lt;br /&gt;
Maksimaalne postituse suurus. See ei ole nüüd otseselt failide üles laadimise parameeter, kuid üldjuhul rakendub see piirang just failide üles laadimisele.&lt;br /&gt;
Valitud ei tohiks olla põhjendamatult suur. Kui file_uploads parameetriga on failide üles laadimine välja lülitatud, siis lihtsalt vormide täitmise kaudu eriti mahukaid postitusi lubama ei peaks.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.post-max-size&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = 8M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui kasutatakse failide üles laadimist, siis peaks post_max_size olema suurem kui &amp;quot;upload_max_filesize * max_file_uploads&amp;quot;&lt;/div&gt;</summary>
		<author><name>Ellang</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4067</id>
		<title>PHP seadistamine</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PHP_seadistamine&amp;diff=4067"/>
		<updated>2010-02-21T17:02:21Z</updated>

		<summary type="html">&lt;p&gt;Ellang: New page: = PHP seadistamine - mida jälgida = .. teise nurga alt vaadatuna - mis on enamlevinud ämbrid PHP veebikeskkonna seadistamisel?  Acunitex nimeline turbega tegelev firma andmetel (http://w...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= PHP seadistamine - mida jälgida =&lt;br /&gt;
.. teise nurga alt vaadatuna - mis on enamlevinud ämbrid PHP veebikeskkonna seadistamisel?&lt;br /&gt;
&lt;br /&gt;
Acunitex nimeline turbega tegelev firma andmetel (http://www.acunetix.com/blog/web-security-zone/articles/statistics-from-the-top-1000000-websites/) on 2010 aasta alguse seisuga 68% veebiserverites Apache ning 70% veebiserverites PHP.&lt;br /&gt;
Serverite hooldamise ja PHP rakenduste kirjutamise vahele jääb oluline osa - PHP seadistamine ja rakendusele õigete õiguste määramine. Kuna arendaja võib pidada seda administraatori tööks ning administraator omakorda arendaja tööks, siis võib selle töö tegemise (st tegemata jätmise) juures tekkida oluline turvarisk.&lt;br /&gt;
Antud kirjatüki eesmärk on juhtida tähelepanu olulisematele nüanssidele.&lt;br /&gt;
&lt;br /&gt;
== Veateated ==&lt;br /&gt;
=== Kuvamine ===&lt;br /&gt;
Toodangukeskkonnas ei tohi mitte mingil juhul kuvada välja tarkvara poolt tekkinud vigade veateateid. See annab ründajale olulist infot rakenduse ülesehituse kohta ning lihtsustab rünnaku teostamist. Arenduskeskkonnas (ja ka test keskkonnas) peaks aga veateateid kuvama.&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.display-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla): &lt;br /&gt;
&amp;lt;pre&amp;gt;display_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis): &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ini_set(&#039;display_errors&#039;, 0); // hide errors&lt;br /&gt;
//ini_set(&#039;display_errors&#039;, 1); // show errors&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See ei kuulu küll otseselt PHP seadistamise juurde, kuid reegel peaks ka olema, et programmikood ise ei kuva veateateid välja - näiteks, kui tekib viga SQL päringu teostamisel, siis ei tohi seda mitte mingil toodangu keskkonnas juhul välja kuvada (lihtsustab näiteks SQL injection rünnakute teostamist).&lt;br /&gt;
&lt;br /&gt;
=== Logimine ===&lt;br /&gt;
Kõik tekkinud vead tuleb kindlasti maha logida, et vajadusel otsida tekkinud vigae põhjuseid (ja põhjustajaid). Veateadete logi tuleks ka jälgida, mitte lihtsalt logida.&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.log-errors&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;log_errors = 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Detailsus ===&lt;br /&gt;
Veateateid tuleks tuvastada võimalikult suure detailsusega. Kindlasti mitte ignoreerida E_NOTICE taseme vigu, sest ka need näitavad välja koodi nõrkuseid või vigu (koodis tekib situatsioon, mida arendaja pole ette näinud).&lt;br /&gt;
php manual: http://ee.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting&lt;br /&gt;
Eeldefineeritud detailsuse konstandid: http://ee.php.net/manual/en/errorfunc.constants.php&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kuni PHP 5.2&#039;ni E_ALL ei sisaldanud E_WARNING teateid. Alates PHP 5.3&#039;st E_ALL raporteerib kõiki teateid peale E_STRICT teadete. Alates PHP 6&#039;st on E_ALL teadete hulgas ka E_STRICT teated. Tasub jälgida PHP dokumentatsiooni.&lt;br /&gt;
&amp;quot;error_reporting&amp;quot; väärtust saab määrata ka numbrina, igal konstandil on oma numbriline väärtus. Kuid kuna see number võib erinvate PHP versioonide puhul tähendada erinevaid asju (nt E_ALL puhul), siis on turvalisem kasutada selleks ikkagi nimelisi konstante.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;error_reporting = E_ALL ~ E_STRICT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
runtime (seade määramine jooksvalt php koodis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
error_reporting(E_ALL ~ E_STRICT);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Failide halduse ja üles laadimise seadistus ==&lt;br /&gt;
&lt;br /&gt;
=== open_basedir ===&lt;br /&gt;
open_basedir parameeter määrab, millistest kataloogidest võib rakendus faile avada. Vaikimisi on väärtus määratama, mis tähendab, et rakendus saab faile avada tervest serverist (kui failide õigustega seda ei ole piiratud).&lt;br /&gt;
Selle parameetri puudumine annab võimaluste teostada LFI (Local File Include) ründeid kogu failisüsteemi ulatuses.&amp;lt;br&amp;gt;&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.open-basedir&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
open_basedir vaikeväärtus PHP&#039;s puudub, st PHP poolt mingeid piiranguid ei ole (loevad vaid failiõigustest tulenevad piirangud).&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
open_basedir = /path/to/application/root/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väga mugav oleks määrata open_basedir väärtuseks &amp;quot;.&amp;quot; (ehk siis see sama kataloog, kus skript käivitatakse). See on aga ohtlik, kuna PHP chdir käsuga saab &amp;quot;aktiivse kataloogi&amp;quot; ja seega ka selle &amp;quot;.&amp;quot; tähendust muuta.&lt;br /&gt;
Jälgida tuleks väärtuse (või väärtuste) määramisel, et vajalikele kataloogidele ligipääs alles jääks (nt kui ei ole muudetud upload_tmp_dir väärtust, siis lisada open_basedir väärtusele ka /tmp kataloog).&lt;br /&gt;
&lt;br /&gt;
Saab määrata ka httpd.conf failis (ja ka .htaccess failis):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
  php_admin_value open_basedir /path/to/application/root/&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
NB! määrates open_basedir piirangu httpd confi kaudu, ei rakendu see siis kui php käivitada käsurealt (ehk siis kui rakendus ise on juba turvaauguga ja saab tekitada käivitatava php koodi rakenduse alla, siis saab sellest piirangust mööda).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== allow_url_fopen ===&lt;br /&gt;
Selle parameetriga juhitakse, kas failide avamise funktsioonidel on õigus avada fail üle urli. Kui rakendus sellist võimalust ei vaja, peaks selline võimalus olema keelatud (et välistada RFI (Remote File Include) rünnakuid).&lt;br /&gt;
&lt;br /&gt;
php manual:http://ee.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide avamist üle urli):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== file_uploads ===&lt;br /&gt;
Parameetriga juhitakse, kas HTTP failide üles laadimine on toetatud. Kui rakenduse funktsionaalsus seda võimalust ei vaja, peaks see olema keelatud.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on üle urli failide avamine lubatud.&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja failide üles laadimist):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow_url_fopen = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== upload_tmp_dir ===&lt;br /&gt;
Asukoht üles laetavate failide ajutiseks talletamiseks, kuni PHP programm nendega tegeleb. Pärast pöördumist tmp kataloogist failid kustutatakse.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Vaikeväärtusena on määramata, kasutatakse süsteemi vaikeväärtust (mis linuxi puhul on /tmp kataloog)&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, kui rakendus ei vaja):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = /path/to/application/root/tmp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
upload_tmp_dir parameetri väärtus ei tohiks kindlasti olla avalikku veebi paistev kataloog (st ei tohi olla &amp;quot;document_root&amp;quot; alamkataloog).&lt;br /&gt;
Vaikeväärtus võiks olla muudetud, kuna failide üleslaadimine on ka üks DoS (Denial of Service) ründemeetodeid. Koormatakse veebiserverit lõputute failide üleslaadimistega, veebiserver tekitab iga faili jaoks &amp;quot;upload_tmp_dir&amp;quot; parameetriga kataloogi ajutisi php* nimelisi faile. Kui DoS rünnaku peale veebiserver kokku jooksis, siis võib tekkida olukord, kus tmp kataloogi jäävad need üles laetud ajutised failid alles. Samal ajal LFI (Local File Include) ründevõimalust omades saab ründaja niimoodi sokutada endale vajaliku koodi veebiserverisse.&lt;br /&gt;
&lt;br /&gt;
=== upload_max_filesize ===&lt;br /&gt;
Maksimaalne ühe üles laetava faili suurus.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.upload-max-filesize&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_max_filesize = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
upload_tmp_dir = 2M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui suuri faile ei oodata, ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== max_file_uploads ===&lt;br /&gt;
Maksimaalne ühe päringuga üles laetavate failide arv.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.max-file-uploads&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla, vastavalt rakenduse vajadustele):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
max_file_uploads = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Väärtus peaks olema valitud rakenduse iseloomust (kui mitme faili korraga üles laadimist ei oodata, siis ei ole seda hea ka seadistuses lubada).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== post_max_size ===&lt;br /&gt;
Maksimaalne postituse suurus. See ei ole nüüd otseselt failide üles laadimise parameeter, kuid üldjuhul rakendub see piirang just failide üles laadimisele.&lt;br /&gt;
Valitud ei tohiks olla põhjendamatult suur. Kui file_uploads parameetriga on failide üles laadimine välja lülitatud, siis lihtsalt vormide täitmise kaudu eriti mahukaid postitusi lubama ei peaks.&lt;br /&gt;
&lt;br /&gt;
php manual: http://ee.php.net/manual/en/ini.core.php#ini.post-max-size&lt;br /&gt;
&lt;br /&gt;
php.ini (vaikeväärtus):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = 8M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
php.ini (võiks olla vastavuses rakenduse reaalsete vajadustega):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
post_max_size = ?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui kasutatakse failide üles laadimist, siis peaks post_max_size olema suurem kui &amp;quot;upload_max_filesize * max_file_uploads&amp;quot;&lt;/div&gt;</summary>
		<author><name>Ellang</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=User:Ellang&amp;diff=4066</id>
		<title>User:Ellang</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=User:Ellang&amp;diff=4066"/>
		<updated>2010-02-21T17:00:36Z</updated>

		<summary type="html">&lt;p&gt;Ellang: New page: Vaata jutuvada: PHP seadistamine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vaata jutuvada: [[PHP seadistamine]]&lt;/div&gt;</summary>
		<author><name>Ellang</name></author>
	</entry>
</feed>