Foros del Web » Programando para Internet » PHP »

Validar campos select, radio?

Estas en el tema de Validar campos select, radio? en el foro de PHP en Foros del Web. Es necesario validar en php los campos select, así como los campos radio para evitar posibles valores que difieran con los etablecidos en el formulario ...
  #1 (permalink)  
Antiguo 10/03/2010, 06:12
 
Fecha de Ingreso: marzo-2008
Mensajes: 220
Antigüedad: 16 años, 1 mes
Puntos: 0
Pregunta Validar campos select, radio?

Es necesario validar en php los campos select, así como los campos radio para evitar posibles valores que difieran con los etablecidos en el formulario considerando un ataque a través de un formulario externo???

Grácias
  #2 (permalink)  
Antiguo 10/03/2010, 06:16
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Validar campos select, radio?

en efecto, cualquiera puede crear un form con sólo inputs y enviarlos al php con datos erroneos.

para php es trasparente si el input es select, radio o checkbox, ya que él solo recibe los valores, quien discrimina como serán enviados es el navegador
  #3 (permalink)  
Antiguo 10/03/2010, 06:23
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Validar campos select, radio?

los campos select son fáciles de validar ya que tienen campos establecidos... al momento de imprimir el select en pantalla puedes guardar los datos de los option en un array. y luego validar lo que te llegue mediante el formulario con la funcion in_array()

saludos!
__________________
More about me...
~ @rhyudek1
~ Github
  #4 (permalink)  
Antiguo 10/03/2010, 06:31
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Validar campos select, radio?

bueno, lo de hidek1 no aplica en algunos casos: comúnmente mis select se alimentan de tablas "fuertes" y cuando hago los inserts o updates correspondientes a las tablas "débiles", las FK se encargan de hacerme saber si algún select está alterado, por lo tanto el controlar el tipo de error devuelto por el dbms es fundamental y ahorra mucho código
  #5 (permalink)  
Antiguo 10/03/2010, 06:32
 
Fecha de Ingreso: marzo-2008
Mensajes: 220
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Validar campos select, radio?

Muchas grácias!!

Siempre hay que validar toda información introducida por el usuario :)

Y otra cosa: Lo primero que hago con los campos es comprobar si los he recibido...

return isset(campo1, campo2, ...)

...pero esto sólo lo hago con los campos que son oblogatorios, puesto que los que no lo son, no son indispensables. Deberia comprobar de todas formas que existen estos campos no obligatorios? Por supuesto que luego utilizo funciones para validar todos los inputs, sean obligatorios o no.

Lo que puede pasar es que si no compruebo con isset si existen los campos NO Obligatorios, y se ejucuta un ataque con form externo, y dichos campos no existen, al ejectuar la query no encontraria dicho valor y introduciria un valor vacio!! Supone un problema esto?

Código PHP:
Ver original
  1. telephone1 = '".mysql_real_escape_string(trim($post["telephone1"]))."',
  2. telephone2 = '".mysql_real_escape_string(trim($post["telephone2"]))."'

Sería conveniente comprobar si existe el campo: ?

Código PHP:
Ver original
  1. if ( $post["telephone1"])  
  2.    $sql .= "telephone1 = '".mysql_real_escape_string(trim($post["telephone1"]))."',";

Grácias de antemano
  #6 (permalink)  
Antiguo 10/03/2010, 06:36
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Validar campos select, radio?

sí, porque una cosa es comprobar que el campo fue enviado isset y otra muy diferente si está vació empty.

que pasa, que el atacante puede deducir cuales son los campos requeridos (cosa que debes de definir en la tabla en la DB también) y por ende solo envía esos

no es muy necesario validar si el campo esta vacío o no (depende del caso), sino comprobar el origen correcto, por ejemplo que si viene de POSt o GET es muy importante, pro eso siempre se usa isset($_POST['campo'])

