Foros del Web » Programando para Internet » PHP »

seguridad en formulario

Estas en el tema de seguridad en formulario en el foro de PHP en Foros del Web. Hola,¿qué tal?: Tengo un problemilla, sé bastante poco de php, y necesito ayuda. Veréis, tengo un formulario, funciona perfectamente, pero quiero ponerle algún tipo de ...
  #1 (permalink)  
Antiguo 11/11/2011, 13:59
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 12 años, 6 meses
Puntos: 2
seguridad en formulario

Hola,¿qué tal?:

Tengo un problemilla, sé bastante poco de php, y necesito ayuda. Veréis, tengo un formulario, funciona perfectamente, pero quiero ponerle algún tipo de seguridad, que nunca se sabe... He visto un código para restringir los caracteres del usuario al ingresar, pero no sé ponerlo a funcionar debidamente, he intentado llamarla de diferentes maneras, pero no lo consigo, porque siempre me sale error en el código. ¿Podríais echarme una mano?, muchas gracias. Por cierto, si sale alguna expresión con espacios, es un error al cortar y pegar, no del código. Este es el codigo completo (en rojo la función a la que me gustaría llamar):

<?php
include("conexion.php");
function formRegistro(){
?>

<?php

}
// verificamos si se han enviado ya las variables necesarias.
{
$usuario = $_POST['usuario'];
$contrasenna = $_POST['contrasenna'];
$repcontrasenna = $_POST['repcontrasenna'];
$email = $_POST['email'];
$nombre = $_POST['nombre'];
$nombreamo = $_POST['nombreamo'];
$raza = $_POST['raza'];
$telefono = $_POST['telefono'];
$edad = $_POST['edad'];
$sexo = $_POST['sexo'];
$provincia = $_POST['provincia'];
$capa = $_POST['capa'];


function comprobar_nombre_usuario_expresiones_regulares($us uario){
if (ereg("^[a-zA-Z0-9\-_]{3,20}$", $usuario)) {
echo "El nombre de usuario $usuario es correcto<br>";
return true;
} else {
echo "El nombre de usuario $usuario no es válido<br>";
return false;
}
}

// Hay campos en blanco

if($usuario=="" || $contrasenna=="" || $repcontrasenna=="" || $email=="" || $nombre=="" || $nombreamo=="" || $raza=="" || $telefono=="" || $edad=="" || $sexo=="" || $provincia=="") {
echo "un campo está vacio.";
formRegistro();
}else{
// ¿Coinciden las contraseñas?
if($contrasenna!=$repcontrasenna) {
echo "Las contraseñas no coinciden";
formRegistro();
}else{



$usuario = trim($_POST['usuario']);
$contrasenna = $_POST['contrasenna'];
$email = $_POST['email'];

$sql_chk = mysql_query("SELECT usuario, email FROM usuarios WHERE usuario='$usuario' OR email='$email'",$link) or die(mysql_error());
if(mysql_num_rows($sql_chk)>0){
echo "El nombre de usuario o la cuenta de correo estan ya en uso";
formRegistro();
} else {









mysql_query("INSERT INTO usuarios (usuario, contrasenna, ciudad, email, nombreamo, telefono, provincia) VALUES ('$usuario','$contrasenna','$ciudad','$email','$no mbreamo','$telefono','$provincia')",$link);

mysql_query("INSERT INTO animal (usuario, nombre, raza, edad, sexo,capa, pedigri) VALUES ('$usuario','$nombre','$raza','$edad','$sexo','$ca pa','$pedigri')",$link);

mysql_query("INSERT INTO fotos (nombre,foto) VALUES ('$nombre','$foto')",$link);


echo 'El usuario '.$usuario.' ha sido registrado de manera satisfactoria.<br />';
echo 'Ahora puede entrar ingresando su usuario y su password<br />';

}
?>

//Un formulario de login, que aparecera despues de el registro fue exitoso

<FORM ACTION="comprobar.php" METHOD="post">
Usuario : <INPUT TYPE="text" NAME="usuario" SIZE=20 MAXLENGTH=20><br />
Password: <INPUT TYPE="password" NAME="password" SIZE=10 MAXLENGTH=10><br />
<INPUT TYPE="submit" VALUE="Ingresar">
</FORM>
<?php

}
}
}

