Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Clase seguridad en formularios

Estas en el tema de Clase seguridad en formularios en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas. A raíz de problemas de spam en un formulario, encontré por la red algunas soluciones, y ya que estoy intentando aprender a crear clases, ...
  #1 (permalink)  
Antiguo 22/10/2007, 17:57
Avatar de franquero  
Fecha de Ingreso: julio-2005
Mensajes: 179
Antigüedad: 18 años, 9 meses
Puntos: 1
Clase seguridad en formularios

Buenas.

A raíz de problemas de spam en un formulario, encontré por la red algunas soluciones, y ya que estoy intentando aprender a crear clases, creé ésta para aplicarla a mis formularios:

Código PHP:
<?php
class seguridad {
    
    var 
$ataques = array();
    
    
/* metodos */
    
function sec_saltos($nombre,$valor)  {
        
$valor urldecode($valor);
        if (
eregi("\r",$valor) || eregi("\n",$valor)){
            
$this->ataques[] = "Posible email injection en campo $nombre";
        }
    }
    
    function 
sec_cadenas($campo) {
        
//agregamos todas las cadenas maliciosas
        
$array_no_permitir[0]="Content-Type";
        
$array_no_permitir[1]="Content-Transfer-Encoding";
        
$array_no_permitir[2]="text/html";
        
$array_no_permitir[3]="MIME-Version:";
        
$array_no_permitir[4]="Return-path:";
                
$array_no_permitir[5]="Subject:";
        
$array_no_permitir[6]="From:";
                
$array_no_permitir[7]="Envelope-to:";
        
$array_no_permitir[8]="To:";
                
$array_no_permitir[9]="bcc:";
        
$array_no_permitir[10]="cc:";
        
$array_no_permitir[11]="Body:";
        
$array_no_permitir[12]="url";
        
$array_no_permitir[13]="[url]:";
        
            
//Comprobamos que ninguna de estas cadenas esté en la variable $_POST
            
$total=count($array_no_permitir);
                for(
$i=0;$i<$total;$i++){
                    if (
eregi($array_no_permitir[$i],$_POST[$campo])) {
                            
$this->ataques[] = "El campo $campo no puede contener: " $array_no_permitir[$i];
                    }
                }
    }
    
    function 
escaneo() {
        return 
$this->ataques;
    }
}
?>
¿Qué grado de seguridad le pondríais de 0 a 10?
¿Existe alguna clase ya creada para este fin?

(También he leído sobre Captcha y sql injection)

Muchas gracias por las respuestas
__________________
Es una suerte que la sociedad libre sea más productiva, porque de no haberlo sido jamás se habría tolerado.
  #2 (permalink)  
Antiguo 23/10/2007, 03:08
Avatar de k4k4  
Fecha de Ingreso: junio-2007
Ubicación: Baja California, México
Mensajes: 120
Antigüedad: 16 años, 11 meses
Puntos: 6
Re: Clase seguridad en formularios

Hola,

este es un buen recurso sobre el tema: Email Injection. Había leído que la clase Zend_Mail previene este tipo de ataques "automáticamente" además de ser una forma elegante de crear y enviar un email.

Sin estar 100% seguro, creo que en lugar de ver si se encuentra cada posible header en un campo, se puede optar por hacer algo como esto:
Código PHP:
 <?php 
   $from 
$_POST["sender"];
   
$from urldecode($from);
   if (
eregi("(\r|\n)"$from)) {
     die(
"Why ?? :(");
   }
 
?>
ya que, forzosamente, para que los headers sean inyectados es necesario tener "\r\n" en el campo (Zend_Mail reemplaza cada ocurrencia de "\r\n\t" por "???" xD).


Saludos.
  #3 (permalink)  
Antiguo 23/10/2007, 05:10
Avatar de franquero  
Fecha de Ingreso: julio-2005
Mensajes: 179
Antigüedad: 18 años, 9 meses
Puntos: 1
Re: Clase seguridad en formularios

Gracias por la respuesta k4
__________________
Es una suerte que la sociedad libre sea más productiva, porque de no haberlo sido jamás se habría tolerado.
  #4 (permalink)  
Antiguo 22/11/2007, 06:21
Avatar de Tilens  
Fecha de Ingreso: febrero-2007
Ubicación: España
Mensajes: 41
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Clase seguridad en formularios

hola,
me parece muy buen hilo, tengo ahora el mismo problema, tu clase sin embargo la veo muy especifica de momento, por lo que hace lo veo más como una función, pero como punto de partida no está mal, pero para proteger un formulario, según tengo leido por ahora, se debe:

- comporbar integridad, los datos recibidos son los esperados, y los esperados serán los que se tratarán, el resto serán eliminados..
- evitar inyección de codigo, (cuantos más lenguajes mejor, html, java, php, sql,...). esto si que no se me ocurre como hacerlo de forma relativamente fiable... no quiero eliminarlo, solo detectarlo
- evitar inyección de cabeceras. spam para envio de formularios. que veo que es el objetivo principal de tu clase.

a ver si podemos entre todos solucionar el problema, iré poniendo lo tenga conforme veo que resulta bien.

y si alguien conoce algún sistema más que se pueda aplicar por favor que lo comente aquí para tenerlo en cuenta también.
  #5 (permalink)  
Antiguo 22/11/2007, 11:04
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Re: Clase seguridad en formularios

Hay una página de seguridad PHP que trata este tema. Está en inglés. Aquí os dejo el enlace.

Un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 14:41.