Google
Web dns.bdat.net

Re: [PHP-ES] Inyecciones SQL

From: Mauricio Angulo S ( angulo.m(EN)interplanet.com.mx)
Date: Wed Jun 30 2004 - 02:07:08 CEST


Esto lo postee en esta lista hace algunos meses, pero creo que vale la
pena ponerlo de nuevo:

>Un amigo de trabajo me envio hoy al mediodia un correo con
>documentacion sobre la inyeccion de código por Cross Site Scripting,
>que aparentemente es una vulnerabilidad generalizada en los servidores
>Web.

>Mas informacion en: http://www.cert.org/advisories/CA-2000-02.html

>La documentacion dice que la forma mas segura de evitarla es
>desactivando la ejecucion de scripts en el cliente, pero eso se ve
>dificil, por lo que escribi el pequeño script en PHP que anexo al
>correo para proteger un poquito mas las paginas contra este ataque.
>Basta con insertarlo antes de las cabeceras de la pagina.

>Lo escribi rapido, por lo que seguramente se puede mejorar mucho. Las
>sugerencias son bienvenidas y ojala les sea de utilidad (ojo con el
>wrapping!).

----------------------------- INICIO ------------------------------
<?php
/* PROTECCION A INYECCION DE CODIGO POR CSS (Cross Site Scripting)
   Por: Mauricio Angulo S.
    angulo.m(EN)interplanet.com.mx
   Tue Mar 16 15:06:32 CST 2004 (EN)921 /Internet Time/
   
   Ver 0.1.2
   
   Informacion sobre vulnerabilidades de CSS:
http://www.cert.org/advisories/CA-2000-02.html
*/
        static $requestString;
        $requestString = strtoupper(implode(",", $_REQUEST));
        // Cargamos los valores que puedan venir por:
        // a) un enlace (GET)
        // b) por una pagina clonada (POST)
        // c) por una Cookie modificada

        // Si hay valores enviados por la pagina anterior
        if(!empty($requestString)){
        // Evaluamos las cadenas buscando etiquetas de codigo malicioso
        // Se pueden agregar a este arreglo aquellas cadenas que puedan
        // ser dañinas a la aplicacion
                $eviltags = array
('<SCRIPT','JAVASCRIPT:','VBSCRIPT','.JS','.VB','<APPLET','<EMBED','<A','<FORM','HIDDEN');
                
                for($i=0;$i<sizeof($eviltags);$i++){
                        if(strstr($requestString, $eviltags[$i])){
                                unset($requestString);
                                die("<script>alert(\"PELIGRO: Se ha intentado inyectar codigo
malicioso en esta pagina.\")</script>");
                        }
                }
        }

        // No se enviaron valores de la pagina anterior o
        // los valores enviados estan limpios de codigo inyectado
        unset($requestString);
        return $TRUE;
?>
------------------------------- FIN -------------------------------

TO DO: * Validar el metodo de envio de datos (GET/POST/Cookie/Session)
        * Modularizarlo y encapsularlo en una clase
        * Separar la libreria de palabras a un archivo externo o RDBM
        * Enviar mensajes de alerta un log
        * Insertar validacion con expresiones regulares

Cosa de tiempo, pero hasta ahora ha funcionado relativamente bien.
Avisenme si les funciona o no. Se aceptan sugerencias!

-- 
---------------------------
Mauricio Angulo S.
Desarrollador Web
Interplanet, S.A. de C.V.
t: 56.82.50.60
www.SuEmpresa.com
---------------------------
On Tue, 2004-06-29 at 18:28, Amador Cubino [Necostek.com] wrote:
> Estimados listeros,
> 
>   Hace algo de tiempo estoy obsesionado en la seguridad, dado que si
>   que mis proyectos anteriores tenían grandes fallos por los cuales un
>   atacante remoto podría modificar cosas de otros usuarios o
>   simplemente borrar la base de datos.
>   Eso si, si era habilidoso o tenia suerte.
> 
>   Pues bien, ahora estoy centrándome en las inyecciones sql que creo
>   que es lo único que me queda por resolver pero no tengo ni idea de
>   como hacer un código que verifique si la variable es maligna.
> 
>   Si lo que voy a comprobar es un campo por ejemplo $usuario pues miro
>   que no tenga espacios, ni ' ni ".
> 
>   Pero el caso es que tengo una casilla para que los usuarios
>   introduzcan código HTML, por lo cual no se como hacer para verificar
>   si el código HTML puede ser maligno, porque este puede tener
>   infinidad de caracteres.
> 
>   He buscado algo de documentación en google en español e ingles por
>   sql injections php y inyecciones sql php y la verdad que he
>   encontrado algún ejemplo de como hacerlas, pero ninguno de como
>   solventarlas.
> 
>   También agradezco a la gente que me aconsejo en mi anterior pregunta
>   a leer el load desde un fichero de texto ya hace sufrir menos el
>   procesador. He de agradecer vuestra opinión y lo cambiare nada mas
>   tenga tiempo porque mi principal objetivo era ahorrar CPU.
> 
> 
> Un cordial Saludo,
> 
> D. Amador Cubino
> Presidente de Necostek.com
> 
> www.HispaInternet.com
> www.Hispadominio.net            
-- 
PHP Spanish Localization Talk Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


This archive was generated by hypermail 2.1.7 : Tue Sep 21 2004 - 21:34:42 CEST