?>
  #2 (permalink)  
Antiguo 11/11/2011, 14:11
Avatar de CesarHC  
Fecha de Ingreso: junio-2011
Ubicación: localhost
Mensajes: 566
Antigüedad: 12 años, 11 meses
Puntos: 56
Respuesta: seguridad en formulario

Aparte de que creo ereg es una funcion obsoleta y debes usar en vez de ella preg_match creo que tienes malesto.

Mal(tienes function comprobar_nombre_usuario_expresiones_regulares($us uario) separado).

Código PHP:
Ver original
  1. function comprobar_nombre_usuario_expresiones_regulares($us uario){
  2. if (ereg("^[a-zA-Z0-9\-_]{3,20}$", $usuario)) {
  3. echo "El nombre de usuario $usuario es correcto<br>";
  4. return true;
  5. } else {
  6. echo "El nombre de usuario $usuario no es válido<br>";
  7. return false;
  8. }
  9. }

Bien

Código PHP:
Ver original
  1. function comprobar_nombre_usuario_expresiones_regulares($usuario){
  2. if (ereg("^[a-zA-Z0-9\-_]{3,20}$", $usuario)) {
  3. echo "El nombre de usuario $usuario es correcto<br>";
  4. return true;
  5. } else {
  6. echo "El nombre de usuario $usuario no es válido<br>";
  7. return false;
  8. }
  9. }
__________________
Solo la práctica no te traicionara ¡¡¡¡¡¡

Seguir el camino tu debes PHP The Right Way.
  #3 (permalink)  
Antiguo 11/11/2011, 14:13
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años
Puntos: 394
Respuesta: seguridad en formulario

Te recomiendo que busques una funcion mas nueva ya que ereg esta depreciada:

Cita:
Esta función ha sido declarada OBSOLETA desde PHP 5.3.0. Su uso está totalmente desaconsejado.
Para usar una función es solo llamarla y pasarle el parámetro después de que la creas:

comprobar_nombre_usuario_expresiones_regulares($us uario);

Ya con eso la llamas y le pasa el nombre del usuario, esta hará el trabajo, ponte a leer acerca de las funciones.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #4 (permalink)  
Antiguo 11/11/2011, 14:19
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 12 años, 6 meses
Puntos: 2
Respuesta: seguridad en formulario

Gracias por los comentarios, pero, es la única función que medio he entendido (no tenía ni idea de que estaba desaconsejada) y no sabría (en principio), adaptar otra función. De todas formas, ¿qué me recomendaríais? Por cierto, en mi mensaje ya he comentado, que si algo del código sale separado, es problema al pegar, pero de todas formas, gracias por intentarme ayudar, se valoran mucho las apreciaciones. :)

Por último, ya he leído sobre funciones y sé cómo se supone que se llaman, pero he tenido algunos problemillas al respecto, si fuera tan sencillo para mí, no pediría ayuda. No pido que me hagan el trabajo, sólo que me ayuden a entender algo que es difícil para mí. Gracias.
  #5 (permalink)  
Antiguo 11/11/2011, 14:31
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años
Puntos: 394
Respuesta: seguridad en formulario

Yo hice una clase para validar datos y la puse como aporte pero parece que no gusto, así que te pongo un ejemplo acomodado a lo que necesitas:

Código PHP:
Ver original
  1. $expresión = '^[a-zA-Z0-9\-_]{3,20}$';
  2. $usuario = "pepe";
  3.  
  4. function ValidarExpRegular($contenido, $expresion){
  5.     $opcion = array("options" => array("regexp" => $expresion));
  6.  
  7.     if(filter_var($contenido, FILTER_VALIDATE_REGEXP, $opcion) === TRUE){
  8.         echo "El usuario esta bien escrito.";
  9.     }else{
  10.         echo "El usuario no puede contener espacion etc etc etc";
  11.     }
  12. }
  13.  
  14. ValidarExpRegular($usuario, $expresion);
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #6 (permalink)  
Antiguo 12/11/2011, 12:21
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad en formulario

