Evitar inyección de código en formularios en php

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:

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:
  • 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
  • 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.

    ¿Qué te pareció?

    Loading...
    Nombre

    Adblock Adobe Flash AJAX Algoritmos Anuncios API Blogger Blogging Buscadores chrome web store Código Fuente CSS CSS 3 CV Dart Depurar Desarrollo Web Diseño Diseño Grafico Diseño Web Documentación Efectos Facebook Firefox Foros Fotografias Frances Bean Cobain Gadgets General Geolocalizar Google Google Analytics Google Chrome Google Imágenes Google Music Google Reader Google+ Herramientas Hotmail HTML HTML5 Imágenes Información Informática Instagram Internet Internet Explorer Internet Explorer 10 Javascript jQuery Kurt Cobain Librerías Marketing Microsoft Monetización Web Mozilla Firefox 8 MySQL Navegadores Noticias Optimización Web PageSpeed Insights PayPal Personal Photoshop PHP Plantillas Programación Programas Programas Web Proyectos Redes Sociales ScreensHots Scripts Seguridad SEO Servicios Web Sesiones Snippets SoniTube Spam Steve Jobs Templates Themes Thumbalizr Tips Trucos Tutoriales Twitter Utilidades Vectores Virus Web Widgets Windows 7 Windows 8 Windows Mobile Windows XP WordPress XSS Youtube
    false
    ltr
    item
    OnSoni: Evitar inyección de código en formularios en php
    Evitar inyección de código en formularios en php
    http://3.bp.blogspot.com/-pBTtK4NbKww/Tmp434YVpBI/AAAAAAAAAFM/OXf2zlb9_lI/s400/xss.jpg
    http://3.bp.blogspot.com/-pBTtK4NbKww/Tmp434YVpBI/AAAAAAAAAFM/OXf2zlb9_lI/s72-c/xss.jpg
    OnSoni
    http://www.onsoni.com/2011/09/evitar-inyeccion-de-codigo-en.html
    http://www.onsoni.com/
    http://www.onsoni.com/
    http://www.onsoni.com/2011/09/evitar-inyeccion-de-codigo-en.html
    true
    8818836675902573334
    UTF-8
    Not found any posts Not found any related posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU Etiqueta ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Contents Ver también Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS CONTENT IS PREMIUM Please share to unlock Copiar todo el codigo Seleccionar todo el Código Todo el código se ha copiado en el portapapeles Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy