Foros del Web » Programando para Internet » PHP »

Protección de codigo PHP (Solicito opiniones y algo de ayuda :D)

Estas en el tema de Protección de codigo PHP (Solicito opiniones y algo de ayuda :D) en el foro de PHP en Foros del Web. Hola amigos estoy comenzando con el tema de darle mayor proteccion a mi codigo ya que esto empieza a ser cada vez mas enserio jeje ...
  #1 (permalink)  
Antiguo 14/06/2009, 19:03
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Información Protección de codigo PHP (Solicito opiniones y algo de ayuda :D)

Hola amigos estoy comenzando con el tema de darle mayor proteccion a mi codigo ya que esto empieza a ser cada vez mas enserio jeje :P, ando un poco perdio en el tema y me gustaria saber que debo de aprender para evitar problemas en mi pagina como por ejemplo inyeccion sql y ¿Que mas me podrian hacer en la web?.

Para empezar quiero que veais el codigo que he creado para el registro de usuarios y que me opineis y dirigais un poco en tema de mejorar la seguridad, el codigo es el siguiente:

Código PHP:
<?php
include("config.php");
include(
"../usu/includes/mailer.php");
include(
"../usu/includes/constants.php");

// Preguntaremos si se han enviado ya las variables necesarias 
if (isset($_POST["email"])) { 
$correo htmlspecialchars(trim($_POST["email"]));
$password trim($_POST["password"]); 
$cpassword trim($_POST["cpassword"]); 
$email $_POST["email"];

//recoger direccion ip
$ip $_SERVER['REMOTE_ADDR'];

// Hay campos en blanco 
if($password==NULL|$cpassword==NULL|$correo==NULL) { 
header("location: formreg.php?error=1"); 
}else{ 

//Validar direccion de email
if (!preg_match(
'/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',
$correo)) {
header("location: formreg.php?error=2"); 
}else{ 

//Minimo de caracteres en campo contraseña
if (strlen($password)<4)
{
header("location: formreg.php?error=3");
  
// no tiene mas de 4 caracteres
}else{

// ¿Coinciden las contraseñas? 
if($password!=$cpassword) { 
header("location: formreg.php?error=4");
}else{ 

// Comprobamos si el nombre de usuario o la cuenta de correo ya existían 
$checkuser mysql_query("SELECT email FROM usu WHERE email='$correo'"); 
$email_exist mysql_num_rows($checkuser); 

//encriptar contraseña
$password=md5($password);

if (
$email_exist>0) { 
header("location: formreg.php?error=5"); 
}else{

//Todo parece correcto procedemos con la inserccion 
$query "INSERT INTO usu (password, email, ip, fecha) VALUES('".mysql_real_escape_string($password)."','".mysql_real_escape_string($correo)."','$ip', NOW())"
$registro=mysql_query($query) or die(mysql_error()); 
$registro "El usuario $correo ha sido registrado de manera satisfactoria.<br/>Esta parte de la página está en construcción.<br/><br/><a href=\"../../index.php\">Pulsa aquí para volver a la página principal.</a>";

/*Enviar email de bienvenida*/
$mailer = new Mailer//instancia a la clase
$mailer->sendWelcome($correo$password); //llama a la funcion




}
}
?>
  #2 (permalink)  
Antiguo 14/06/2009, 21:30
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: Protección de codigo PHP (Solicito opiniones y algo de ayuda :D)

Antes de colocar cualquier dato de cadena o texto en una consulta debes escaparlo para evitar riesgos de inyeccion SQL:

musql_real_escape_string()
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 15/06/2009, 00:52
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Protección de codigo PHP (Solicito opiniones y algo de ayuda :D)

Si el mysql_real_escape_string() lo he usado en el insert a la base de datos pero no se si asi esta ya todo el codigo bien protegido o le falta algo? y otra duda es: ¿Si no es un insert y la consulta es un select tambien hay que usar el mysql_real_escape_string()?

Saludos
  #4 (permalink)  
Antiguo 15/06/2009, 01:24
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: Protección de codigo PHP (Solicito opiniones y algo de ayuda :D)

SIEMPRE que vayas a introducir una cadena o texto en una consulta (query) debes escaparlos.

Consultas SQL = SELECT, INSERT, DELETE, UPDATE, etc. (incluido WHERE)

Esto te ayudara a evitar inyeccion de codigo por parte de usuarios malintencionados, pero tambien evitaras errores al introducir datos reales como McDonald's, el apostrofe (comilla sencilla) no causara problemas.

- Asegurate de que cada valor sea del tipo que corresponde al campo, es decir, si vas a incluir un dato numerico, sea realmente numerico.
- Cualquier valor debe estar dentro de los rangos permitidos por tus tablas (valor minimo/valor maximo para numeros y longitud minima/maxima para cadenas y textos).
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 15/06/2009, 06:33
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Protección de codigo PHP (Solicito opiniones y algo de ayuda :D)

jejej muchisimas gracias por explicarme sobre el tema, referente al where seria mas o menos una cosa asi lo que deberia de hacer no?

Código PHP:
// Comprobamos si el nombre de usuario o la cuenta de correo ya existían 
$checkuser mysql_query("SELECT email FROM usu WHERE email='".mysql_real_escape_string($correo)."'"); 
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 00:47.