en el caso de los checkbox no puedes usar isset para verificar si se envió porque los no marcados no se envían al php, en este caso si es recomendable evaluar que el value sea el indicado si fue enviado

Última edición por maycolalvarez; 10/03/2010 a las 06:42
  #7 (permalink)  
Antiguo 10/03/2010, 08:44
 
Fecha de Ingreso: marzo-2008
Mensajes: 220
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Validar campos select, radio?

Vale ya me queda claro. Hay que asegurarse que recibimos toda la información que solicitamos, idependientemente de que sean o no obligatorios.

Cita:
Iniciado por Hidek1 Ver Mensaje
los campos select son fáciles de validar ya que tienen campos establecidos... al momento de imprimir el select en pantalla puedes guardar los datos de los option en un array. y luego validar lo que te llegue mediante el formulario con la funcion in_array()

saludos!
Veo un inconveniente: El atacante también podría establecer los valores que quisiera en ese array y por tanto podríamos introducir información no deseada en la DDBB, ¿No? A no ser que crees una variable de sesión para guardar el array!!

Grácias
  #8 (permalink)  
Antiguo 10/03/2010, 08:50
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Validar campos select, radio?

:S... no entendiste lo que dije :P

te doy un ejemplo

-obtengo datos de sql
-creo un select y lo imprimo en pantalla
-dentro del bucle extraigo un array con los datos que puse en los value
-con el mismo array valido los datos ..

en ningun momento salgo de la pagina ni paso el array por el cliente.. y si fuera en paginas separadas siempre puedes hacer la consulta denuevo..
aunque me agrada mas la opcion de establecer los campos permitidos desde sql

saludos!
__________________
More about me...
~ @rhyudek1
~ Github
  #9 (permalink)  
Antiguo 10/03/2010, 08:51
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: Validar campos select, radio?

Bueno para eso te dieron in_array, para validar q valores debes encontrar en el array. Esto dependerá de otras cosas, además.
Por ejemplo ¿q esperas recibir o de q te quieres proteger exactamente?
A ver, si en los select esperas valores NUMERICOS, bueno pues debería bastar con un casting forzado al recibirlo, pues sería solo eso, un número. Si esperas cualquier tipo de cadena, deberías utilizar las funciones que PHP tiene para esto o crear la tuya propia, me da la idea rápido utilizar expresiones regulares. Si esperas solo determinadas cadenas podrías desde MySQL fijar los campos, mediante campos tipo ENUM.
El tema es largo pero deberíamos empezar por CONTRA Q TE QUIERES PROTEGER
  #10 (permalink)  
Antiguo 10/03/2010, 09:09
 
Fecha de Ingreso: marzo-2008
Mensajes: 220
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Validar campos select, radio?

