<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>medutis PHP blog</title>
	<atom:link href="http://home.medutis.com/phpblog/feed/" rel="self" type="application/rss+xml" />
	<link>http://home.medutis.com/phpblog</link>
	<description>Lithuanian PHP blog</description>
	<pubDate>Wed, 07 May 2008 13:56:42 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>PHP magazine lietuviams nemokamai</title>
		<link>http://home.medutis.com/phpblog/2007/03/26/php-magazine-lietuviams-nemokamai/</link>
		<comments>http://home.medutis.com/phpblog/2007/03/26/php-magazine-lietuviams-nemokamai/#comments</comments>
		<pubDate>Mon, 26 Mar 2007 16:44:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[PHP aktualijos]]></category>

		<guid isPermaLink="false">http://home.medutis.com/phpblog/2007/03/26/php-magazine-lietuviams-nemokamai/</guid>
		<description><![CDATA[Ne tik lietuviams, bet ir mokantiems lietuviškai perskaityti šį postą  
Slaptas katalogiukas yra tokio pat adreso, kaip ir kitas lietuviams prieinamas žurnalas, tik subkatalogas vadinasi phpmag. Na, URL&#8217;as susideda iš šio serverio adreso ir subkatalogo. Jei kam nors kas neaišku, klauskite bet kuriuo kontaktavimo būdu, kokiu tik galite mane rasti. Už šitą gėrį turime [...]]]></description>
			<content:encoded><![CDATA[<p>Ne tik lietuviams, bet ir mokantiems lietuviškai perskaityti šį postą <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><span id="more-31"></span>Slaptas katalogiukas yra tokio pat adreso, kaip ir <a href="http://home.medutis.com/phpblog/2006/01/18/php-architect-lietuviams-nemokamai/">kitas lietuviams prieinamas žurnalas</a>, tik subkatalogas vadinasi phpmag. Na, URL&#8217;as susideda iš šio serverio adreso ir subkatalogo. Jei kam nors kas neaišku, klauskite bet kuriuo kontaktavimo būdu, kokiu tik galite mane rasti. Už šitą gėrį turime būti dėkingi vyrukui, kurio nickas yra <a href="http://php.lt/render/page,inside;menuname,user_info;uid,1597">drawgas</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://home.medutis.com/phpblog/2007/03/26/php-magazine-lietuviams-nemokamai/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP saugumo nustatymai - 2 dalis</title>
		<link>http://home.medutis.com/phpblog/2007/02/08/php-saugumo-nustatymai-2-dalis/</link>
		<comments>http://home.medutis.com/phpblog/2007/02/08/php-saugumo-nustatymai-2-dalis/#comments</comments>
		<pubDate>Thu, 08 Feb 2007 09:49:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHP saugumas]]></category>

		<guid isPermaLink="false">http://home.medutis.com/phpblog/2007/02/08/php-saugumo-nustatymai-2-dalis/</guid>
		<description><![CDATA[PHP nustatymų yra daug, kurie ne tik leidžia sistemai būti lanksčiai, bet ir dažnai priverčia pasimesti programuotojus ar adminus, juolab, kad nebūtinai default reikšmė yra geriausia ar saugiausia, taigi tęsiame kelionę po PHP nustatymus  
Apribokime sistemos resursus
max_execution_time, standartiškai yra nustatytas 30 (sekundžių). Tai reiškia, kad skriptui bus leista naudotis procesoriumi iki 30 sekundžių vieno [...]]]></description>
			<content:encoded><![CDATA[<p>PHP nustatymų yra daug, kurie ne tik leidžia sistemai būti lanksčiai, bet ir dažnai priverčia pasimesti programuotojus ar adminus, juolab, kad nebūtinai default reikšmė yra geriausia ar saugiausia, taigi tęsiame kelionę po PHP nustatymus <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <span id="more-30"></span></p>
<p><strong>Apribokime sistemos resursus</strong></p>
<p>max_execution_time, standartiškai yra nustatytas 30 (sekundžių). Tai reiškia, kad skriptui bus leista naudotis procesoriumi iki 30 sekundžių vieno paleidimo metu. Šis nustatymas yra naudingas hostingo paslaugų teikėjams, kadangi apsaugo nuo piktai nusiteikusių vartotojų, norinčių pakenkti, taip pat ir dedicated serveriams - apsisaugoti nuo kreivai parašytų savų ar trečios šalies skriptų. Dažnai šis nustatymas yra interpretuojamas klaidingai - &#8220;<strike>skriptas negali suktis ilgiau nei 30 sekundžių</strike>&#8220;. Iš tiesų, gali. Laikas skaičiuojamas tik tada, kai skriptas naudoja CPU, nors veikti skriptas gali valandų valandas. Pavyzdžiui:</p>
<blockquote><p>while (true)<br />
{<br />
sleep(100);<br />
}</p></blockquote>
<p>Toks skriptas naudoja itin mažai CPU, todėl miegodamas gali veikti net ir ištisą mėnesį. Jeigu serveryje naudojate tik web puslapius, protinga apriboti šį nustatymą į kur kas mažesnę reikšmę, pvz. 5. Jei puslapis serveryje generuojamas ilgiau nei 1 sekundę, tai jau laikoma ilgai. Kuo mažesniu laiku jį apribosim, tuo daugiau laiko liks kitoms užduotims. Šį nustatymą galima keisti ir skripto išorėje, ir viduje, su set_time_limit() funkcija.</p>
<p>max_input_time yra skirtas nustatyti, kiek laiko skirti vartotojo įvedimui. Jis defaultu būna 60 sekundžių. Taip pat, kaip ir vykdymo nustatymas, jis įskaičiuoja tik tą laiką, kurį naudoja CPU savo skaičiavimams. Didelio failo uploado laukimas nepaveiks šio limito. Šis nustatymas skirtas apsisaugoti nuo daugiamačių masyvų perdavimo, kurie gali itin paveikti sistemos resursus. Nepaisant to, 60 sekundžių yra ryškiai per daug, joks skriptas neturėtų švaistyti tiek daug savo laiko vartotojo įvedimui apdirbti. Nustatymą siūloma apriboti iki 2-5 sek. Šis nustatymas gali būti keičiamas tik skripto išorėje, kadangi vartotojo įvedimas apdirbamas dar prieš skripto pradžią.</p>
<p>memory_limit - dar vienas nustatymas, apribojantis sistemos skiriamą atmintį. Šis nustatymas yra prieinamas tik tuo atveju, jei php sukompiliuotas su atminties ribojimo palaikymu. Lengvai tai patikrinsite, kadangi memory_get_usage funkcija prieinama tik jei atminties ribojimas yra :</p>
<blockquote><p>if (function_exists(&#8217;memory_get_usage&#8217;))    echo &#8216;Ok!&#8217;;<br />
else &#8216;Ne Ok!&#8217;</p></blockquote>
<p>Atminties limitas yra defaultu nustatytas iki 8MB. Šis nustatymas dauguma atvejų yra tinkamas ir paprastai nereikia jo keisti. Sistemai pakenkti gali būti naudojami skriptai, pasiimantys didelę dalį atminties ir nueinantys miegoti. Pavyzdžiui:</p>
<blockquote><p>$a = str_repeat(&#8217;a', 100000000);<br />
ignore_user_abort(true);<br />
sleep(1000000);</p></blockquote>
<p>Šis skriptas bando nugriebti ~100MB atminties ir nueiti miegoti, ignoruodamas vartotojo veiksmus, ty. net jei uždaroma naršyklė, jis ir toliau būna vykdomas. memory_limit neišsprendžia problemos iki galo, kadangi su tokiu skriptu galima paleisti kelias jo instancijas, kurių kiekviena pasiims maksimalų atminties kiekį. Be abejo, tokie įvykiai negali praeiti nepastebėti sistemos administratorių, taigi problemą anksčiau ar vėliau reikia išspręsti. Kitiems atvejams, kai kenkia ne žmogus, o kreivai parašytas skriptas, arba pvz. siunčiamas didelis duomenų kiekis iš išorinio šaltinio, tai be abejo yra naudingas nustatymas.</p>
<p>default_socket_timeout - leidžia apriboti laiką, skirtą inicijuoti sujungimui. Defaultu ši reikšmė yra 60 sekundžių. Dažnai sistema, atidarydama socketą praleidžia daug laiko prisijungdama prie lėtų serverių, todėl kenkėjas gali efektyviai išnaudoti sistemos resursus, atidaręs keletą tokių prisijungimų. Kol sistema eikvos laiką beprasmiams sujungimams, neliks resursų tikrų vartotojų užklausoms. Reikia atminti, kad šis nustatymas galioja tik prisijungimo inicializavimo procesui ir neturi efekto skaitymui ir rašymui jau atidarytame sockete, taigi verta naudoti ir stream_set_timeout() jei reikia apsisaugoti nuo gaišimo laukiant skaitymo ar rašymo veiksmų. default_socket_timeout gali būti pakeistas bet kurioje vietoje, protinga jį būtų sumažinti iki 5-10 sekundžių.</p>
<p><strong>URL includinimas</strong></p>
<p>Viena iš php streams galimybių yra elgtis su išoriniais URL lygiai taip pat, kaip ir su vietiniais failais. Pavyzdžiui, fopen() gali būti taip pat sėkmingai panaudota nuskaityti &#8220;http://www.php.net&#8221;, kaip ir &#8220;/etc/passwd&#8221;. Tai sukelia nemažai saugumo spragų, kaip pvz. kodo injekcija per išorinį šaltinį, naudojant tokias funkcijas, kaip fopen(), file_get_contents(), readfile(), taip pat didelių duomenų arba lėtai veikiančių URL įkėlimas. Taipogi, gali būti sukuriamas amžinas ciklas, skriptui nuskaitant patį save. Kartais net web serverio perkrovimas neišgelbsti, kadangi keletas užklausų lieka buferyje ir jie vėl toliau sėkmingai ryja sistemos resursus. Serveris turi būti sustabdomas keletui sekundžių ir tada paleidžiamas iš naujo.<br />
Į pagalbą ateina allow_url_fopen nustatymas, kurį nustačius į false, skriptas galės pasiekti išorinius šaltinius tik su curl arba socketais. Blogiausia, kad streamai suteikia priėjimą prie išorinių šaltinių ir tokioms funkcijoms, kaip require ar include. Jei tokių funkcijų parametruose pasitaiko vartotojo įvedamų duomenų, kenkėjas gali nesunkiai paleisti savo rašytus skriptus. Tai dar viena rimta priežastis išjungti defaultu įjungtą allow_url_fopen. Nepaisant visko, su fopen() atidarinėti išorinius URL yra pakankamai saugu (arba/ir reikalinga), ir dabartinėje versijoje (5.2) jau galima pasinaudoti nauju nustatymu allow_url_include, kuris išjungtas defaultu. Jis atskiria URL apdirbimo funkcionalumą, kadangi leidžia kontroliuoti ar leisti tik nuskaitymus, ar ir include/require. Abu šie nustatymai gali būti keičiami tik skripto išorėje, dėl saugumo sumetimų.</p>
<p><strong>Funkcijų ir klasių draudimas</strong></p>
<p>Jei galvojate, kad php turi daug nustatymų, pasidomėkite, kiek yra funkcijų <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Be abejo, visos funkcijos yra naudingos vienais ar kitais atvejais, tačiau kai kuriomis iš jų paslaugų teikėjai nenori leisti naudotis vartotojams. Tokios funkcijos, kaip exec() leidžia apeiti safe_mode ir open_basedir nustatymus, arba mail() - gali būti panaudota išsiųsti dideliems kiekiams spamo. Tam yra skirti nustatymai disable_functions ir disable_classes, kurioms galima pateikti kableliais atskirtą sąrašą draudžiamų funkcijų ar klasių. Skriptui, bandant naudoti uždraustą funkciją ar klasę bus grąžintas fatal error. Šis nustatymas, nors ir labai naudingas, deja, turi vieną apribojimą. Jis gali būti keičiamas tik php.ini faile, o tai reiškia, kad negalima vieniems vartotojams leisti, o kitiems apriboti tam tikrų funkcijų. Visiems bus vienodi draudimai. Po šio nustatymo keitimo taip pat būtina perkrauti web serverį.</p>
<p><strong>Modulių dinaminis įkrovimas</strong></p>
<p>enable_dl - leidžia pasirinkti ar leisti skriptui įkrauti modulį dinamiškai. Defaultu šis nustatymas įjungtas, todėl suteikia gan patogų dalyką - skripto metu galima įkrauti extensioną, tačiau tai yra didelė saugumo spraga. Nėra būdo žinoti, ką daro įkraunamas modulis, jis gali suteikti priėjimą vartotojui prie to, kas šiaip yra uždrausta ar atlikti bet kokias sistemos operacijas. Net ir be vartotojo piktų kėslų, modulis gali būti parašytas prastai, nekokybiškai, o tai taipogi gali paveikti visą sistemą. Rekomenduojama šį nustatymą išjungti php.ini arba virtual hosto lygmenyje.</p>
<p style="font-weight: bold">Pabaiga</p>
<p>Sėkmės, būkite saugūs! Greitai pasirodys dar viena viso šio romano dalis <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://home.medutis.com/phpblog/2007/02/08/php-saugumo-nustatymai-2-dalis/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP saugumo nustatymai - 1 dalis</title>
		<link>http://home.medutis.com/phpblog/2007/01/12/php-saugumo-nustatymai-1-dalis/</link>
		<comments>http://home.medutis.com/phpblog/2007/01/12/php-saugumo-nustatymai-1-dalis/#comments</comments>
		<pubDate>Fri, 12 Jan 2007 14:37:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHP saugumas]]></category>

		<guid isPermaLink="false">http://home.medutis.com/phpblog/2007/01/12/php-saugumo-nustatymai-1-dalis/</guid>
		<description><![CDATA[Aptikau tokį straipsnelį php&#124;a žurnale, tai nutariau,kad visai pravers pakonspektuot  o ir Jums į naudą išeis.
PHP standartinėje versijoje yra virš 500 INI nustatymų direktyvų. Šis skaičius gali išaugti, jei įdiegsite PECL ar kokių kitų išorinių modulių. Didžioji dalis nustatymų yra palikti veikti standartiškai (default), gali būti, kad jų judinti niekad ir neprireiks. Nenuostabu, kad [...]]]></description>
			<content:encoded><![CDATA[<p>Aptikau tokį straipsnelį php|a žurnale, tai nutariau,kad visai pravers pakonspektuot <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> o ir Jums į naudą išeis.<span id="more-29"></span></p>
<p>PHP standartinėje versijoje yra virš 500 INI nustatymų direktyvų. Šis skaičius gali išaugti, jei įdiegsite PECL ar kokių kitų išorinių modulių. Didžioji dalis nustatymų yra palikti veikti standartiškai (default), gali būti, kad jų judinti niekad ir neprireiks. Nenuostabu, kad turbūt nė vienas žmogus šių visų nustatymų negalėtų mintinai mokėti, tačiau yra keletas svarbesnių, susijusių su saugumu, į kuriuos verta atkreipti dėmesį. Pilnas INI nustatymų aprašymas <a target="_blank" href="http://lt.php.net/manual/en/ini.php">yra čia</a>.</p>
<p>PHP INI nustatymai taipogi turi keletą &#8220;nustatomumo lygių&#8221;. Kai kurie nustatymai, pavyzdžiui, yra tik &#8220;system&#8221; tipo, tai reiškia, kad jį galima pakeisti tik php.ini faile, taigi priėjimas prie jo yra draudžiamas ir skriptams, ir web serverio per-virtualaus hosto nustatymus, ir .htaccess failui. INI sąraše tokie nustatymai žymimi &#8220;PHP_INI_SYSTEM&#8221;.</p>
<p>Kai kurie nustatymai turi &#8220;PHP_INI_PERDIR&#8221; lygį. Tokiu atveju nustatymas gali būti keičiamas php.ini faile arba web serverio virtualaus hosto nustatymuose, arba jo .htaccess faile. Dažniausiai tokie nustatymai įtakoja pavyzdžiui, vartotojo įvedamus duomenis, o jie yra apdirbami dar prieš startuojant php skriptą, taigi skripto viduje, kad ir pirmoje eilutėje kreipimasis pakeisti nustatymą, neduotų jokio naudingo rezultato.</p>
<p>Didžioji nustatymų dalis patenka į &#8220;PHP_INI_ALL&#8221;, tai reiškia, kad nustatymas gali būti keičiamas bet kur, t.y. be jau minėtų būdų, dar papildomai ir pačiame skripte per ini_set() funkciją.</p>
<p><strong>Register globals</strong><br />
Neverta apie juos daug aušinti burnos. Tiesiog reikia išjungti ir tiek <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Nuo 4.1 versijos išjungti default, tačiau dėl senų skriptų palaikomumo būna daug kur įjungti (ypač shared-hostinge). Šis nustatymas paliečia vartotojų įvedamus duomenis dar prieš vykdant skriptą, todėl jį apdirbti racionaliausia php.ini faile (register_globals=0), virtual host nustatymuose (php_admin_flag register_globals 0) arba .htaccess faile (php_flag register_globals 0). Patikrinti galime per phpinfo() funkciją arba ini_get(&#8221;register_globals&#8221;).</p>
<p><strong>Magic Quotes</strong><br />
Panašiai gan nemenką žalą darantis nustatymas, kaip ir register globals. &#8220;magic_quotes_gpc&#8221; nustatymą verta išjungti ne tik dėl saugumo, bet ir dėl tam, kad skriptai būtų vykdomi greičiau - automatinis visų duomenų eskeipinimas taip pat atima resursų, be to, galbūt visai nebūtinas, juk ne visi įvedami duomenys yra naudojami SQL užklausose, be to, magic_quotes veikia ne itin korektiškai, ir vistiek gali palikti spragų saugume. Tai įvedimo apdirbimo nustatymas, taigi jis taip pat yra &#8220;PHP_INI_PERDIR&#8221; tipo. Dar vienas nustatymas &#8220;magic_quotes_runtime&#8221; yra panašus, tačiau priešingai nei &#8220;magic_quotes_gpc&#8221;, yra išjungtas defaultu. Bet kokiu atveju, verta patikrinti, jog abu jie būtų išjungti.</p>
<p><strong>open_basedir</strong><br />
Labai naudingas dalykas shared-hostinge, tam, kad kiti vartotojai, vykdydami skriptus per web serverį, negalėtų landžioti po jūsų failus. Nustatymas keičiamas tik per php.ini failą arba apache virtual hostams. Kadangi atskiriems vartotojams reikia prieiti prie tam tikrų bendrų katalogų ir savo namų katalogo, tai nustatymo keitimas php.ini faile yra beprasmis, reikia diferencijuoti šį parametrą pagal vartotojus. Pvz. php_admin_value open_basedir &#8220;/tmp/:/home/user1/&#8221;. Reikia atminti, kad būtina katalogą iš abiejų pusių atskirti slashais, nes užrašymas &#8220;/home/user1&#8243; leis priėjimą ir prie /home/user1, ir prie /home/user123 ir kitiems katalogams, kurių pradžia būtent tokia, o tai jau yra rimta saugumo spraga.</p>
<p><strong>Safe Mode</strong><br />
Šio nustatymo idėja buvo labai kilni, tačiau pavadinimas gali būti apgaulingas. Safe mode režimas apriboja daug nustatymų susijusių su saugumu, tačiau visus juos galima reguliuoti atskirai ir daug lanksčiau (apie juos kitoje dalyje). Vienas iš svarbiausių dalykų, kad safe mode režime, kai skriptas kreipiasi į failą, tikrinamas skripto savininkas ir failo savininkas. Jei jie sutampa, tuomet operacija leidžiama. Tačiau tokiu būdu galima lengvai prarasti priėjimą prie failų, kurie sukuriami pačių skriptų. Be to, šį apribojimą galima lengvai apeiti su daugeliu funkcijų, pvz. copy(). Nors safe_mode įjungimas ir nekenkia tiesiogiai, tačiau jis sukūria papildomo apkrovimo serveriui, tikrinant failo UID, todėl rekomenduojama išjungti ir protingai suderinti kitus saugumo nustatymus, taip pat atskiriant vartotojus į virtualius hostus bei naudojant gudrias priėjimo teises (chmod).</p>
<p><strong> Expose PHP</strong><br />
expose_php nustatymas įjungtas standartiškai, tačiau nauda iš jo menka, o žala didelė. Įjungimas reiškia, kad kiekvienos užklausos metu siunčiama informacija apie PHP versiją, naudojama serveryje. O tai be abejo naudinga hackeriams, ieškantiems pažeidžiamų senesnių versijų, be to tai yra ir papildomi nereikalingi duomenys, naudojantys saito pralaidumą. Nebūtina visam pasauliui žinoti kokia kalba parašytas tinklapis. Statistikos rinkimui užtenka panaudoti kad ir header(&#8221;X-Powered-By: PHP&#8221;); kuris nerodo PHP versijos. expose_php nustatymas reguliuojamas tik php.ini faile.</p>
<p><strong>Display Errors</strong><br />
display_errors būna įjungtas default, o tai reiškia, kad visos klaidos bus išvedamos tiesiai į browserį. Be abejo, tokia informacija naudinga norintiems pakenkti. Geriausias variantas yra uždrausti lankytojams matyti klaidas, tačiau leisti programuotojui prie jų prieiti. Klaidų nustatymai gali būti keičiami visuose lygiuose (pačiame PHP skripte - taip pat):</p>
<blockquote><p>error_reporting(E_ALL | E_STRICT);<br />
ini_set(&#8217;display_errors&#8217;, 0);<br />
ini_set(&#8217;log_errors&#8217;, 1);<br />
ini_set(&#8217;error_log&#8217;, &#8216;/var/home/user/logs/php.log&#8217;);</p></blockquote>
<p><strong>Pabaiga</strong><br />
Pirmos dalies pabaiga <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://home.medutis.com/phpblog/2007/01/12/php-saugumo-nustatymai-1-dalis/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Kalėdos!</title>
		<link>http://home.medutis.com/phpblog/2006/12/22/kaledos/</link>
		<comments>http://home.medutis.com/phpblog/2006/12/22/kaledos/#comments</comments>
		<pubDate>Fri, 22 Dec 2006 07:22:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHP aktualijos]]></category>

		<guid isPermaLink="false">http://home.medutis.com/phpblog/2006/12/22/kaledos/</guid>
		<description><![CDATA[Su šventėm, mielieji šio blogo skaitytojai!  Tikiuos IVC nesupyks už šią nuorodą  Tai pats geriausias atvirukas kokį esu matęs. Prieš šventes nusprendžiau vėl pajudint gan aktualią temą, kuri dar visai nesenai buvo plėtojama per mūsų susiėjimus prie alaus bokalų (vadinamieji PHP-GTH).
Taigi aptarinėjom mes tokį reikalą, kad vistik pribrendo reikalas prasukti PHP konferenciją, tik [...]]]></description>
			<content:encoded><![CDATA[<p>Su šventėm, mielieji šio blogo skaitytojai! <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Tikiuos <a target="_blank" href="http://www.ivc.lt">IVC</a> nesupyks už <a target="_blank" href="http://ivc.lt/kaledos/?0">šią nuorodą</a> <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Tai pats geriausias atvirukas kokį esu matęs. Prieš šventes nusprendžiau vėl pajudint gan aktualią temą, kuri dar visai nesenai buvo plėtojama per mūsų susiėjimus prie alaus bokalų (vadinamieji PHP-GTH).<span id="more-27"></span><br />
Taigi aptarinėjom mes tokį reikalą, kad vistik pribrendo reikalas prasukti PHP konferenciją, tik šį sykį Vilniuje. Nors buvo drąsių pasisakymų, kad tai galima būtų padaryt dar šiemet, ant švenčių (būtų buvę labai šaunu), tačiau manau, kad žiema - sausis, vasaris - taip pat neblogas laikas. Kadangi įvyko šioks toks &#8220;brainstormingas&#8221;, buvo pasiūlyta keletas temų, kurios galėtų būti aktualios šiandienai PHP bendruomenei:</p>
<ol>
<li>CRUD (Create Read Update Delete), CRUD saugumas, Kaip kiekvieną modelį galima supaprastinti iki CRUD (siūlytojas, berods, araki)</li>
<li>Struktūrinai šablonai, praktinis jų panaudojimas (Design patterns) (araki)</li>
<li>Kodėl Yahoo ant PHP? PHP in enterprise (Lakūnas?)</li>
<li>Ruby on Rails, kaip viską padaryti per 15min? (Yozaz?)</li>
<li>Paymentai (apmokėjimai) naudojant PHP (teibaz?)</li>
<li>Zend Core for WINDOWS (saint)</li>
<li>Migracijos gidas iš PHP į ASP.NET ir atvirkščiai (palete?)</li>
<li>PHP brandingas (įvaizdis) (araki?)</li>
<li>Naujasis Filter extensionas, duomenų filtravimas ir eskeipinimas (medutis)</li>
<li>PHP ateitis, PHP6, namespaces, unikodas, etc. (medutis)</li>
<li>Django, SOA! (midgrad)</li>
<li>Apkrovimo mažinimas ir dalinimas, scaling, mySQL5 navarotai (index merge, innodb), mod_proxy_balancer, (midgrad)</li>
</ol>
<p>Neišsigąskite, skliausteliuose nurodyti siūlytojai (nebūtinai skaitovai), entuziastų skaitovų, beje, neatsirado, tačiau galvoju, kad tai nebus didelė bėda <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> O dabar laukiu kokių nors komentarų, pasisakymų, galbūt konkrečių idėjų ir pasiūlymų, skaitovai taip pat welcome. Palete jau lyg ir beveik pasižadėjo, jog suorganizuos vietą (viešbučio konferencijų salė arba koks nors univeras).</p>
<p>Beje, jau yra naujasis php|arch gruodžio numeris, ten pat, kur ir visad. Ramių švenčių ir gerų dovanų!</p>
]]></content:encoded>
			<wfw:commentRss>http://home.medutis.com/phpblog/2006/12/22/kaledos/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Darbo skelbimas</title>
		<link>http://home.medutis.com/phpblog/2006/12/08/darbo-skelbimas/</link>
		<comments>http://home.medutis.com/phpblog/2006/12/08/darbo-skelbimas/#comments</comments>
		<pubDate>Fri, 08 Dec 2006 10:01:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://home.medutis.com/phpblog/2006/12/08/darbo-skelbimas/</guid>
		<description><![CDATA[Kolega cdmn (taip pat žinomas kaip cdmn4fun) prašė paskelbt savo bloge. Smagu, jei atrodo jog šis blogas to vertas ir rimtai gali pagelbėti  
Reikalingas web (PHP/MySQL) programuotojas.
Darbo pobūdis: freelanceriniai projektai.
Techninio dizainerio gabumai būtų privalumas.
Paskutinio darbo URL arba CV siųsk į mikauzeris@gmail.com
]]></description>
			<content:encoded><![CDATA[<p>Kolega cdmn (taip pat žinomas kaip cdmn4fun) prašė paskelbt savo bloge. Smagu, jei atrodo jog šis blogas to vertas ir rimtai gali pagelbėti <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span class="normal">Reikalingas web (PHP/MySQL) programuotojas.<br />
Darbo pobūdis: freelanceriniai projektai.<br />
Techninio dizainerio gabumai būtų privalumas.<br />
Paskutinio darbo URL arba CV siųsk į <a href="mailto:mikauzeris@gmail.com">mikauzeris@gmail.com</a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://home.medutis.com/phpblog/2006/12/08/darbo-skelbimas/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP&#124;arch lapkričio numeris</title>
		<link>http://home.medutis.com/phpblog/2006/11/29/phparch-lapkricio-numeris/</link>
		<comments>http://home.medutis.com/phpblog/2006/11/29/phparch-lapkricio-numeris/#comments</comments>
		<pubDate>Wed, 29 Nov 2006 11:24:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHP pamąstymai]]></category>

		<guid isPermaLink="false">http://home.medutis.com/phpblog/2006/11/29/phparch-lapkricio-numeris/</guid>
		<description><![CDATA[Ta beveik eilinis pranešimas apie naują šio žurnalo numerį. Kaip ir visada, jį rasite ten pat, ta pačia tvarka  
Pervertęs šį numerį pagalvojau apie mūsų PHP bendruomenės (ir Lietuvoje, ir pasaulyje) tolerantiškumą. Padariau išvadą, kad PHP&#8217;istai yra labai tolerantiški  Nustebino tai, jog žurnale yra ir straipsnis pavadinimu &#8220;learning from Ruby on Rails&#8221;, labai [...]]]></description>
			<content:encoded><![CDATA[<p>Ta beveik eilinis pranešimas apie naują šio žurnalo numerį. Kaip ir visada, jį rasite ten pat, ta pačia tvarka <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-25"></span>Pervertęs šį numerį pagalvojau apie mūsų PHP bendruomenės (ir Lietuvoje, ir pasaulyje) tolerantiškumą. Padariau išvadą, kad PHP&#8217;istai yra labai tolerantiški <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Nustebino tai, jog žurnale yra ir straipsnis pavadinimu &#8220;learning from Ruby on Rails&#8221;, labai smagu, jog programuotojai sugeba žvelgti plačiau ir mokytis ne tik virdami &#8220;savo sultyse&#8221;, bet ir pažvelgdami į kitas (galbūt net šiek tiek konkurentines) kalbas. Kitas pavyzdys: pernai įvykusioje PHP konferencijoje taipogi turėjo būti pranešimas apie &#8220;migravimą iš PHP į ASP.NET&#8221;, deja autorius negalėjo (ar pabijojo) atvykti. Nors buvo pasisakymų, jog toks pranešimas tik padarytų gėdą konferencijai, buvo ir manančių, jog paklausyti apie tai būtų gan įdomu, pasimokyti kažko iš skirtingos technologijos. Niekas nebūtų priešinęsis tam, kad jis būtų įvykęs, o galbūt ir pavadinimas visai neatspindi galimos naudos. Galbūt dar ir šiemet įvyksianti (tokie planai prie alaus bokalų buvo rezgami :)) konferencija taip pat be pranešimų apie kitas kalbas ar &#8220;migravimus&#8221; gali neapsieiti. Keletas PHP programuotojų savo bloguose taip pat nevengia brūkštelti apie ruby on rails, juose yra ir pagyrimų, ir kritikos (objektyvios!).</p>
<p>Kartais tenka išgirsti java ar .net programuotojų pašiepiančių, ar net įžeidžiančių pasisakymų apie php.  Galbūt tolerancija ir PHP kūrėjų plačios pažiūros leidžia šiai kalbai išsilaikyti viena iš lyderių?</p>
]]></content:encoded>
			<wfw:commentRss>http://home.medutis.com/phpblog/2006/11/29/phparch-lapkricio-numeris/feed/</wfw:commentRss>
		</item>
		<item>
		<title>magic quotes normalization</title>
		<link>http://home.medutis.com/phpblog/2006/11/26/magic-quotes-normalization/</link>
		<comments>http://home.medutis.com/phpblog/2006/11/26/magic-quotes-normalization/#comments</comments>
		<pubDate>Sat, 25 Nov 2006 22:43:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHP saugumas]]></category>

		<guid isPermaLink="false">http://home.medutis.com/phpblog/2006/11/26/magic-quotes-normalization/</guid>
		<description><![CDATA[Kaip žinia, PHP6, kuris jau nebe už kalnų, nebebus magic_quotes nustatymo, kurio įjungimas &#8220;On&#8221; reikšdavo, kad visos duomenų, perduodamų GET, POST ar COOKIE masyvais yra eskeipinami slešais &#8220;\&#8221;. Toks sumanymas buvo apsaugoti programuotojus nuo sql injectionų, kurie dar ir dabar gan populiarūs plačiajame internete (&#8221;kelkit programuotojams algas, nes kuo mažiau mokate, tuo greičiau lūžta Jūsų [...]]]></description>
			<content:encoded><![CDATA[<p>Kaip žinia, PHP6, kuris jau nebe už kalnų, nebebus magic_quotes nustatymo, kurio įjungimas &#8220;On&#8221; reikšdavo, kad visos duomenų, perduodamų GET, POST ar COOKIE masyvais yra eskeipinami slešais &#8220;\&#8221;. Toks sumanymas buvo apsaugoti programuotojus nuo sql injectionų, kurie dar ir dabar gan populiarūs plačiajame internete (&#8221;kelkit programuotojams algas, nes kuo mažiau mokate, tuo greičiau lūžta Jūsų puslapis&#8221; ;)).</p>
<p><span id="more-24"></span> Kadangi deja, šiandien vis dar dirbame ir su senosiomis PHP4 versijomis, ir su skirtingų konfigūracijų PHP, susimislijau būdą kaip gražiai ir universaliai apeiti magic_quotes. Manau ir Jums visai pravers, jei jau skaitote šį blogą. Trumpi komentarai: į tai, kas vadinama &#8220;request&#8221; mano manymu neturi patekti COOKIES, todėl naudojame tik POST ir GET. Su COOKIES ir FILES elkitės kaip norite, kolkas mano klasėj jie neapdirbti <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Paprastai prasukti foreach visam masyvui negaliu, nes kartais tenka perdavinėt ir dvimačius ar net trimačius masyvus, o array_walk_recursive, kaip žinia yra rekursinė funkcija, kuri su tam tikrais vartotojo įsikišimais gali ir užlaužti serverį, jei naudojama netinkamai. Pvz. jeigu naudosime array_walk_recursive ir &#8220;hakeris&#8221; sugalvos papost&#8217;inti serveriui labai ilgamatį masyvą, pvz. foo[][][][][]&#8230;, PHP kintamųjų stekui baigsis atmintis ir viskas gali baigtis crashu. Masyvo dimensiją galite lengvai pasikoreguoti pakeitę $array_level.</p>
<p>Taigi, galite peržvelgti kaip atrodo klasė <a target="_blank" href="http://home.medutis.com/php/request.class.phps">čia</a>, o parsisiųsti patį sourcą <a href="http://home.medutis.com/php/request.class.rar">čia</a>. Ačiū už dėmesį.</p>
]]></content:encoded>
			<wfw:commentRss>http://home.medutis.com/phpblog/2006/11/26/magic-quotes-normalization/feed/</wfw:commentRss>
		</item>
		<item>
		<title>naujas phpBB modas!</title>
		<link>http://home.medutis.com/phpblog/2006/11/19/naujas-phpbb-modas/</link>
		<comments>http://home.medutis.com/phpblog/2006/11/19/naujas-phpbb-modas/#comments</comments>
		<pubDate>Sun, 19 Nov 2006 21:34:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[PHP aktualijos]]></category>

		<category><![CDATA[PHP saugumas]]></category>

		<guid isPermaLink="false">http://home.medutis.com/phpblog/2006/11/19/naujas-phpbb-modas/</guid>
		<description><![CDATA[Kiek žinau, yra nemažai lankytojų, kurie karts nuo karto pasurfina į mano blogą, ir man labai gaila, kad buvo tokia ilga pertrauka, tačiau, esu įsitikinęs, kad geriau tylėti, kol neturi nieko mandro pasakyti 
Taigi, pranešu, kad sukūriau nesveikai nerealų afigieną modą, skirtą phpBB forumui.

Mod failą galite rasti čia. Visa idėja trumpai: turiu aš tokį forumėlį, [...]]]></description>
			<content:encoded><![CDATA[<p>Kiek žinau, yra nemažai lankytojų, kurie karts nuo karto pasurfina į mano blogą, ir man labai gaila, kad buvo tokia ilga pertrauka, tačiau, esu įsitikinęs, kad geriau tylėti, kol neturi nieko mandro pasakyti <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Taigi, pranešu, kad sukūriau nesveikai nerealų afigieną modą, skirtą phpBB forumui.</p>
<p><span id="more-23"></span></p>
<p>Mod failą galite rasti <a target="_blank" href="http://home.medutis.com/php/phpBB-president-1.0.1.mod">čia</a>. Visa idėja trumpai: turiu aš tokį forumėlį, kuris, nors ir neturi daug vartotojų, tačiau yra aktyvus, be kita ko, pastoviai į jį lenda visokio plauko spameriai ir botai. Nepadėjo nei forumo sugriežtinimas - žinutes gali rašyti tik registruoti vartotojai, registracijos metu turi įvesti paveikslėlyje esantį kodą (captcha), o taip pat dar ir patvirtinti emailu gautą nuorodą. Vistiek, pasirodo, spameriai gan rimtai nusprendė susidoroti su vienu iš populiariausių php forumo sistemų. Šio modo idėja - registracijos metu užduoti suktą klausimą, kurio spameris nesupras, tuo labiau nežinos į jį atsakymo. Tikiuosi, kad jam nebus verta gaišti laiko googlinant ar bandant perprasti lietuvių kalbą ir jos politiką <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Žinoma, modas ganėtinai lanksčiai ir patogiai leis pakeisti inteligentiškąjį klausimą bei atsakymą bet kuriuo metu.</p>
<p>Tikiuosi, kad bus pravartus ne tik man, ir be abejo, lauksiu atsiliepimų.</p>
]]></content:encoded>
			<wfw:commentRss>http://home.medutis.com/phpblog/2006/11/19/naujas-phpbb-modas/feed/</wfw:commentRss>
		</item>
		<item>
		<title>2006 gegužės mėnesio apžvalga</title>
		<link>http://home.medutis.com/phpblog/2006/06/21/2006-geguzes-menesio-apzvalga/</link>
		<comments>http://home.medutis.com/phpblog/2006/06/21/2006-geguzes-menesio-apzvalga/#comments</comments>
		<pubDate>Tue, 20 Jun 2006 22:43:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHP aktualijos]]></category>

		<guid isPermaLink="false">http://home.medutis.com/phpblog/2006/06/21/2006-geguzes-menesio-apzvalga/</guid>
		<description><![CDATA[Tiesą sakant jau gan senokai yra naujausias mūsų žurnalo numeris  Apžvalga, kaip įprastai ateina vėliau. Neturiu daug ko ir pasakyt, išskyrus tai, kad ir toliau vystomas php, kaip enterprise lygio kalbos įvaizdis, kone visi pagrindiniai didieji straipsniai atrodo tuo ir kvepia. Įžanginiame žodyje atpasakojami nuotykiai vienoj didžiausių PHP konferencijų php&#124;tek, atrodo smagūs dalykai ten [...]]]></description>
			<content:encoded><![CDATA[<p>Tiesą sakant jau gan senokai yra naujausias mūsų žurnalo numeris <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Apžvalga, kaip įprastai ateina vėliau. Neturiu daug ko ir pasakyt, išskyrus tai, kad ir toliau vystomas php, kaip enterprise lygio kalbos įvaizdis, kone visi pagrindiniai didieji straipsniai atrodo tuo ir kvepia.<span id="more-22"></span> Įžanginiame žodyje atpasakojami nuotykiai vienoj didžiausių PHP konferencijų php|tek, atrodo smagūs dalykai ten dedas kitoj pusėj okeano, gal verta ir mums, lietuviams, susikooperuot ir nulėkt pvz. į php/db|works 2006 rugsėjo mėn. Kanadoj? <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Taipogi atrodo šaunus extension&#8217;as yra XMLWriter, teks užnaudot, ir beje, ar žinojot, kad PHP naudojant sesijas, sesijos id cookiui suteikiamas atgalinės datos expiration time - 1981-11-19 08:52 ? <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Ogi tai PHP sesijų extensiono kūrėjo gimimo data.</p>
]]></content:encoded>
			<wfw:commentRss>http://home.medutis.com/phpblog/2006/06/21/2006-geguzes-menesio-apzvalga/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Email injekcijos</title>
		<link>http://home.medutis.com/phpblog/2006/06/02/email-injekcijos/</link>
		<comments>http://home.medutis.com/phpblog/2006/06/02/email-injekcijos/#comments</comments>
		<pubDate>Thu, 01 Jun 2006 22:04:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHP saugumas]]></category>

		<guid isPermaLink="false">http://home.medutis.com/phpblog/2006/06/02/email-injekcijos/</guid>
		<description><![CDATA[Jau užgraužė kantrybė tiek ilgai neatsinaujinant, taigi šiek tiek informacijos, kuri, manau niekam nepakenks  
Email injekcija atsirado palyginti neseniai, prieš keletą metų. Tiesą sakant, tai tėra tik dar vienas aklo pasitikėjimo vartotojo įvedimu, pavyzdys. Jei Jūs naudojatės mail() funkcija, kurios argumentais leidžiate manipuliuoti vartotojams, jie gali siųsti laiškus per Jūsų serverį. Nieko nuostabaus.
Šiuo metu [...]]]></description>
			<content:encoded><![CDATA[<p>Jau užgraužė kantrybė tiek ilgai neatsinaujinant, taigi šiek tiek informacijos, kuri, manau niekam nepakenks <img src='http://home.medutis.com/phpblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Email injekcija atsirado palyginti neseniai, prieš keletą metų. Tiesą sakant, tai tėra tik dar vienas aklo pasitikėjimo vartotojo įvedimu, pavyzdys. Jei Jūs naudojatės <strong>mail()</strong> funkcija, kurios argumentais leidžiate manipuliuoti vartotojams, jie gali siųsti laiškus per Jūsų serverį. Nieko nuostabaus.<span id="more-21"></span><br />
Šiuo metu egzistuoja nemažai būdų kaip pasinaudoti email injekcija PHP skriptuose. Šio tipo pažeidimai yra tikras lobis el.pašto spameriams. Pagrindinė problema, dėlko el.pašto injekcija yra populiari, yra ta, jog programuotojai nesupranta duomenų filtravimo, prieš juos paduodant email funkcijai, svarbos.</p>
<p><strong>Mail()</strong> funkcija suteikia ganėtinai neišdirbtą sąsąją siųsti el. paštui. Kaip ir dauguma PHP funkcijų, ši yra labai lanksti - leidžia siųsti beveik bet kokio tipo ir formato laišką.<br />
<strong>Mail()</strong> funkcijos naudojimas yra labai paprastas, todėl nepatyrusiam programuotojui saugumo spragos dažniausiai nesimato. Pats paprasčiausias būdas išsiųsti laišką:</p>
<blockquote><p><em><?php<br />
mail('to@pavyzdys.lt', 'Antraštė', 'Žinutė');<br />
?><br />
</em></p></blockquote>
<p>Šis pavyzdys iškart tampa el.pašto injekcija, kai tik pirmąjį argumentą pakeičiame vartotojo įvedamu tekstu:</p>
<blockquote><p><em><?php<br />
mail($_POST['email'], 'Antraštė', 'Žinutė');<br />
?></em></p></blockquote>
<p>Tai panašu į bet kokią kitą injekciją, tačiau konkekstas skiriasi. Jei įvesime savo pašto adresą, gausime laišką panašų į šį (supaprastintas vaizdas):</p>
<div style="margin-left: 40px"><span style="font-style: italic">To: medutis@medutis.com</span><br style="font-style: italic" /><span style="font-style: italic">Subject: Antraštė</span><br style="font-style: italic" /><span style="font-style: italic">From: nobody@medutis.com</span><br style="font-style: italic" /><br style="font-style: italic" /><span style="font-style: italic">Mano žinutė</span></div>
<p>Antraštės &#8220;kam&#8221; (To) reikšmė yra įvedama vartotojo, taigi kas nors, norėdamas išsiųsti spam žinutę iš Jūsų serverio, paprasčiausiai įves sąrašą adresų, atskirtų kableliais:</p>
<div style="margin-left: 40px"><span style="font-style: italic">vienas@adresas.lt, antras@adresas.lt, trecias@adresas.lt</span></div>
<p>Galime įsivaizduoti, jog bus atlikta tokia komanda:</p>
<div style="margin-left: 40px"><span style="font-style: italic"><?php</span><br style="font-style: italic" /><span style="font-style: italic">mail(&#8217;vienas@adresas.lt, antras@adresas.lt, trecias@adresas.lt&#8217;, &#8216;Antraštė&#8217;, &#8216;Žinutė&#8217;);</span><br style="font-style: italic" /><span style="font-style: italic">?></span></div>
<p>Kiekvienas iš šių adresų gaus laišką, kadangi To antraštė suteikia galimybę siųsti keliems adresatams, atskirtiems kableliais. Taip pat klaidingai galvojama, jog ši problema egzistuoja tik leidžiant vartotojui operuoti pirmuoju argumentu, o nieko blogo nenutiks, jei To reikšmė bus statinė. Daug didesnių bėdų bus, jei bent dalis vartotojo įvedimo bus naudojama ketvirtajame argumente.</p>
<p><span style="font-weight: bold">Headerių injekcija</span></p>
<p>Dažnai mail funkcija naudojama siųsti kontaktams ar atsiliepimams tiesiai iš puslapyje esančios formos. Jei nenurodome specialių headerių, siuntėjo adresas nustatomas web serverio. Dažniausiai formoje vartotojas nurodo savo el. pašto adresą, taigi jei norime imituoti, jog laiškas buvo siųstas būtent iš įvesto adreso, turime nurodyti headerius &#8220;From&#8221; ketvirtajame argumente.</p>
<div style="margin-left: 40px"><span style="font-style: italic"><?php</span><br style="font-style: italic" /><span style="font-style: italic">mail(&#8217;to@pavyzdys.lt&#8217;, &#8216;Antraštė&#8217;, &#8216;Žinutė&#8217;, &#8216;From: medutis@medutis.com&#8217;);</span><br style="font-style: italic" /><span style="font-style: italic">?></span></div>
<p>Aišku, tai, kad galima nurodyti laiško antraštes, mums suteikia papildomo lankstumo, tačiau čia taip pat slypi ir dideli pavojai. Įsivaizduokime tokia komandą:</p>
<div style="margin-left: 40px"><span style="font-style: italic"><?</span><br style="font-style: italic" /><span style="font-style: italic">mail(&#8217;to@pavyzdys.lt&#8217;, &#8216;Antraštė&#8217;, &#8216;Žinutė&#8217;, &#8216;From: {$_POST['email']}&#8217;);</span><br style="font-style: italic" /><span style="font-style: italic">?></span></div>
<p>Ši komanda veiks, taip kaip ir tikitės: laiškas bus išsiųstas, o formoje įvestas email bus nurodytas kaip siuntėjo. Deja, dabar vartotojas turi visišką laisvę operuoti su antraštėmis. Vartotojas, turintis piktų kėslų, į formos &#8216;email&#8217; laukelį įves:</p>
<div style="margin-left: 40px"><span style="font-style: italic">nuo@pavyzdys.lt</span><br style="font-style: italic" /><span style="font-style: italic">To: medutis@medutis.com</span></div>
<p>Be abejo, šis bandymas pakenkti bus pastebėtas, kadangi <span style="text-decoration: underline">to@pavyzdys.lt</span> gaus laišką:</p>
<div style="margin-left: 40px"><span style="font-style: italic">To: to@pavyzdys.lt</span><br style="font-style: italic" /><span style="font-style: italic">Subject: Antraštė</span><br style="font-style: italic" /><span style="font-style: italic">From: nuo@pavyzdys.lt</span><br style="font-style: italic" /><span style="font-style: italic">To: medutis@medutis.com</span><br style="font-style: italic" /><br style="font-style: italic" /><span style="font-style: italic">Žinutė</span></div>
<p>Laiškas bus išsiųstas abiems adresatams, tačiau, kad ši saugumo spranga nebūtų pastebėta, blogiukai pasinaudos BCC antrašte ir galės nepastebimai naudotis serveriu ilgą laiką. Įvedame:</p>
<div style="margin-left: 40px"><span style="font-style: italic">nuo@pavyzdys.lt</span><br style="font-style: italic" /><span style="font-style: italic">Bcc: medutis@medutis.com</span></div>
<p>Kaip žinia, BCC antraštė nėra rodoma el. laiške, todėl <span style="text-decoration: underline">to@pavyzdys.lt</span> matys laišką, kuris tarsi buvo siųstas tik jam. Deja, pasirodys, kad neaišku kiek dar žmonių gavo tą patį laišką, todėl greitai jūsų skriptas taps spamerių numylėtiniu.</p>
<p><span style="font-weight: bold">Saugumo tikrinimas</span></p>
<p>Norėdami patikrinti savo skriptus, galite įvesti daugiau nei vieną eilutę į formos įvedimo laukelį. Pavyzdžiui:</p>
<div style="margin-left: 40px"><span style="font-style: italic">nuo@pavyzdys.lt</span><br style="font-style: italic" /><span style="font-style: italic">Bcc: mano@pastas.lt</span></div>
<p>Tikri spameriai naudojasi tam tikrais įrankiais, kurie automatiškai prisijungia prie web serverio ir papostina url-užkoduotus tekstus. Pavyzdžiui:</p>
<div style="margin-left: 40px"><span style="font-style: italic"><?</span><br style="font-style: italic" /><span style="font-style: italic">$fp = fsockopen(&#8217;www.pavyzdys.lt&#8217;, 80);</span><br style="font-style: italic" /><span style="font-style: italic">fputs($fp, &#8220;POST /webmail.php HTTP/1.1\r\n&#8221;);</span><br style="font-style: italic" /><span style="font-style: italic">fputs($fp, &#8220;Host: pavyzdys.lt\r\n&#8221;);</span><br style="font-style: italic" /><span style="font-style: italic">fputs($fp, &#8220;Content-Type: application/x-www-form-urlencoded\r\n&#8221;);</span><br style="font-style: italic" /><span style="font-style: italic">fputs($fp, &#8220;Content-Length: 95\r\n\r\n&#8221;);</span><br style="font-style: italic" /><span style="font-style: italic">fputs($fp, &#8220;email=nuo%40pavyzdys.lt%0D%0ABCC%3A+medutis%40medutis.com&#038;subject=Mano+antraste&#038;message=Mano+zinute&#8221;);</span><br style="font-style: italic" /><span style="font-style: italic">fclose($fp);</span><br style="font-style: italic" /><span style="font-style: italic">?></span></div>
<p>Web serveriui POST kintamieji paduodami panašiai kaip ir GET, šiuo atveju buvo paimti entities naujai eilutei, kuri pažymėta kaip <span style="font-weight: bold">%0D%0A</span>. Šis pavyzdys yra labai paprastas, dažnai būna vykdomos atakos siųsti HTML laiškus, prisegtus failus ir pan. Jei spameriui leidžiama operuoti funkcijos argumentais, jis gali padaryti bet ką, ką leidžia <span style="font-weight: bold">mail()</span> funkcija.</p>
<p><span style="font-weight: bold">Kaip apsisaugoti?</span></p>
<p>Tam tereikia filtruoti vartotojo įvedamus duomenis. Žinoma, uždrausti įvedinėti tarpus ar eilutės perkėlimus pačiame žinutės tekste ar jos pavadinime nereikia. Kai kuriuos email adresus išfiltruoti taip pat sudėtinga dėl jo ne itin griežtos specifikacijos. Atpažinti įvedamiems el. pašto adresams gali padėti reguliariosios išraiškos (regexp), taip išvengiant email injekcijos atakos.</p>
<div style="margin-left: 40px"><span style="font-style: italic"><?php</span><br style="font-style: italic" /><span style="font-style: italic">$svarus_emailas = false;</span><br style="font-style: italic" /><span style="font-style: italic">$email_pattern = &#8216;/^[^@\s<&#038;>]+@([-a-z0-9]+\.)+([a-z]{2,}$/i&#8217;;</span><br style="font-style: italic" /><span style="font-style: italic">if (preg_match($email_pattern, $_POST['email'])) $svarus_emailas = true;</span><br style="font-style: italic" /><span style="font-style: italic">?></span></div>
<p>Taip pat greitas ir patogus būdas patikrinti ar kintamajame nėra perkėlimų ar naujų eilučių:</p>
<div style="margin-left: 40px"><span style="font-style: italic"><?</span><br style="font-style: italic" /><span style="font-style: italic">if (ctype_print($_POST['email'])) // viskas gerai!</span><br style="font-style: italic" /><span style="font-style: italic">?></span></div>
<p>Funkcija <span style="font-weight: bold">checkdnsrr()</span> taip pat gali padėti, jei su regexp išraiška galime išgauti domeno vardą. Tuomet su šia funkcija patikriname ar tikrai toks domenas egzistuoja. Deja, <span style="font-weight: bold">checkdnsrr()</span> neveikia windows aplinkoje.</p>
<p>Paprasta apsauga nuo email injekcijų leidžia išvengti atakų, ten kur mažiausiai tikitės - dažniausiai pasitaikančiose nedidelėse kontaktų ar atsiliepimų formose. Šios formelės ypač populiarios mūsuose, taigi verta į tai atkreipti dėmesį.</p>
]]></content:encoded>
			<wfw:commentRss>http://home.medutis.com/phpblog/2006/06/02/email-injekcijos/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
