elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Programacion Segura con PHP [Olvidate de limpiar tus variables]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Programacion Segura con PHP [Olvidate de limpiar tus variables]  (Leído 17,595 veces)
Azielito
no es
Colaborador
***
Desconectado Desconectado

Mensajes: 9.188


>.<


Ver Perfil WWW
Programacion Segura con PHP [Olvidate de limpiar tus variables]
« en: 8 Mayo 2007, 19:34 pm »

Pues eso, referente a este post
Recorriendo el array $_POST y regresandolo a variables
http://foro.elhacker.net/index.php/topic,164157.0.html

Se hizo una funcion para olvidarnos de estar limpiando cada vez nuestras variables :D

Como todos sabemos podemos poner el archivo de conexion a la base de datos en un archivo, y, entonces mandamos a llamarlo y listo :D
Ahora bien, que pasa si antes de hacer la conexion limpiamos todas las variables que pasan por GET o POST (o por cookie)? asi tendremos siempre limpias nuestras variables y evitamos ataques XSS y SQLi :D

El archivo final es este
Código
  1. <?php
  2. # Funcion para limpiar caracte-
  3. # res que pudieran comprometer
  4. # al servidor y/o al usuario
  5. function limpia($var){
  6. $var = strip_tags($var);
  7. $malo = array("\\",";","\'","'"); // Aqui poner caracteres no permitidos
  8. $i=0;$o=count($malo);
  9. while($i<=$o){
  10. $var = str_replace($malo[$i],"",$var);
  11. $i++;
  12. }
  13. return $var;
  14. }
  15.  
  16. # Funcion que aplica la funcion anterior
  17. # para no tener que preocuparnos por
  18. # ataques de XSS o SQLi
  19. function LimpiarTodo($datos){
  20. if(is_array($datos)){
  21. $datos = array_map('limpia',$datos);
  22. }else{
  23. die("<font color=#ff0000><b>Error:</b></font> La funcion <b>LimpiarTodo</b> debe contener un arreglo.");
  24. }
  25. return $datos;
  26. }
  27. if($_POST){
  28. $_POST =& LimpiarTodo($_POST);
  29. }
  30. if($_GET){
  31. $_GET =& LimpiarTodo($_GET);
  32. }
  33.  
  34. # FileName="Connection_php_mysql.htm"
  35. # Type="MYSQL"
  36. # HTTP="true"
  37. $hostname_DB = "localhost"; // El host del MySQL
  38. $database_DB = "DataBase";  // Nombre de la base de datos
  39. $username_DB = "usuar10";   // Usuario con l que te conectas
  40. $password_DB = "th3pas5sz"; // Contraseña ñ_ñ
  41. $serpub = mysql_connect($hostname_DB, $username_DB, $password_DB) or trigger_error(mysql_error(),E_USER_ERROR);
  42. mysql_select_db($database_DB);
  43. ?>

Ahora solo nos queda insertar ese archivo cuando hacemos alguna operacion en MySQL y listo! nos olvidamos de limpiar las variables una a una para evitar los ataques antes mencionados :D



Para evitar ataques de RFI entonces en esta linea
Código:
$malo = array("\\",";","\'","'"); // Aqui poner caracteres no permitidos
agregamos los dos puntos ( ":" ) y la diagonal ( "/" ) si sabemos que nunca se usaran estos caracteres en los campos de nuestra base de datos
Quedaria asi
Código:
$malo = array("\\",";","\'","'",":","/"); // Aqui poner caracteres no permitidos
y quedamos seguros evitando que nos metan los "caracteres malditos"


« Última modificación: 5 Septiembre 2007, 16:50 pm por Azielito » En línea

Alex_bro


Desconectado Desconectado

Mensajes: 1.246



Ver Perfil
Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
« Respuesta #1 en: 2 Septiembre 2007, 22:26 pm »

Muy util el script  ;D.
Yo lo estoy usando, pero me salio el siguiente error:
Citar
Notice: Undefined offset: 6 in...

A que se debe?  :-\ Uso register_globals off por si tiene algo que ver, aunque creo que no.

Por cierto... encontre un script para la misma funcion, que aniade los AND, OR, comas, parentesis... es necesario o no como el de arriba?
Pongo el que digo aqui: (perdonen la fuente... no la tengo)
Código:
<?
function antiinjection($str) {
        $banchars = array ("'", ",", ";", "--", ")", "(","\n","\r");
        $banwords = array (" or "," OR "," Or "," oR "," and ", " AND "," aNd "," aND "," AnD ");
        if ( eregi ( "[a-zA-Z0-9]+", $str ) ) {
                $str = str_replace ( $banchars, '', ( $str ) );
                $str = str_replace ( $banwords, '', ( $str ) );
        } else {
                $str = NULL;
        }
        $str = trim($str);
        $str = strip_tags($str);
        $str = stripslashes($str);
        $str = addslashes($str);
        $str = htmlspecialchars($str);
        return $str;
}
?>
Recuerdo que el autor del script decia que primero quitaba los caracteres especiales y despues los AND y OR para evitar cosas como ;OR; en el que solo se borrarian los ;