Cita:
Iniciado por Hidek1 Ver Mensaje
:S... no entendiste lo que dije :P
en ningun momento salgo de la pagina ni paso el array por el cliente.. y si fuera en paginas separadas siempre puedes hacer la consulta denuevo..
aunque me agrada mas la opcion de establecer los campos permitidos desde sql
saludos!
Estoy un poco confundido :(. A ver, acabas de obtener la información directamente de la tabla, entonces ¿ para que la validas?. En el supuesto caso de enviar la info, mi caso, aplicaría como tu bien dices una query para comprobar los valores del select... Eso si lo veo!!

Cita:
Iniciado por eulloa Ver Mensaje
¿q esperas recibir o de q te quieres proteger exactamente?
A ver, si en los select esperas valores NUMERICOS, bueno pues debería bastar con un casting forzado al recibirlo, pues sería solo eso, un número. Si esperas cualquier tipo de cadena, deberías utilizar las funciones que PHP tiene para esto o crear la tuya propia, me da la idea rápido utilizar expresiones regulares. Si esperas solo determinadas cadenas podrías desde MySQL fijar los campos, mediante campos tipo ENUM.
El tema es largo pero deberíamos empezar por CONTRA Q TE QUIERES PROTEGER
Quiero protegerme de información erronea introducida por el usuario mediante ataques de envio de forms desde su máquina.

Ya tengo validados los campos ENUM en la base de datos, pero aún así le tienes que pasar los valores definidos por que si no, la query fallará.

Por ejemplo necesito que el campo select $_POST['forma_contacto'] sólo contenga los valores 'movil', 'email', o 'telefono'. Por tanto necesitaré o bien crear un array propio con estos valores o tener un tabla FORMAS_CONTACTO con dichos valores para validar que la forma de contacto es una de estas 3 opciones y no 'FAX' ( por ejemplo )
  #11 (permalink)  
Antiguo 10/03/2010, 09:18
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Validar campos select, radio?

bueno creo que lo mejor en este caso es un ejemplo para que no te confundas mas de lo que estas

Código PHP:
Ver original
  1. <form method="post" action="">
  2.     <select name="valores" onchange="submit()">
  3.         <?php
  4.         for($i = 1; $i <= 10; ++$i){
  5.             $validos[] = "valor$i"; // valores validos
  6.             echo "<option value='valor$i'>Valor $i</option>";
  7.         }
  8.         ?>
  9.     </select>
  10. </form>
  11. <?php
  12. if(isset($_POST["valores"])){
  13.     if(in_array($_POST["valores"], $validos)){
  14.         echo $_POST["valores"]." es un dato VALIDO";
  15.     }else{
  16.         echo $_POST["valores"]." es un dato INVALIDO";
  17.     }
  18. }

es un tanto basico el ejemplo pero sirve para su proposito

saludos
__________________
More about me...
~ @rhyudek1
~ Github
  #12 (permalink)  
Antiguo 10/03/2010, 09:26
 
Fecha de Ingreso: marzo-2008
Mensajes: 220
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Validar campos select, radio?

Grácias!! :)

Y como crees que es mejor validar si la info es correcta, con queries como tu ejemplo o con arrays para tener que evitar hacer consultas??

Supongo que si el select es corto array, por el contrario query, no?

Un sáludo
  #13 (permalink)  
Antiguo 10/03/2010, 09:31
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Validar campos select, radio?

depende de lo que quieras en realidad.. ya que los select no siempre seran de una consulta sql... pueden ser tambien datos de ciudades paises etc.. en ese caso puedes usar el asunto del array.. en la mayoria de los foros donde me preguntan el pais le modifico y no tienen protección alguna..

saludos!
__________________
More about me...
~ @rhyudek1
~ Github
  #14 (permalink)  
Antiguo 10/03/2010, 09:49
 
Fecha de Ingreso: marzo-2008
Mensajes: 220
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Validar campos select, radio?

Grácias :)

El único 'inconveniente' es que se tienen que realizar validaciones para todo tipo de campos, y sobre todo para los select, para los que hay que crear muchas funciones ( 1 función por cada select ) para validar ( mediante arrays o queries ) que la información es la deseada!!!
  #15 (permalink)  
Antiguo 10/03/2010, 09:55
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: Validar campos select, radio?

Cita:
Iniciado por cocodj69 Ver Mensaje
Grácias :)

El único 'inconveniente' es que se tienen que realizar validaciones para todo tipo de campos, y sobre todo para los select, para los que hay que crear muchas funciones ( 1 función por cada select ) para validar ( mediante arrays o queries ) que la información es la deseada!!!
Te creas una función de validación por donde pases todos los selects, no una sola para cada select
  #16 (permalink)  
Antiguo 10/03/2010, 10:19
 
Fecha de Ingreso: marzo-2008
Mensajes: 220
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Validar campos select, radio?

Lo que he pensado es como tu dices, pero que para evitar fallos al pasar la info del selet a la función ( puesto que podria llamar a dicha función desde diferentes partes ) es crear CONSTANTES ( arrays ). Por tanto, crearé tantas constantes como selects distintos hayan!!

Crees que es buena idea?
  #17 (permalink)  
