<?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>Jugando entre diseñadores &#187; mysql</title>
	<atom:link href="http://blog.nnatali.com/category/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nnatali.com</link>
	<description>... y aquí de que se escribe</description>
	<lastBuildDate>Wed, 14 Jul 2010 07:08:14 +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>SQL Injection en MySQL ¿Qué es y cómo evitarlo?</title>
		<link>http://blog.nnatali.com/2010/01/21/sql-injection-en-mysql-que-es-y-como-evitarlo/</link>
		<comments>http://blog.nnatali.com/2010/01/21/sql-injection-en-mysql-que-es-y-como-evitarlo/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 09:49:17 +0000</pubDate>
		<dc:creator>nnatali</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.nnatali.com/?p=3594</guid>
		<description><![CDATA[Cuando hablé sobre los ataques de Black Hat SEO, os conté muy por encima que es un ataque por SQL Injection. Pues hoy vamos a ver una forma de evitarlos. ¿Qué es un ataque por Inyección SQL? Con un ataque de este tipo lo que intentan es conseguir la información que almacenamos en nuestra base [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando hablé sobre los ataques de <a href="http://blog.nnatali.com/2009/12/07/black-hat-seo-y-como-no-debemos-posicionar-nuestra-web/">Black Hat SEO</a>, os conté muy por encima que es un ataque por SQL Injection. Pues hoy vamos a ver una forma de evitarlos.</p>
<p><strong>¿Qué es un ataque por Inyección SQL?</strong><br />
Con un ataque de este tipo lo que intentan es conseguir la información que almacenamos en nuestra base de datos, modificarla o incluso eliminarla. Para ello localizan archivos a los que les pasamos variables a través de GET o POST.</p>
<p>Vamos a ver un ejemplo, si tenemos un archivo con una query de este estilo:</p>
<pre name="code" class="php:nocontrols">
&#038;query='DELETE * FROM noticias WHERE id="'.$_GET['id'].'"';
</pre>
<p>En un archivo llamado noticias.php y le pasamos el parámetro id por la url (get), podrán atacarnos llamando al archivo y modificando los parámetros a pasarle:</p>
<pre name="code" class="php:nocontrols">
noticias.php?id=12" OR 1="1
</pre>
<p>Si volvemos a la query, veremos que con los nuevos parámetros, esta quedaría así:</p>
<pre name="code" class="php:nocontrols">
&#038;query='DELETE * FROM noticias WHERE id="12" OR 1="1"';
</pre>
<p>Por lo que modificarían nuestra query, haciéndola siempre posible, pues 1 es igual a 1, por lo tanto eliminaría todas las noticias de nuestra tabla, cuando nosotros lo que queríamos era eliminar una única noticia.</p>
<p>En el caso de pasar las variables por POST también sería posible el ataque, pues añadirían el código malicioso en un campo del formulario dando el mismo resultado.</p>
<p><strong>¿Cómo evitamos un ataque de este tipo?</strong><br />
Cómo no queremos que nos arruinen de por vida, vamos a utilizar dos funciones php muy útiles: <a href="http://www.php-es.com/function.sprintf.html">sprintf</a> y <a href="http://www.php-es.com/function.mysql-real-escape-string.html">mysql_real_escape_string</a>. Si las aplicamos a nuestra query, quedaría así:</p>
<pre name="code" class="php:nocontrols">
$query = sprintf("DELETE * FROM noticias WHERE id='%d'",
 mysql_real_escape_string($id));
</pre>
<p>Con sprintf damos formato a nuestra sentencia asignando el espacio justo para los parámetros a recoger (%d para un número, %s para una cadena, etc) y con mysql_real_escape_string escapamos caracteres especiales, por lo que si nos hicieran el mismo ataque (12&#8243; OR 1=&#8221;1) nos devolvería esto:</p>
<pre name="code" class="php:nocontrols">
&#038;query='DELETE * FROM noticias WHERE id="12"';
</pre>
<p>Cómo véis sólo permanece el 12, eliminando el trozo <strong>&#8221; OR 1=&#8221;1</strong> y evitando así que la consulta siempre sea posible.</p>
<p><strong>Porque más vale prevenir que curar </strong> <img src='http://blog.nnatali.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p align="left"> <a class="tt" href="http://twitter.com/home/?status=SQL+Injection+en+MySQL+%C2%BFQu%C3%A9+es+y+c%C3%B3mo+evitarlo%3F+http://qd7zf.th8.us" title="Twittea esto">Twittea esto</a>  <a class="tt" href="http://delicious.com/post?url=http://blog.nnatali.com/2010/01/21/sql-injection-en-mysql-que-es-y-como-evitarlo/&amp;title=SQL+Injection+en+MySQL+%C2%BFQu%C3%A9+es+y+c%C3%B3mo+evitarlo%3F" title="Guardalo en Delicious">Guardalo en Delicious</a>  <a class="tt" href="http://www.facebook.com/share.php?u=http://blog.nnatali.com/2010/01/21/sql-injection-en-mysql-que-es-y-como-evitarlo/&amp;t=SQL+Injection+en+MySQL+%C2%BFQu%C3%A9+es+y+c%C3%B3mo+evitarlo%3F" title="Compartelo en Facebook">Compartelo en Facebook</a></p><h3  class="related_post_title">Articulos relacionados</h3><ul class="related_post"><li><a href="http://blog.nnatali.com/2010/01/07/sentencias-mysql-campos-de-varias-tablas-en-la-misma-query/" title="Sentencias MYSQL: Campos de varias tablas en la misma query">Sentencias MYSQL: Campos de varias tablas en la misma query</a></li><li><a href="http://blog.nnatali.com/2009/09/09/sentencias-mysql-limit-510/" title="Sentencias MYSQL: LIMIT 5,10">Sentencias MYSQL: LIMIT 5,10</a></li><li><a href="http://blog.nnatali.com/2009/02/26/mysql-mostrar-anadir-modificar-o-eliminar-datos-con-php/" title="MYSQL: Mostrar, añadir, modificar o eliminar datos con php">MYSQL: Mostrar, añadir, modificar o eliminar datos con php</a></li><li><a href="http://blog.nnatali.com/2010/03/22/facebook-crear-una-aplicacion-no-es-tan-complicado/" title="Facebook: Crear una aplicación no es tan complicado">Facebook: Crear una aplicación no es tan complicado</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.nnatali.com/2010/01/21/sql-injection-en-mysql-que-es-y-como-evitarlo/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Sentencias MYSQL: Campos de varias tablas en la misma query</title>
		<link>http://blog.nnatali.com/2010/01/07/sentencias-mysql-campos-de-varias-tablas-en-la-misma-query/</link>
		<comments>http://blog.nnatali.com/2010/01/07/sentencias-mysql-campos-de-varias-tablas-en-la-misma-query/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 16:28:52 +0000</pubDate>
		<dc:creator>nnatali</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[sentencias]]></category>

		<guid isPermaLink="false">http://blog.nnatali.com/?p=3554</guid>
		<description><![CDATA[SELECT DISTINCT tabla1.campo1, tabla2.campo2 as nuevonombre, tabla3.campo3 FROM tabla1, tabla2, tabla3 WHERE tabla1.campo1=tabla3.campo1 ORDER BY tabla2.campo2 Muchas veces necesitamos seleccionar información de diversas tablas para poder trabajar, pero como nos gusta ahorrar código pasamos de hacer varias querys, si podemos utilizar sólo una. En el ejemplo de arriba muestro cómo utilizar un select de distintas [...]]]></description>
			<content:encoded><![CDATA[<pre name="code" class="php:nocontrols">
SELECT DISTINCT tabla1.campo1, tabla2.campo2 as nuevonombre, tabla3.campo3
FROM tabla1, tabla2, tabla3 WHERE tabla1.campo1=tabla3.campo1 ORDER BY
tabla2.campo2
</pre>
<p>Muchas veces necesitamos seleccionar información de diversas tablas para poder trabajar, pero como nos gusta ahorrar código pasamos de hacer varias querys, si podemos utilizar sólo una.</p>
<p>En el ejemplo de arriba muestro cómo utilizar un select de distintas tablas. Cosas a tener en cuenta:</p>
<p>- Siempre tenemos que indicar antes del nombre del campo, el nombre de la tabla en la que se encuentra, separados por un punto. Ejemplo: <strong>tabla1.campo1</strong><br />
- En el <strong>FROM</strong> deberán estar todas las tablas utilizadas.<br />
- Podemos asignar campos que no tengamos seleccionados para mostrar en el <strong>WHERE</strong>.<br />
- También podemos ordenar por campos de diversas tablas.<br />
- <strong>DISTINCT</strong> elimina las filas duplicadas, se puede dar el caso al trabajar con varias tablas.<br />
- Si tenemos nombres de campos iguales en diferentes tablas, podemos <del datetime="2010-06-16T19:20:21+00:00">cambiarles el nombre</del> asignarle un nombre más corto para utilizarlas en nuestra query (no se cambiará en la bbdd) utilizando <strong>as</strong>. Ejemplo: <strong>tabla2.campo2 as nuevonombre</strong></p>
<p><strong>Advierto:</strong> Trabajar con muchas tablas y campos en la misma query puede causar problemas de cordura <img src='http://blog.nnatali.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p><strong>Actualizado 08/01/2009:</strong> Mirar los comentarios! Hay más información útil!</p>
<p align="left"> <a class="tt" href="http://twitter.com/home/?status=Sentencias+MYSQL%3A+Campos+de+varias+tablas+en+la+misma+query+http://m8tq7.th8.us" title="Twittea esto">Twittea esto</a>  <a class="tt" href="http://delicious.com/post?url=http://blog.nnatali.com/2010/01/07/sentencias-mysql-campos-de-varias-tablas-en-la-misma-query/&amp;title=Sentencias+MYSQL%3A+Campos+de+varias+tablas+en+la+misma+query" title="Guardalo en Delicious">Guardalo en Delicious</a>  <a class="tt" href="http://www.facebook.com/share.php?u=http://blog.nnatali.com/2010/01/07/sentencias-mysql-campos-de-varias-tablas-en-la-misma-query/&amp;t=Sentencias+MYSQL%3A+Campos+de+varias+tablas+en+la+misma+query" title="Compartelo en Facebook">Compartelo en Facebook</a></p><h3  class="related_post_title">Articulos relacionados</h3><ul class="related_post"><li><a href="http://blog.nnatali.com/2009/09/09/sentencias-mysql-limit-510/" title="Sentencias MYSQL: LIMIT 5,10">Sentencias MYSQL: LIMIT 5,10</a></li><li><a href="http://blog.nnatali.com/2010/01/21/sql-injection-en-mysql-que-es-y-como-evitarlo/" title="SQL Injection en MySQL ¿Qué es y cómo evitarlo?">SQL Injection en MySQL ¿Qué es y cómo evitarlo?</a></li><li><a href="http://blog.nnatali.com/2009/02/26/mysql-mostrar-anadir-modificar-o-eliminar-datos-con-php/" title="MYSQL: Mostrar, añadir, modificar o eliminar datos con php">MYSQL: Mostrar, añadir, modificar o eliminar datos con php</a></li><li><a href="http://blog.nnatali.com/2010/03/22/facebook-crear-una-aplicacion-no-es-tan-complicado/" title="Facebook: Crear una aplicación no es tan complicado">Facebook: Crear una aplicación no es tan complicado</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.nnatali.com/2010/01/07/sentencias-mysql-campos-de-varias-tablas-en-la-misma-query/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Sentencias MYSQL: LIMIT 5,10</title>
		<link>http://blog.nnatali.com/2009/09/09/sentencias-mysql-limit-510/</link>
		<comments>http://blog.nnatali.com/2009/09/09/sentencias-mysql-limit-510/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 16:37:23 +0000</pubDate>
		<dc:creator>nnatali</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[sentencias]]></category>

		<guid isPermaLink="false">http://blog.nnatali.com/?p=2650</guid>
		<description><![CDATA[SELECT * FROM table LIMIT 5,10 Con la sentencia anterior podemos seleccionar 10 elementos de la tabla &#8220;table&#8221; empezando por el número 6 e ignorando los 5 primeros. Usease que si tenemos 20 elementos habremos seleccionado del 6 al 15. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, [...]]]></description>
			<content:encoded><![CDATA[<pre name="code" class="php">
SELECT * FROM table LIMIT 5,10
</pre>
<p>Con la sentencia anterior podemos seleccionar <strong>10 elementos</strong> de la tabla &#8220;table&#8221; <strong>empezando por el número 6</strong> e ignorando los 5 primeros. Usease que si tenemos 20 elementos habremos seleccionado del 6 al 15.</p>
<p>1, 2, 3, 4, 5, <strong>6</strong>, <strong>7</strong>, <strong>8</strong>, <strong>9</strong>, <strong>10</strong>, <strong>11</strong>, <strong>12</strong>, <strong>13</strong>, <strong>14</strong>, <strong>15</strong>, 16, 17, 18, 19 y 20.</p>
<p>Si añadimos como segundo parámetro de LIMIT un numero suficientemente grande <strong>seleccionará todos los elementos a partir del indicado</strong>, en el ejemplo anterior 6.</p>
<p>Recordad también que si usamos LIMIT con un sólo parámetro, estaremos cogiendo <strong>sólamente los 8 primeros elementos</strong> de nuestra tabla, por ejemplo:</p>
<pre name="code" class="php">
SELECT * FROM table LIMIT 8
</pre>
<p>Queda inaugurada mi nueva categoría <a href="http://blog.nnatali.com/category/mysql/">Sentencias MySQL</a> <img src='http://blog.nnatali.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p align="left"> <a class="tt" href="http://twitter.com/home/?status=Sentencias+MYSQL%3A+LIMIT+5%2C10+http://kxfwc.th8.us" title="Twittea esto">Twittea esto</a>  <a class="tt" href="http://delicious.com/post?url=http://blog.nnatali.com/2009/09/09/sentencias-mysql-limit-510/&amp;title=Sentencias+MYSQL%3A+LIMIT+5%2C10" title="Guardalo en Delicious">Guardalo en Delicious</a>  <a class="tt" href="http://www.facebook.com/share.php?u=http://blog.nnatali.com/2009/09/09/sentencias-mysql-limit-510/&amp;t=Sentencias+MYSQL%3A+LIMIT+5%2C10" title="Compartelo en Facebook">Compartelo en Facebook</a></p><h3  class="related_post_title">Articulos relacionados</h3><ul class="related_post"><li><a href="http://blog.nnatali.com/2010/01/07/sentencias-mysql-campos-de-varias-tablas-en-la-misma-query/" title="Sentencias MYSQL: Campos de varias tablas en la misma query">Sentencias MYSQL: Campos de varias tablas en la misma query</a></li><li><a href="http://blog.nnatali.com/2010/01/21/sql-injection-en-mysql-que-es-y-como-evitarlo/" title="SQL Injection en MySQL ¿Qué es y cómo evitarlo?">SQL Injection en MySQL ¿Qué es y cómo evitarlo?</a></li><li><a href="http://blog.nnatali.com/2009/02/26/mysql-mostrar-anadir-modificar-o-eliminar-datos-con-php/" title="MYSQL: Mostrar, añadir, modificar o eliminar datos con php">MYSQL: Mostrar, añadir, modificar o eliminar datos con php</a></li><li><a href="http://blog.nnatali.com/2010/03/22/facebook-crear-una-aplicacion-no-es-tan-complicado/" title="Facebook: Crear una aplicación no es tan complicado">Facebook: Crear una aplicación no es tan complicado</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.nnatali.com/2009/09/09/sentencias-mysql-limit-510/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