<?php
include("conexion.php");
?>

<?php


// verificamos si se han enviado ya las variables necesarias.

$usuario = htmlentities(strip_tags(addslashes($_POST['usuario'])), ENT_QUOTES);
$contraseña= md5($_POST['contrasenna']);
$repcontrasenna= md5($_POST['repcontrasenna']);
$email= $_POST['email']; aqui debes verificar que es un email
$nombre= htmlentities(strip_tags(addslashes($_POST['nombre'])), ENT_QUOTES);
$nombreamo= htmlentities(strip_tags(addslashes($_POST['nombreamo'])), ENT_QUOTES);
$raza= htmlentities(strip_tags(addslashes($_POST['raza'])), ENT_QUOTES);
$telefono= (int)$_POST['telefono'];
$edad= (int)$_POST['edad'];
$sexo= htmlentities(strip_tags(addslashes($_POST['sexo'])), ENT_QUOTES);
$provincia= htmlentities(strip_tags(addslashes($_POST['provincia'])), ENT_QUOTES);
$capa= htmlentities(strip_tags(addslashes($_POST['capa'])), ENT_QUOTES);



// Hay campos en blanco

cambiando los input por los de este tipo nunca podran dejar campos en blanco
<input name="usuario" type="text" value="Usuario" size="20" maxlength="40" onfocus="this.value=(this.value=='Usuario') ? '' : this.value;" onblur="this.value=(this.value=='') ? 'Usuario' : this.value;"/>


if($usuario=="" || $contrasenna=="" || $repcontrasenna=="" || $email=="" || $nombre=="" || $nombreamo=="" || $raza=="" || $telefono=="" || $edad=="" || $sexo=="" || $provincia=="") {
echo "un campo está vacio.";

}else{

// ¿Coinciden las contraseñas?

if($contrasenna!=$repcontrasenna) {

echo "Las contraseñas no coinciden";

}else{

$sql_chk = mysql_query("SELECT usuario, email FROM usuarios ,$link) or die(mysql_error());
$row = mysql_fetch_array($sql_chk);


if($usuario == htmlentities(strip_tags(addslashes($row['usuario'])), ENT_QUOTES)){
echo "El nombre de usuario o la cuenta de correo estan ya en uso";

} elseif($contrasenna== htmlentities(strip_tags(addslashes($row['contrasenna'])), ENT_QUOTES));{{

echo "El nombre de usuario o la cuenta de correo estan ya en uso";

}else{

mysql_query("INSERT INTO usuarios (usuario, contrasenna, ciudad, email, nombreamo, telefono, provincia) VALUES ('$usuario','$contrasenna','$ciudad','$email','$no mbreamo','$telefono','$provincia')",$link);

mysql_query("INSERT INTO animal (usuario, nombre, raza, edad, sexo,capa, pedigri) VALUES ('$usuario','$nombre','$raza','$edad','$sexo','$ca pa','$pedigri')",$link);

mysql_query("INSERT INTO fotos (nombre,foto) VALUES ('$nombre','$foto')",$link);


echo 'El usuario '.$usuario.' ha sido registrado de manera satisfactoria.<br />';
echo 'Ahora puede entrar ingresando su usuario y su password<br />';

}}
?>

//Un formulario de login, que aparecera despues de el registro fue exitoso

<FORM ACTION="comprobar.php" METHOD="post">
Usuario : <INPUT TYPE="text" NAME="usuario" SIZE=20 MAXLENGTH=20><br />
Password: <INPUT TYPE="password" NAME="password" SIZE=10 MAXLENGTH=10><br />
<INPUT TYPE="submit" VALUE="Ingresar">
</FORM>
<?php

}
}
}
al hacer el login debes comprobar la contrasenna por md5

$contrasenna=md5($_POST['contrasenna']);
if($contrasenna == 'la contraseña de la base de datos'){

son iguales

}else{

no lo son

}

para compararla con la de la base de datos de lo contrario dara error en comprobar.php action del formulario

?>

Última edición por webankenovi; 12/11/2011 a las 14:59

Etiquetas: php+formularios
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 17:27.