Antiguo 10/03/2010, 10:28
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: Validar campos select, radio?

ummmmm, es q no le veo la práctica. Primero creo deberías pensar cuáles son tus normas para aceptar o rechazar datos.
¿para evitar fallos al pasar la info del selet a la función?
Pues hombre, para eso está la misma función, para evitar esos fallos.
  #18 (permalink)  
Antiguo 10/03/2010, 10:40
 
Fecha de Ingreso: marzo-2008
Mensajes: 220
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Validar campos select, radio?

Te lo pongo en un ejemplo: dentro de un mismo php puede que tengamos que validar dicho select en varias ocasiones

Código PHP:
Ver original
  1. //Código PHP
  2. function 1(){
  3.   // Código
  4.   $select_hogar = array('casa','apartamento','chalet');
  5.   validarSelect($valor, $select_hogar);
  6. }
  7.  
  8. // + Código PHP
  9. function 2(){
  10.   // Código
  11.     $select_hogar= array('casa','apartento','cht');
  12.   validarSelect($valor, $select_hogar);
  13. }


Por Ello sería más práctico utilizar una variable global ( puesto que las CONSTANTES sólo son para variables escalares ) de la siguiente forma:

Código PHP:
Ver original
  1. //Código PHP
  2.  
  3. // Var Global
  4. $select_hogar = array('casa','apartamento','chalet');
  5.  
  6. function 1(){
  7.   // Código
  8.   validarSelect($valor, $select_hogar);
  9. }
  10.  
  11. // + Código PHP
  12. function 2(){
  13.   // Código
  14.   validarSelect($valor, $select_hogar);
  15. }

Crearia tantas variables globales como selects.... ¿Te parece bien esto?¿Lo ves más práctico?
  #19 (permalink)  
Antiguo 10/03/2010, 10:42
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Validar campos select, radio?

en realidad seria mas practico usar los parámetros en las funciones en ves de entrar con variables globales

saludos!
__________________
More about me...
~ @rhyudek1
~ Github
  #20 (permalink)  
Antiguo 10/03/2010, 10:47
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: Validar campos select, radio?

Cita:
Iniciado por Hidek1 Ver Mensaje
en realidad seria mas practico usar los parámetros en las funciones en ves de entrar con variables globales

saludos!
Mirate esto, pasas los valores a la función como parámetros, estilo
Código PHP:
$cadena_modificada f1($cadena);

function 
f1($cad){
$cad1 strip_tags($cad); //Cuantas cosas decidas poner
return $cad1;

  #21 (permalink)  
Antiguo 10/03/2010, 11:25
 
Fecha de Ingreso: marzo-2008
Mensajes: 220
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Validar campos select, radio?

¿Por que es más práctico que utilizar variables globales???. De la siguiente forma répito los arrays en diferentes funciones!!!!

Código PHP:
Ver original
  1. //Código PHP
  2. function 1($POST){  
  3.   // Código  
  4.   $select_hogar = array('casa','apartamento','chalet');  
  5.   validarSelect($_POST['valor'], $select_hogar);
  6. }
  7. // + Código PHP
  8. function 2($POST){  
  9.   // Código    
  10.   $select_hogar= array('casa','apartamento','chalet');  
  11.   validarSelect($_POST['valor'], $select_hogar);
  12. }
  13.  
  14. function validarSelect($valor, $select_hogar){
  15.   return in_array($valor, $select_hogar);
  16. }

No se si hos he entendido del todo!! ¿Así estaría bien el código?

O te refieres a pasar directamente a la función f1 y f2 el array $select_hogar?

Siento ser un coñazo, pero quiero desarollarlo bien para acostumbrarme al código que sea nítido y eficaz
  #22 (permalink)  
Antiguo 10/03/2010, 12:19
 
Fecha de Ingreso: marzo-2008
Mensajes: 220
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Validar campos select, radio?

Alguien me puede ayudar por favor??

Grácias!!

Etiquetas: campos, radio, select
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 03:38.