<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comentarios en: Evitar que usen nuestros formularios para Spam</title>
	<atom:link href="http://www.ingeniuz.com/2006/11/12/evitar-que-usen-nuestros-formularios-para-spam/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ingeniuz.com/2006/11/12/evitar-que-usen-nuestros-formularios-para-spam/</link>
	<description>Blog personal de Manuel Cebrián</description>
	<lastBuildDate>Thu, 12 Jan 2012 10:41:45 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>Por: manuel</title>
		<link>http://www.ingeniuz.com/2006/11/12/evitar-que-usen-nuestros-formularios-para-spam/comment-page-1/#comment-4077</link>
		<dc:creator>manuel</dc:creator>
		<pubDate>Fri, 11 Jan 2008 14:46:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.ingeniuz.com/2006/11/12/evitar-que-usen-nuestros-formularios-para-spam/#comment-4077</guid>
		<description>Hola jonaytom,

me parece que la solución que propones es demasiado restrictiva.
Realmente lo único que necesita ser filtrado son las cabeceras del mensaje. Todo depende del caso.

Se puede arreglar con un simple: 

$from = strtr($_POST[&#039;from&#039;],&quot;\r\n\t&quot;,&#039;???&#039;);

para filtrar los campos que irán en la cabecera (from, to, subject, reply-to, etc.).

Recomiendo el uso de la clase Zend_Mail que trae el &lt;a href=&quot;http://framework.zend.com&quot; rel=&quot;nofollow&quot;&gt;Zend Framework&lt;/a&gt;, que ya trae de serie mecanismos para evitar este tipo de ataques.</description>
		<content:encoded><![CDATA[<p>Hola jonaytom,</p>
<p>me parece que la solución que propones es demasiado restrictiva.<br />
Realmente lo único que necesita ser filtrado son las cabeceras del mensaje. Todo depende del caso.</p>
<p>Se puede arreglar con un simple: </p>
<p>$from = strtr($_POST['from'],&#8221;\r\n\t&#8221;,&#8217;???&#8217;);</p>
<p>para filtrar los campos que irán en la cabecera (from, to, subject, reply-to, etc.).</p>
<p>Recomiendo el uso de la clase Zend_Mail que trae el <a href="http://framework.zend.com" rel="nofollow">Zend Framework</a>, que ya trae de serie mecanismos para evitar este tipo de ataques.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: jonaytom</title>
		<link>http://www.ingeniuz.com/2006/11/12/evitar-que-usen-nuestros-formularios-para-spam/comment-page-1/#comment-4076</link>
		<dc:creator>jonaytom</dc:creator>
		<pubDate>Fri, 11 Jan 2008 14:40:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.ingeniuz.com/2006/11/12/evitar-que-usen-nuestros-formularios-para-spam/#comment-4076</guid>
		<description>Aparte de la validación javascript antes de enviar el formulario, Para evitar que los hackers inserten código no deseado hagan sql o email injection también es recomendable hacer una validacion en el lado del servidor. Recomiendo usar una función como esta:

&lt;?php
function ValidarDatos($campo){
//Array con las posibles cadenas a utilizar por un hacker
$CadenasProhibidas = array(&quot;Content-Type:&quot;,
&quot;MIME-Version:&quot;, //evita email injection
&quot;Content-Transfer-Encoding:&quot;,
&quot;Return-path:&quot;,
&quot;Subject:&quot;,
&quot;From:&quot;,
&quot;Envelope-to:&quot;,
&quot;To:&quot;,
&quot;bcc:&quot;,
&quot;cc:&quot;,
&quot;UNION&quot;, // evita sql injection
&quot;DELETE&quot;,
&quot;DROP&quot;,
&quot;SELECT&quot;,
&quot;INSERT&quot;,
&quot;UPDATE&quot;,
&quot;CRERATE&quot;,
&quot;TRUNCATE&quot;,
&quot;ALTER&quot;,
&quot;INTO&quot;,
&quot;DISTINCT&quot;,
&quot;GROUP BY&quot;,
&quot;WHERE&quot;,
&quot;RENAME&quot;,
&quot;DEFINE&quot;,
&quot;UNDEFINE&quot;,
&quot;PROMPT&quot;,
&quot;ACCEPT&quot;,
&quot;VIEW&quot;,
&quot;COUNT&quot;,
&quot;HAVING&quot;,
&quot;&#039;&quot;,
&#039;&quot;&#039;,
&quot;{&quot;,
&quot;}&quot;,
&quot;[&quot;,
&quot;]&quot;,
&quot;HOTMAIL&quot;, // evita introducir direcciones web
&quot;WWW&quot;,
&quot;.COM&quot;,
&quot;@&quot;,
&quot;W W W&quot;,
&quot;. c o m&quot;,
&quot;http://&quot;,
&quot;$&quot;, //variables y comodines
&quot;&amp;&quot;,
&quot;*&quot;
); 
//Comprobamos que entre los datos no se encuentre alguna de 
//las cadenas del array. Si se encuentra alguna cadena se 
//dirige a una página de Forbidden 

foreach($CadenasProhibidas as $valor){ 
if(strpos(strtolower($campo), strtolower($valor)) !== false){ 
echo(&quot;
alert(&#039;No puede introducir direcciones web, comillas, corchetes, código de programación o cualquier dato no relativo a los campos del formulario&#039;);
history.back();&quot;);
exit; 
} 
} 
} 

//Asignamos la variable POST y llamada a la función Validardatos($texto)
$texto= $_POST[&quot;texto&quot;];
ValidarDatos($texto);
?&gt;</description>
		<content:encoded><![CDATA[<p>Aparte de la validación javascript antes de enviar el formulario, Para evitar que los hackers inserten código no deseado hagan sql o email injection también es recomendable hacer una validacion en el lado del servidor. Recomiendo usar una función como esta:</p>
<p>&lt;?php<br />
function ValidarDatos($campo){<br />
//Array con las posibles cadenas a utilizar por un hacker<br />
$CadenasProhibidas = array(&#8220;Content-Type:&#8221;,<br />
&#8220;MIME-Version:&#8221;, //evita email injection<br />
&#8220;Content-Transfer-Encoding:&#8221;,<br />
&#8220;Return-path:&#8221;,<br />
&#8220;Subject:&#8221;,<br />
&#8220;From:&#8221;,<br />
&#8220;Envelope-to:&#8221;,<br />
&#8220;To:&#8221;,<br />
&#8220;bcc:&#8221;,<br />
&#8220;cc:&#8221;,<br />
&#8220;UNION&#8221;, // evita sql injection<br />
&#8220;DELETE&#8221;,<br />
&#8220;DROP&#8221;,<br />
&#8220;SELECT&#8221;,<br />
&#8220;INSERT&#8221;,<br />
&#8220;UPDATE&#8221;,<br />
&#8220;CRERATE&#8221;,<br />
&#8220;TRUNCATE&#8221;,<br />
&#8220;ALTER&#8221;,<br />
&#8220;INTO&#8221;,<br />
&#8220;DISTINCT&#8221;,<br />
&#8220;GROUP BY&#8221;,<br />
&#8220;WHERE&#8221;,<br />
&#8220;RENAME&#8221;,<br />
&#8220;DEFINE&#8221;,<br />
&#8220;UNDEFINE&#8221;,<br />
&#8220;PROMPT&#8221;,<br />
&#8220;ACCEPT&#8221;,<br />
&#8220;VIEW&#8221;,<br />
&#8220;COUNT&#8221;,<br />
&#8220;HAVING&#8221;,<br />
&#8220;&#8216;&#8221;,<br />
&#8216;&#8221;&#8216;,<br />
&#8220;{&#8220;,<br />
&#8220;}&#8221;,<br />
&#8220;[",<br />
"]&#8220;,<br />
&#8220;HOTMAIL&#8221;, // evita introducir direcciones web<br />
&#8220;WWW&#8221;,<br />
&#8220;.COM&#8221;,<br />
&#8220;@&#8221;,<br />
&#8220;W W W&#8221;,<br />
&#8220;. c o m&#8221;,<br />
&#8220;http://&#8221;,<br />
&#8220;$&#8221;, //variables y comodines<br />
&#8220;&amp;&#8221;,<br />
&#8220;*&#8221;<br />
);<br />
//Comprobamos que entre los datos no se encuentre alguna de<br />
//las cadenas del array. Si se encuentra alguna cadena se<br />
//dirige a una página de Forbidden </p>
<p>foreach($CadenasProhibidas as $valor){<br />
if(strpos(strtolower($campo), strtolower($valor)) !== false){<br />
echo(&#8221;<br />
alert(&#8216;No puede introducir direcciones web, comillas, corchetes, código de programación o cualquier dato no relativo a los campos del formulario&#8217;);<br />
history.back();&#8221;);<br />
exit;<br />
}<br />
}<br />
} </p>
<p>//Asignamos la variable POST y llamada a la función Validardatos($texto)<br />
$texto= $_POST["texto"];<br />
ValidarDatos($texto);<br />
?&gt;</p>
]]></content:encoded>
	</item>
</channel>
</rss>