Saludos y gracias.
PD: perdonen por revivir un tema con unos meses...


En línea

Azielito
no es
Colaborador
***
Desconectado Desconectado

Mensajes: 9.188


>.<


Ver Perfil WWW
Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
« Respuesta #2 en: 3 Septiembre 2007, 18:57 pm »

tal vez no esta pasando la variable "i", podrias modificar la funcion para que, en lugar de un while lo haga por foreach...
tambien para "depurar" mandar a imprimir esta variable (I)

el problema seria cuando estas en un sistema que se envia informacion en ingles >.<...
limpiando las comillas simples, los guines dobles y esas cosas creo que no deberias preocuparte ;)
En línea

Alex_bro


Desconectado Desconectado

Mensajes: 1.246



Ver Perfil
Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
« Respuesta #3 en: 4 Septiembre 2007, 00:56 am »

Muchas gracias.
Quisiera preguntarles una ultima cosa, si admito solo letras (a-z), numeros (0-9) y los caracteres [] y /, habria algun riesgo de ataque por alguna tecnica? la idea seria aceptar solo texto y bbcode, ya que no necesito ningun otro caracter para campos como noticias, comentarios, usuario... (por cierto, para la ñ como la pongo en expresion regular, como ñ o con algun codigo). Se que // podria ser un fallo de seguridad, cuando digo / es una sola.

Como estoy programando mi web no es propensa a RFI, pero me quedo mas tranquilo con una segunda opinion sobre aceptar la barra / sin nada mas.

Saludos.
En línea

Azielito
no es
Colaborador
***
Desconectado Desconectado

Mensajes: 9.188


>.<


Ver Perfil WWW
Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
« Respuesta #4 en: 4 Septiembre 2007, 01:03 am »

si aceptas solo a-zAZ y 0-9 no tendras ningun problema sobre la seguridad =) o sea, podria haber problemillas si dejas "#",',--,<,>,&
[...] y esas cosas
pero solo con letras y numeros no hay problema
En línea

Alex_bro


Desconectado Desconectado

Mensajes: 1.246



Ver Perfil
Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
« Respuesta #5 en: 4 Septiembre 2007, 01:08 am »

Ya si por las letras y numeros no lo decia, lo decia por la barra / , ya que por los corchetes tampoco creo que hubiera problemas...

Saludos.
PD: Como hacen los CMS, foros... para no tener estos problemas? tienen que aceptar todo tipo de caracteres...
« Última modificación: 4 Septiembre 2007, 01:11 am por Roberto T. » En línea

Azielito
no es
Colaborador
***
Desconectado Desconectado

Mensajes: 9.188


>.<


Ver Perfil WWW
Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
« Respuesta #6 en: 4 Septiembre 2007, 01:20 am »

generalmente los manejadores de contenido tiene problemas si dejan poner html >.<

Tambien (este yo lo implemente) podrias poner un editor RTF para que no te deje entrar codigo asi por el usuario

aun que si interceptas antes el paquete de datos HTTP entonces lo modificas y envias cualquier cosa =\
En línea

z0t0


Desconectado Desconectado

Mensajes: 497


Ver Perfil WWW
Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
« Respuesta #7 en: 4 Septiembre 2007, 01:24 am »

Buenas, una pregunta ya que no permites los caracteres como ";" que pasaria si utilizas url encode? .

ej: <script>alert('elhacker.net');</script> por: %3Cscript%3Ealert('elhacker.net')%3B%3C%2Fscript%3E

seria vulnerable a eso?

Un Saludo.
En línea

Cansado de que la gente invente, cuente y luego reinvente.
Azielito
no es
Colaborador
***
Desconectado Desconectado

Mensajes: 9.188


>.<


Ver Perfil WWW
Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
« Respuesta #8 en: 4 Septiembre 2007, 01:25 am »

si, serias vulnerable =)

por eso se recomienda no permitir el "%" ni el "&" ni el "#"
asi son menos las posibilidades de tener un bug de XSS
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
« Respuesta #9 en: 5 Septiembre 2007, 05:00 am »

Poqué no subes ese código fuente a un servidor sin seguridad en mod_security ni htaccess? asi probamos online su seguridad.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
aMetro, olvídate de volver a equivocarte de metro
Noticias
wolfbcn 0 1,528 Último mensaje 17 Marzo 2011, 19:40 pm
por wolfbcn
Limpiar Variables de Formularios con PHP « 1 2 »
Desarrollo Web
FFFenix 15 10,372 Último mensaje 18 Agosto 2011, 22:35 pm
por Shell Root
¿Vives en un municipio pequeño? Olvídate de la fibra
Noticias
wolfbcn 0 1,090 Último mensaje 9 Enero 2015, 18:44 pm
por wolfbcn
¿Billetes AVE a 25 euros? Olvídate, la web de Renfe es un caos
Noticias
wolfbcn 0 1,562 Último mensaje 25 Abril 2017, 13:54 pm
por wolfbcn
Programación segura
Programación General
DamnSystem 0 1,849 Último mensaje 5 Noviembre 2017, 23:30 pm
por DamnSystem
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines