Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Azielito en 8 Mayo 2007, 19:34 pm



Título: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: Azielito 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"


Título: Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: Alex_bro 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...


Título: Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: Azielito 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 ;)


Título: Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: Alex_bro 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.


Título: Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: Azielito 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


Título: Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: Alex_bro 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...


Título: Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: Azielito 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 =\


Título: Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: z0t0 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.


Título: Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: Azielito 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


Título: Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: WHK 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.


Título: Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: yeikos en 5 Septiembre 2007, 05:09 am
¿Programación segura con PHP? La solución no es filtrar todas las variables, la solución es saber como tratar las variables, por ejemplo...

Con tú código, yo no podría publicar una noticia y citarla con comillas simples, ni tampoco podría hacer una pequeña aclaración con punto y coma.

¿Dónde está el fallo? Pues en que vais más allá y os pasáis con la "seguridad", limitando vuestras aplicaciones y haciéndolas cada vez menos funcionales...


Título: Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: Azielito en 5 Septiembre 2007, 16:49 pm
cuando programas una aplicacion ya tienes en cuenta hacia que tipo de gente va dirigida, por eso es opcional quitar/poner caracteres

como dices, en algunaso casos debes poner punto y coma, comillas y estos caracteres los tratas y punto.



Título: Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: WHK en 6 Septiembre 2007, 08:23 am
Que pasaría en caso de una autoinyección como le pasa al buscador de yahoo? filtraría bién la busqueda pero al aparecer lso resultados con XSS se me van a ejecutar... que pasa si mi variable vulnerable está dentro de una variable en script? me bastaría con escribir el signo mas (+) y eso no lo puedes filtrar porque te harías un desmadre con las peticiones que si son verdaderas... Yo creo que para la defensa de un XSS lo mas seguro es aprender como funciona tu página... el que la construyó deve saber que partes son filtradas y cuales no y de que manera, softwares como phpids son exelentes pero igual Debes configurarlo según sean tus necesidades... el mod security también es una muy buena opción pero también va a depender de lo que necesites como el brujo ha hecho sus rpopias modificaciones según la necesidad del foro.... tener un servidor y mantener una web no es pagarle a alguien para que te monte todo y se vaya... o tampoco es crear algo y dejarlo ahi por años sin tocar nada... es una responsabilidad constante donde tu sabes todo o que pasa en tu web código por código y Debes saber aplicar una solución al instante si es encontrado alguna falla. Google por mas filtros que le puso a sus buscadores igual fue vulnerado y tuvieron que repararlo... igual que phpids ... cada ves aparecian algunos xss que iban siendo reparados en el mismo instante... yo cada dis busco nuevas formas de encontrar vulnerabilidades en mi propia web para poder repararlas al instante según sea mi necesidad.


Título: Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: H4RR13R en 25 Junio 2008, 18:50 pm
pero al cuestion es... que es lo que causa los ataques sql injection? o lo que no debemos tener en un codigo para que sea vulnerable a él? perdon por revivir el post pero esque no se encuentra informacion por ahi ^^


un saludo y gracias!!


Título: Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: Azielito en 25 Junio 2008, 19:34 pm
Lo que causa inyecciones SQL es que no limías tus variables y entonces, cuando mandas codigo SQL en estas lo ejecuta como si se tratase del codigo de la aplicacion :D


Pero para una mejor explicacion de por que pasan las cosas le dejamos la palabra al maestro sirdarkcat
http://foro.elhacker.net/tutoriales_documentacion/tutorial_de_inyeccion_sql_sql_injection-t98448.0.html
y como no, tambien al maestro Ertai
http://foro.elhacker.net/bugs_y_exploits/sql_injection_para_principiantes_ejemplos_en_aplicaciones_reales-t142203.0.html

Que por cierto creo que tambien esta en desacuero con este post mio xDDDD


Título: Re: Programacion Segura con PHP [Olvidate de limpiar tus variables]
Publicado por: Mamsaac en 30 Junio 2008, 09:25 am
Puedes aceptar cualquier entrada (hasta donde tengo entendido) si pasas el texto por htmlentities (eso es para los foros). Eso arruinaría cualquier intento de que te metan un tag de <script> y demás... Ahora, que si vas a permitir html por el usuario la cosa se torna más complicada. En mi opinión, lo mejor es limitarse a que el usuario use BBCode.