<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>&#60;?blog &#187; bug</title>
	<atom:link href="https://blog.visionsoftware.pl/tag/bug/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.visionsoftware.pl</link>
	<description>...nie tylko o programowaniu</description>
	<lastBuildDate>Sun, 23 Mar 2014 19:23:43 +0000</lastBuildDate>
	<language>pl-PL</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>Poważny bug w PHP</title>
		<link>https://blog.visionsoftware.pl/programowanie-php/%ef%bb%bf%ef%bb%bfpowazny-bug-w-php.html</link>
		<comments>https://blog.visionsoftware.pl/programowanie-php/%ef%bb%bf%ef%bb%bfpowazny-bug-w-php.html#comments</comments>
		<pubDate>Thu, 06 Jan 2011 13:07:19 +0000</pubDate>
		<dc:creator><![CDATA[Marcin Fliszta]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[bład]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.visionsoftware.pl/?p=123</guid>
		<description><![CDATA[Rick Regan opublikował na blogu exploringbinary.com informacje na temat poważnego błędu w PHP. Przetwarzanie określonej liczby może doprowadzić do wpadnięcia w nieskończoną pętlę wykorzystującą 100% zasobów procesora, co w wyniku zawiesi interpreter. Problem dotyczy dużej liczby serwerów opartych o procesor 32 bitowy. Aby doprowadzić do zawieszenia PHP, wystarczy naprawdę niewiele: Feralny ciąg to największa liczba zmiennoprzecinkowa podwójnej precyzji. Taki sam wynik będzie miało podanie liczby w normalnej notacji, wtedy jednak zawiera ona 324 cyfry. Problem [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Rick  Regan opublikował na blogu exploringbinary.com informacje na temat  poważnego błędu w PHP. Przetwarzanie określonej liczby może doprowadzić  do wpadnięcia w nieskończoną pętlę wykorzystującą 100% zasobów  procesora, co w wyniku zawiesi interpreter. Problem dotyczy dużej liczby  serwerów opartych o procesor 32 bitowy.<span id="more-123"></span></p>
<p>Aby doprowadzić do zawieszenia PHP, wystarczy naprawdę niewiele:</p>
<pre class="brush: php; title: ; notranslate">&lt;?php $d = 2.2250738585072011e-308; ?&gt;</pre>
<p>Feralny  ciąg to największa liczba zmiennoprzecinkowa podwójnej precyzji. Taki  sam wynik będzie miało podanie liczby w normalnej notacji, wtedy jednak  zawiera ona 324 cyfry. Problem pojawia się, gdy przetwarzamy powyższy  ciąg jako liczbę. W przypadku, gdy traktowany jest jako string, nie  wywołuje nieporządnego efektu.</p>
<p>Poniższy kod zatem nie jest niebezpieczny:</p>
<pre class="brush: php; title: ; notranslate">&lt;?php $d = '2.2250738585072011e-308'; echo $d; ?&gt;</pre>
<p>Ale następujący powoduje opisany wyżej problem:</p>
<pre class="brush: php; title: ; notranslate">&lt;?php $d = '2.2250738585072011e-308'; echo $d + 0; ?&gt;</pre>
<p>Autor  testował zachowanie powyższego kody na maszynie z procesorem Intel Core  Duo: pod Windows z PHP 5.3.1 i XAMPP 1.7.3, oraz pod Linux z PHP  5.3.2-1ubuntu4.5. W obu przypadkach doszło do nawieszenia interpretera.  Czytelnicy exploringbinary.com w komentarzach do posta publikowali wiele  innych konfiguracji, które były lub nie były odporne na opisany błąd.  Dyskusję dotyczącą błędu można także zobaczyć na <a href="http://bugs.php.net/bug.php?id=53632" target="_blank">trackerze bugów PHP</a>.</p>
<p>Zespół  PHP potwierdził istnienie problemu, który jest związany z wadą  występującą w koprocesorze FPU z zestawem instrukcji x87 (występujący w  procesorach z rodziny x86). Błąd nie dotyczy więc tylko PHP, może  występować w innych językach oraz aplikacjach. Nie pojawi się jednak,  jeśli PHP zostało skompilowane z flagami -mfpmath=sse lub -ffloat-store.</p>
<p>Odnaleziony  błąd można uznać za całkiem poważny. Teoretycznie można doprowadzić do  zawieszenia PHP na podatnych serwerach poprzez wpisanie feralnego ciągu  jako parametru GET lub podaniu do w zwykłym formularzu, przetwarzającym  go jako liczbę. Należy pamiętać, że przez przetwarzanie należy rozumieć  samo przypisanie do zmiennej lub użycie jakiejkolwiek funkcji  matematycznej na niebezpiecznej liczbie. Na taki rodzaj ataku może być  podatna ogromna liczba serwisów internetowych. W większości przypadków  będzie polegał na zużyciu zasobów procesora w 100%, chwilowym  zawieszeniu i zrestartowaniu PHP.</p>
<p>Sposobów  na rozwiązanie problemu jest kilka. Można skorzystać z <a href="http://svn.php.net/viewvc?view=revision&amp;revision=307095" target="_blank">udostepnionej  poprawki</a>, przekompilować PHP z flagami -mfpmath=sse lub -ffloat-store,  albo na poczatku swoich skryptów PHP umieścić  proponowany przez niebezpiecznik.pl kod:</p>
<pre class="brush: php; title: ; notranslate">if (strpos(str_replace('.', '', serialize($GLOBALS)),
'22250738585072011')!==false) die();</pre>
<p>Dzisiaj zostały także wydane nowe PHP 5.3.5 oraz 5.2.17, w których usunięto problem. W przypadku gałęzi 5.2 jest to już trzecie z rzedu &#8222;ostatnie&#8221; wydanie, kończące support tej wersji.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.visionsoftware.pl/programowanie-php/%ef%bb%bf%ef%bb%bfpowazny-bug-w-php.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
