Foros del Web » Programando para Internet » PHP »

Este codigo es seguro ? :S

Estas en el tema de Este codigo es seguro ? :S en el foro de PHP en Foros del Web. hola que tal estoy desarrollando un proyecto y creo como le a tocado a todos en algun momento , ando con el mambo de la ...
  #1 (permalink)  
Antiguo 04/11/2009, 13:05
Avatar de mauro770  
Fecha de Ingreso: mayo-2009
Mensajes: 109
Antigüedad: 14 años, 11 meses
Puntos: 1
Desacuerdo Este codigo es seguro ? :S

hola que tal estoy desarrollando un proyecto y creo como le a tocado a todos en algun momento , ando con el mambo de la inyeccion xD .... y queria consultar si este codigo esta seguro de la inyeccion sql o cuales son sus fallos , o si se podria mejorar ... es sencillo no es muy largo ...
Código PHP:
<?php require_once('../Connections/Cnn_usuarios.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
}
$editFormAction $_SERVER['PHP_SELF'];
if (isset(
$_SERVER['QUERY_STRING'])) {
  
$editFormAction .= "?" htmlentities($_SERVER['QUERY_STRING']);
}
// aca empieso yo.
if(array_key_exists('enviar'$_POST) && !empty($_POST)){
// hacemos las comparaciones, si existe un caracter extraño lo hara saber
$v_nombre preg_replace("/[^a-zA-Z0-9\sñÑáéíóúÁÉÍÓÚ]/"""$_POST['nombre']);
$v_pass preg_replace("/[^a-zA-Z0-9\sñÑáéíóúÁÉÍÓÚ]/"""$_POST['pass']);
if ((
$v_nombre !== $_POST['nombre']) || ($v_pass !== $_POST['pass'])){
 
$error "Han surguido los siguientes errores:<br/>
     No se permiten caracteres extra&ntilde;os. Ejemplo : (,),{,},[,],?,¿,¡,!,;,#,',&,|,/, etc.Por favor si has ingresado alguno elim&iacute;nalos.<br/>"
;

if(
$v_nombre !== $_POST['nombre']){
     
$error .= "Por favor verifica tu NOMBRE.<br/>";
     }
if(
$v_pass !== $_POST['pass']){
     
$error .= "Por favor verifica la contraseña.<br/>";
     }
} else {
// verificamos q los campos no esten vacios
if(empty($_POST['nombre']) || empty($_POST['pass'])){
$error "Han surguido los siguientes errores:<br/>";
if(empty(
$_POST['nombre'])){
 
$error .="Ingresa tu NOMBRE<br/>";
 }
if(empty(
$_POST['pass'])){
 
$error .="Ingresa una contraseña<br/>";}
 }
}
}
if (
array_key_exists('enviar'$_POST) && !isset($error)){
if ((isset(
$_POST["MM_insert"])) && ($_POST["MM_insert"] == "registrar_usuario")) {
  
$insertSQL sprintf("INSERT INTO prueba (nombre, pass) VALUES (%s, %s)",
                       
GetSQLValueString($_POST['nombre'], "text"),
                       
GetSQLValueString($_POST['pass'], "int"));

  
mysql_select_db($database_Cnn_usuarios$Cnn_usuarios);
  
$Result1 mysql_query($insertSQL$Cnn_usuarios) or die(mysql_error());

  
$insertGoTo "borrrraaaaameeee.php";
  if (isset(
$_SERVER['QUERY_STRING'])) {
    
$insertGoTo .= (strpos($insertGoTo'?')) ? "&" "?";
    
$insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  
header(sprintf("Location: %s"$insertGoTo));
}
}

?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<form action="<?php echo $editFormAction?>" id="registrar_usuario" name="registrar_usuario" method="POST">nombre<br />
  <input type="text" name="nombre" id="nombre" />
.
<p>
    pass<br /> 
    <input type="text" name="pass" id="pass" />
  .</p>
 <p>

   <input type="submit" name="enviar" id="enviar" value="Enviar" />
 </p>
 <input type="hidden" name="MM_insert" value="registrar_usuario" />
</form><?php if(array_key_exists('enviar'$_POST) && isset($error)){
        echo 
$error;
        
        } 
?>
</body>
</html>
tambien me gustaria preguntar si alguien sabe para que es " GetSQLValueString() " y "sprintf()" por que eso me lo crea automaticamente DW y he leido que sirve para este tema ... pero no me ha quedado muy clara su funcion.
muchas gracias desde ya.

saludos!

Última edición por mauro770; 04/11/2009 a las 13:20 Razón: cambie el titulo
  #2 (permalink)  
Antiguo 04/11/2009, 14:17
Avatar de mauro770  
Fecha de Ingreso: mayo-2009
Mensajes: 109
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Este codigo es seguro ? :S

tambien me salio otra duda , esto lo crea DW .
Código PHP:
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); 
para que sirve ? tambien es por el tema de la inyeccion ?
  #3 (permalink)  
Antiguo 04/11/2009, 14:52
Avatar de _-ZeuS-_  
Fecha de Ingreso: junio-2007
Ubicación: Quito, Ecuador! ;)
Mensajes: 100
Antigüedad: 16 años, 10 meses
Puntos: 7
De acuerdo Respuesta: Este codigo es seguro ? :S

Hola, vamos por el principio, php es un lenguaje ke se ejecuta en un servidor, pero lo que te puedo decir es que por seguridades necesitas crear varias capas de programación que por lo general antes eran dos las conocidas como cliente - servidor, ahora puedes crear varios niveles pero la verdad yo siempre acostumbro a manejar objetos por ende creo clases por cada tabla de la base de datos y ahí pongo la programación de sql, bueno eso como consejo.

Ahora x lo que leí tienes varias validaciones interesantes que hacen seguro al sistema, tienes que proteger de inyección de código enbase de datos y en parte lo has hecho, así que en inyección creo que está seguro.
  #4 (permalink)  
Antiguo 04/11/2009, 15:08
Avatar de mauro770  
Fecha de Ingreso: mayo-2009
Mensajes: 109
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Este codigo es seguro ? :S

muchas grcaias zeus por tu comentario, si alguien quiere acotar algo mas para que todos aprendamos es bienvenido :D
  #5 (permalink)  
Antiguo 04/11/2009, 15:14
Avatar de _-ZeuS-_  
Fecha de Ingreso: junio-2007
Ubicación: Quito, Ecuador! ;)
Mensajes: 100
Antigüedad: 16 años, 10 meses
Puntos: 7
Respuesta: Este codigo es seguro ? :S

por cierto :

Código PHP:
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); 
lo que hace es verificar si ya tienes la función mysql_real_escape_string que es de php5 si no me ekivoko y te hace una validación ke si existe la use kaso kontrario use la antigua de mysql_escape_string()

o al revés no rekuerdo muy bien
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 07:49.