Uno de los peligros de implementar formularios en nuestros proyectos, formularios que pueda rellenar el público, como comentarios o mensajes de correo, es que se presta fácilmente a la inyección de código en función de su labor. Por ejemplo, si tenemos un formulario para añadir un comentario y cuando lo mostramos lo ejecutamos directamente puede incluir código de javascript o php que robe información o estropee nuestro server.\r\nLos siguientes códigos nos permiten limitar este peligro limpiando la variable post, añadiendo barras de literal cuando sea necesario.
Este tipo de ataque se denomina Cross-site scripting o de manera abreviada XSS:
1.script
2.object
3.iframe
4.applet
5.window
6.document
7.cookie
8.meta
9.style
10.alert
11.form
12.php
13.img
Con la función hacker defense podrás evadir todo tipo de ataque XSS y la puedes implementar en tu formulario con el siguiente código:
Código Ejemplo:
La Función Security, te protege de inyecciones todo código, cadena y string que se intente inyectar. La puedes implementar con el siguiente código:
Código Ejemplo:
Está función es simple pero muy efectiva, utilizala con el siguiente código:
Código Ejemplo:
Dada una variable, la protege de código HTML malicioso como ' etc...
Código Ejemplo: Con esas funciones puedes implementar un Formulario seguro y totalmente libre de Ataques XSS, espero les pueda servir cada código, pueden publicar más códigos en los comentarios de este mismo artículo, seguiré añadiendo más info y funciones a medida del tiempo.
Evidentemente para aquellos que ya leyeron el artículo seguramente ya se dieron cuenta que tuve la necesidad de editar el artículo y las funciones mostradas, también me tome la molestia de añadirle cada ejemplo de cómo utilizar cada función ya que me llegaron varios emails solicitando más documentación y ejemplos de cómo utilizar cada función, en realidad pensé que por ser un artículo tan simple no era necesario explicar demasiado pero ya veo que otras personas tienen un bajo nivel de conocimiento y bueno muchas gracias también a los que me enviaron funciones serán mostradas en este artículo. Saludos, Carluís Pérez.
Este tipo de ataque se denomina Cross-site scripting o de manera abreviada XSS:
XSS, del inglés Cross-site scripting es un tipo de inseguridad informática o agujero de seguridad basado en la explotación de vulnerabilidades del sistema de validación de HTML incrustado.Las funciones que voy a exponer en este artículo a continuación pueden proteger tu formulario de cualquier ataque dirigido con las siguientes etiquetas, Tags, Cadenas:
Función 1
Código:$_POST = (get_magic_quotes_gpc() ? array_map('stripslashes', $_POST) : $_POST);
Función 2
Código:function hackerDefense(){ // begin hacker defense foreach ($_POST as $secvalue) { if ((eregi(“]*script.*\”?[^>]*>”, $secvalue)) || (eregi(“]*object.*\”?[^>]*>”, $secvalue)) || (eregi(“]*iframe.*\”?[^>]*>”, $secvalue)) || (eregi(“]*applet.*\”?[^>]*>”, $secvalue)) || (eregi(“]*window.*\”?[^>]*>”, $secvalue)) || (eregi(“]*document.*\”?[^>]*>”, $secvalue)) || (eregi(“]*cookie.*\”?[^>]*>”, $secvalue)) || (eregi(“]*meta.*\”?[^>]*>”, $secvalue)) || (eregi(“]*style.*\”?[^>]*>”, $secvalue)) || (eregi(“]*alert.*\”?[^>]*>”, $secvalue)) || (eregi(“]*form.*\”?[^>]*>”, $secvalue)) || (eregi(“]*php.*\”?[^>]*>”, $secvalue)) || (eregi(“]*]*>”, $secvalue)) || (eregi(“]*img.*\”?[^>]*>”, $secvalue))) { header(‘location:’.$site.’index.php’); die (); }¿Cómo Utilizar?
Con la función hacker defense podrás evadir todo tipo de ataque XSS y la puedes implementar en tu formulario con el siguiente código:
Código Ejemplo:
Función 3
Código:function Security($_Cadena) { $_Cadena = htmlspecialchars(trim(addslashes(stripslashes(strip_tags($_Cadena))))); $_Cadena = str_replace(chr(160),'',$_Cadena); return mysql_real_escape_string($_Cadena); }¿Cómo Utilizar?
La Función Security, te protege de inyecciones todo código, cadena y string que se intente inyectar. La puedes implementar con el siguiente código:
Código Ejemplo:
Función 4
Código:function limpiar_tags($tags){ $tags = strip_tags($tags); $tags = stripslashes($tags); $tags = htmlentities($tags); return $tags; } limpiar_tags($variable);¿Cómo Utilizar?
Está función es simple pero muy efectiva, utilizala con el siguiente código:
Código Ejemplo:
Función 5
Código/** * Removes all XSS attacks that came in the input. * * Function taken from: * * http://yocarluis.wordpress.com * * @param mixed $val The Value to filter * @return mixed */ function filterXSS($val) { // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed // this prevents some character re-spacing such as// note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs $val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $val); // straight replacements, the user should never need these since they're normal characters // this prevents like $search = 'abcdefghijklmnopqrstuvwxyz'; $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $search .= '1234567890!@#$%^&*()'; $search .= '~`";:?+/={}[]-_|\'\\'; for ($i = 0; $i < strlen($search); $i++) { // ;? matches the ;, which is optional // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars // @ @ search for the hex values $val = preg_replace('/([x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ; // @ @ 0{0,7} matches '0' zero to seven times $val = preg_replace('/({0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ; } // now the only remaining whitespace attacks are \t, \n, and \r $ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base'); $ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload'); $ra = array_merge($ra1, $ra2); $found = true; // keep replacing as long as the previous round replaced something while ($found == true) { $val_before = $val; for ($i = 0; $i < sizeof($ra); $i++) { $pattern = '/'; for ($j = 0; $j < strlen($ra[$i]); $j++) { if ($j > 0) { $pattern .= '('; $pattern .= '([x|X]0{0,8}([9][a][b]);?)?'; $pattern .= '|({0,8}([9][10][13]);?)?'; $pattern .= ')?'; } $pattern .= $ra[$i][$j]; } $pattern .= '/i'; $replacement = substr($ra[$i], 0, 2).' '.substr($ra[$i], 2); // add in <> to nerf the tag $val = preg_replace($pattern, $replacement, $val); // filter out the hex tags if ($val_before == $val) { // no replacements were made, so exit the loop $found = false; } } } return $val; }
Función 6
Código ¿Cómo Utilizar?Dada una variable, la protege de código HTML malicioso como ' etc...
Código Ejemplo: Con esas funciones puedes implementar un Formulario seguro y totalmente libre de Ataques XSS, espero les pueda servir cada código, pueden publicar más códigos en los comentarios de este mismo artículo, seguiré añadiendo más info y funciones a medida del tiempo.
Evidentemente para aquellos que ya leyeron el artículo seguramente ya se dieron cuenta que tuve la necesidad de editar el artículo y las funciones mostradas, también me tome la molestia de añadirle cada ejemplo de cómo utilizar cada función ya que me llegaron varios emails solicitando más documentación y ejemplos de cómo utilizar cada función, en realidad pensé que por ser un artículo tan simple no era necesario explicar demasiado pero ya veo que otras personas tienen un bajo nivel de conocimiento y bueno muchas gracias también a los que me enviaron funciones serán mostradas en este artículo. Saludos, Carluís Pérez.