Foros del Web » Programando para Internet » PHP »

Proteger formulario

Estas en el tema de Proteger formulario en el foro de PHP en Foros del Web. Hola: Quiero proteger mi formulario para que no me metan "mierda" en la base de datos. este es el formulario: Código PHP: <? if( $_GET ...
  #1 (permalink)  
Antiguo 14/03/2013, 03:19
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años
Puntos: 1
Proteger formulario

Hola:

Quiero proteger mi formulario para que no me metan "mierda" en la base de datos.

este es el formulario:
Código PHP:
<?

if($_GET["CAPTCHA_CODE"] != ""){
if(
$_GET['comentario'] != ""){

if(
$_GET['email'] != ""){

    
$final=$_GET['final'];

    
$comentario=$_GET['comentario']; 
    
    
$comentario addslashes($_GET['comentario']);
$comentario strip_tags($_GET['comentario']);

    
$email=$_GET['email']; 

    if(
$_GET['nick'] == ""){ $nick="anonimo"; }else{ $nick=$_GET['nick']; }

    
$Captcha = (string) $_GET["CAPTCHA_CODE"];
    echo 
"primero='".$Captcha."'";
    echo 
"segundo='".$_SESSION['captcha']."'";
    if(
trim(strtolower($Captcha)) == $_SESSION["captcha"])  {
        
mysql_query("INSERT INTO comentarios (final,nick,comentario,email) VALUES
        ('$final','$nick','$comentario','$email')"
);
        
        echo 
"<h2>Comentario Enviado Con Exito.<BR>Espere Unos Segundos...<script type='text/javascript'>
    window.setTimeout('history.back();', 2000);
    </script></h2>"
;

    }else{
        echo 
"<p style='color: #ff0000;'><strong>El c&oacute;digo de validaci&oacute;n no ha sido ingresado o es incorrecto.</strong></p>"
    }

}else {
    echo 
"<h2>Debe Introducir Un Correo.<BR>Espere Unos Segundos...<script type='text/javascript'>
window.setTimeout('history.back();', 2000);
</script></h2>"
;
}

    
}else{
    echo 
"<h2>Debe Introducir Un Comentario.<BR>Espere Unos Segundos...<script type='text/javascript'>
window.setTimeout('history.back();', 2000);
</script></h2>"
;
}

}else{
    echo 
"<h2>Debe Introducir El Codigo de Seguridad.<BR>Espere Unos Segundos...<script type='text/javascript'>
window.setTimeout('history.back();', 1000);
</script></h2>"
;
}


?>
Buscando por internet di con esto:

Código PHP:
$_MensajeError="ERROR: caracteres no admitidos";
if (
ereg("[^A-Za-z0-9]+",$_POST['consulta'])) {
echo 
$_MensajeError;

else{
echo 
'<div class="result">Tu nombre es: '.$consulta.'</div>'

Pero no he conseguido juntarlo para que funcionen de manera correcta.

¿como dedo de integrarlo ?

El campo que mas guerra me esta dando es el de Contenido; de momento lo tengo protegido de esta manera:

$comentario=$_GET['comentario'];


$comentario = addslashes($_GET['comentario']);
$comentario = strip_tags($_GET['comentario']);


Alguna sugerencia mas?
  #2 (permalink)  
Antiguo 14/03/2013, 03:29
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Proteger formulario

creo que te refieres a validación de formularios, hasta donde yo sé php no es muy indicado para esta tarea, el lenguaje que mejor viene para esta tarea es javascript (se ejecuta del lado del cliente lo que ahorra recursos al servidor y el servidor no procesa nada hasta que del lado del cliente no se ha validado el formulario).
  #3 (permalink)  
Antiguo 14/03/2013, 03:43
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Proteger formulario

guardamicorreo, qué pasa si el usuario desactiva javascript en el navegador?

Hasta donde yo sé, PHP es el indicado para esta tarea, principalmente por la pregunta anterior y, créeme, es mucho más seguro validar del lado del servidor y no consume tantos recursos como para preocuparse.

miriamgomez, aquí mismo en el foro hay muchos aportes de validación de datos y seguridad, por ejemplo: http://www.forosdelweb.com/f18/aport...a-php-1011808/
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 14/03/2013, 04:10
 
Fecha de Ingreso: septiembre-2011
Mensajes: 219
Antigüedad: 12 años, 6 meses
Puntos: 31
Respuesta: Proteger formulario

miriamgomez, utilizar get para enviar datos no es lo recomendable, por una cuestión de seguridad y por otro lado por una cuestión de límites. method=get en un form produce que los datos enviados sean traslados a la url y dependiendo del navegador hay un limite, con method=post no tendrías ese problema.

Para procesarlo en vez de $_GET usas $_POST

En cuanto a limpiar lo que te envían la idea en todo formulario es esta:
1) verificar que los requeridos no esten vacios

Esto lo podes hacer con javascript antes que se envíe el formulario para no perder los datos que ya escribieron, pero tambien debes hacerlo en el php que procesa, por si desactivan o no tienen habilitado javascript en el navegador.

2) verificar que los campos coincidan con el tipo de datos que se va a guardar, si es un mail verifica que lo sea, si es un nro verifica si es int o un double, hay muchos ejemplos de como verificarlos.
3) sanitizar los string (ej. comentarios) mysql_real_escape_string() te puede ayudar para que no te injecten la base, htmlspecialchars() para eliminar caracteres extraños, htmlentities() para eliminar etiquetas html. Algunas de estas funciones las podes anidar por ejemplo mysql_real_escape_string(htmlentities($_POST['comentarios]))


Cualquier cosa, a tu disposición.
Saludos
  #5 (permalink)  
Antiguo 14/03/2013, 04:14
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Proteger formulario

Cita:
Iniciado por Triby Ver Mensaje
guardamicorreo, qué pasa si el usuario desactiva javascript en el navegador?

Hasta donde yo sé, PHP es el indicado para esta tarea, principalmente por la pregunta anterior y, créeme, es mucho más seguro validar del lado del servidor y no consume tantos recursos como para preocuparse.

miriamgomez, aquí mismo en el foro hay muchos aportes de validación de datos y seguridad, por ejemplo: http://www.forosdelweb.com/f18/aport...a-php-1011808/
mmmm tienes razón! :)

aunque desconozco si hubiera alguna manera de que si tiene javascript desactivado se le niegue la vista del formulario, pero eso es ya otra cosa que no viene al caso.
  #6 (permalink)  
Antiguo 14/03/2013, 04:57
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años
Puntos: 1
Respuesta: Proteger formulario

Hola:
gracias a todo.

Os voy contando por partes:

- necesito poner GET para que me funciones el captchap
- He protegido el campo comentario añadiendo esto
$comentario = htmlspecialchars($_GET['comentario']) ;

Con lo que se sepupone que lo libra de los caracteres no deseados.

Hemos dado un pasito.

Pero no he resuelto aun el problema.

Habria alguna manera de impedir que comentario tuviera una serie de palabras (p.e. viagra), y hacer una lista de palabras "prohibidas"?
  #7 (permalink)  
Antiguo 14/03/2013, 05:11
 
Fecha de Ingreso: septiembre-2011
Mensajes: 219
Antigüedad: 12 años, 6 meses
Puntos: 31
Respuesta: Proteger formulario

Esta es una manera simple, este script no considera si lo ponen con espacios intermedios, con guiones o con otro artilugio para evadir el filtro.

Disculpas por el tono del ejemplo, es para ilustrar el ejemplo.

Código PHP:
Ver original
  1. $comentario = 'La prostituta le pidio al idiota que se tome una viagra para ...';
  2.  
  3. $prohibidas = array(
  4.         '/viagra/' => 'pastillita azul',
  5.         '/prostituta/' => 'sra de antigua profesion',
  6.         '/idiota/' => 'sr que no entiende correctamente'
  7.     );
  8.  
  9.  
  10. $string_limpio = preg_replace(array_keys($prohibidas), $prohibidas,$comentario);
  11.  
  12. echo $string_limpio;
  #8 (permalink)  
Antiguo 14/03/2013, 05:20
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Proteger formulario

Cita:
Iniciado por Triby Ver Mensaje
guardamicorreo, qué pasa si el usuario desactiva javascript en el navegador?

[/url][/B]
Si desactiva el javascript, le pones un IF con algo que le pida que lo active, y si es posible, con los pasos para lograrlo.

Cita:
Iniciado por Triby Ver Mensaje


Hasta donde yo sé, PHP es el indicado para esta tarea, principalmente por la pregunta anterior y, créeme, es mucho más seguro validar del lado del servidor y no consume tantos recursos como para preocuparse.
[/url]
No veo porque el PHP tiene que gestionar ninguna validación (de hecho puede). Para eso está el Javascript, JQuery, Ajax etc, etc... Lo que si hace bien es el hecho de filtrar slashes o evitar incursiones en el SQL. No se trata de que consuma o no recursos, se trata de hacerlo bien, tener una estructura de trabajo y que el mismo sea lo más ágil posible, si no manejas eso, pues quiere decir que no te importa mucho la optimización y no tenemos nada que debatir..

Dado el caso porque no hacemos todos páginas PHP donde con ECHOS imprimimos TOOOODO el codigo HTML, y en las URL amigables le ponemos para que la extensión sea .html en vez de PHP?? Para qué si para eso existe el HTML que hace todo eso sin mucho esfuerzo y optimiza el rendimiento de tu web...

Bueno, solo era un comentario.

en cuanto al filtro de palabras que pide, se puede hacer con un array.. aqui encontre un ejemplo en youtube... no es optimo pero sirve... http://www.youtube.com/watch?v=yPSAPPdT1Jo
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #9 (permalink)  
Antiguo 14/03/2013, 05:21
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años
Puntos: 1
Respuesta: Proteger formulario

Muchas gracias.

Pero se me olvido decirte que soy la mas torpe del mundo¡¡¡

Me explique mal, se trata que si $_GET['comentario'] incluye las palabras (ositos, peluches, nubecitas de algodon,... es para ayudarte con el ejemplo) no se publique.

Código PHP:

<?
session_start
(); 
include(
'../configp.php'); //incluimos el config.php que contiene los datos de la conexión a la db

 
if($_GET["CAPTCHA_CODE"] != ""){
if(
$_GET['comentario'] != ""){

if(
$_GET['email'] != ""){

    
$final=$_GET['final'];

    
$comentario=$_GET['comentario']; 
    
$comentario htmlspecialchars($_GET['comentario']) ;    
$comentario addslashes($_GET['comentario']);
$comentario strip_tags($_GET['comentario']);
 

    
$email=$_GET['email']; 

    if(
$_GET['nick'] == ""){ $nick="anonimo"; }else{ $nick=$_GET['nick']; }

    
$Captcha = (string) $_GET["CAPTCHA_CODE"];
    echo 
"primero='".$Captcha."'";
    echo 
"segundo='".$_SESSION['captcha']."'";
    if(
trim(strtolower($Captcha)) == $_SESSION["captcha"])  {
        
mysql_query("INSERT INTO comentarios (final,nick,comentario,email) VALUES
        ('$final','$nick','$comentario','$email')"
);
        
        echo 
"<h2>Comentario Enviado Con Exito.<BR>Espere Unos Segundos...<script type='text/javascript'>
    window.setTimeout('history.back();', 2000);
    </script></h2>"
;

    }else{
        echo 
"<p style='color: #ff0000;'><strong>El c&oacute;digo de validaci&oacute;n no ha sido ingresado o es incorrecto.</strong></p>"
    }

}else {
    echo 
"<h2>Debe Introducir Un Correo.<BR>Espere Unos Segundos...<script type='text/javascript'>
window.setTimeout('history.back();', 2000);
</script></h2>"
;
}

    
}else{
    echo 
"<h2>Debe Introducir Un Comentario.<BR>Espere Unos Segundos...<script type='text/javascript'>
window.setTimeout('history.back();', 2000);
</script></h2>"
;
}

}else{
    echo 
"<h2>Debe Introducir El Codigo de Seguridad.<BR>Espere Unos Segundos...<script type='text/javascript'>
window.setTimeout('history.back();', 1000);
</script></h2>"
;
}


?>
  #10 (permalink)  
Antiguo 14/03/2013, 05:28
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años
Puntos: 1
Respuesta: Proteger formulario

Cita:
Iniciado por loncho_rojas Ver Mensaje
Si desactiva el javascript, le pones un IF con algo que le pida que lo active, y si es posible, con los pasos para lograrlo.



No veo porque el PHP tiene que gestionar ninguna validación (de hecho puede). Para eso está el Javascript, JQuery, Ajax etc, etc... Lo que si hace bien es el hecho de filtrar slashes o evitar incursiones en el SQL. No se trata de que consuma o no recursos, se trata de hacerlo bien, tener una estructura de trabajo y que el mismo sea lo más ágil posible, si no manejas eso, pues quiere decir que no te importa mucho la optimización y no tenemos nada que debatir..

Dado el caso porque no hacemos todos páginas PHP donde con ECHOS imprimimos TOOOODO el codigo HTML, y en las URL amigables le ponemos para que la extensión sea .html en vez de PHP?? Para qué si para eso existe el HTML que hace todo eso sin mucho esfuerzo y optimiza el rendimiento de tu web...

Bueno, solo era un comentario.

en cuanto al filtro de palabras que pide, se puede hacer con un array.. aqui encontre un ejemplo en youtube... no es optimo pero sirve... http://www.youtube.com/watch?v=yPSAPPdT1Jo
Hola:

Es sencillo y simple, pero no se trata de que las sustituya sino que no se publique
  #11 (permalink)  
Antiguo 14/03/2013, 05:42
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Proteger formulario

Mi estimada Miriam, el ejemplo que te pase esta basado en unos array, ya debería darte una idea o norte para hacer tu trabajo, si lo que esperas es que te pasen el script hecho, no se...

Un strpos te ayudaría a detectar las palabras que no quieres que salgan.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #12 (permalink)  
Antiguo 14/03/2013, 05:55
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Proteger formulario

miriamgomez, disculpa por invadir tu tema.

----------------------------------

Cita:
Iniciado por loncho_rojas Ver Mensaje
Si desactiva el javascript, le pones un IF con algo que le pida que lo active, y si es posible, con los pasos para lograrlo.
PHP no puede detectar si Javascript está activo, por el simple hecho de que se ejecuta en el servidor y no tiene acceso al navegador, excepto por los datos (muy fácilmente manipulables) que este envía.

Cita:
Iniciado por loncho_rojas Ver Mensaje
No veo porque el PHP tiene que gestionar ninguna validación (de hecho puede). Para eso está el Javascript, JQuery, Ajax etc, etc... Lo que si hace bien es el hecho de filtrar slashes o evitar incursiones en el SQL. No se trata de que consuma o no recursos, se trata de hacerlo bien, tener una estructura de trabajo y que el mismo sea lo más ágil posible, si no manejas eso, pues quiere decir que no te importa mucho la optimización y no tenemos nada que debatir..
Precisamente, se trata de hacerlo bien y en eso se incluye la validación adecuada.

Imagina que un usuario malintencionado se da cuenta de que en tu web sólo validas con Javascript, guarda el formulario en su disco duro, lo modifica a su gusto y desde ahí comienza a probar vulnerabilidades.

No tenemos nada que debatir?

Ya me doy cuenta!
__________________
- León, Guanajuato
- GV-Foto
  #13 (permalink)  
Antiguo 14/03/2013, 06:06
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Proteger formulario

Dije claramente que VALIDAR es una cosa... FILTRAR es otra... =D.. Valido si tiene caracteres X o un email, para qué en PHP... cuando recibo los datos que validó, tendría que filtrarlo para el insert en la BD para que ningún bot o mal intencionado aficionado o experto inserte datos o extraiga datos, etc, etc... PHP óptimo en esto último... Ahora vamos a discutir si validar o filtrar son la misma cosa? =D
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #14 (permalink)  
Antiguo 14/03/2013, 14:09
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Proteger formulario

Cita:
Iniciado por loncho_rojas
Valido si tiene caracteres X o un email, para qué en PHP
Pues en PHP deberías validar longitud, tipo de dato recibido, caracteres permitidos, etc., precisamente porque Javascript puede desactivarse y, si es el caso, no habrá validación, solo "filtrado".

Si en alguna de tus webs tienes un formulario donde validas sólo con javascript, pásame la URL para que me demuestres su efectividad y finalizamos la discusión.
__________________
- León, Guanajuato
- GV-Foto
  #15 (permalink)  
Antiguo 14/03/2013, 16:38
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Proteger formulario

Cita:
Iniciado por loncho_rojas Ver Mensaje
Dije claramente que VALIDAR es una cosa... FILTRAR es otra... =D.. Valido si tiene caracteres X o un email, para qué en PHP...

"Para qué en PHP"??

De lo primero que tiene que meterse en la cabeza un programador PHP, no es que "un usuario puede no tener activado javascript"..Es que ni siquiera puede suponer que su PHP va a ser cargado por un navegador.

Etiquetas: formulario, mysql, proteger
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




La zona horaria es GMT -6. Ahora son las 18:26.