Foros del Web » Programando para Internet » PHP »

Consulta sobre codigo

Estas en el tema de Consulta sobre codigo en el foro de PHP en Foros del Web. Viendo Smf encontre este código : @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código php: Ver original <?php function addslashes__recursive ( $var ) { if ( ! is_array ( $var ...
  #1 (permalink)  
Antiguo 24/06/2009, 22:29
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Consulta sobre codigo

Viendo Smf encontre este código :

Código php:
Ver original
  1. <?php
  2. function addslashes__recursive($var){
  3. if (!is_array($var))
  4. return addslashes($var);
  5. $new_var = array();
  6. foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
  7. return $new_var;
  8. }
  9. $_POST=addslashes__recursive($_POST);
  10. $_GET=addslashes__recursive($_GET);
  11. $_REQUEST=addslashes__recursive($_REQUEST);
  12. $_SERVER=addslashes__recursive($_SERVER);
  13. $_COOKIE=addslashes__recursive($_COOKIE);
  14. ?>

se supone hasta donde me he informado que evita ataques e inyecciones sql....
y mi pregunta es que ventajas tiene, si lo uno a mi código de control de datos para ingresar usuarios por ejemplo....

Código php:
Ver original
  1. <?php
  2. ## Conectamos a base de datos
  3. ##+------------------------------------------------------------------------->
  4. include ("conectar.php");
  5.  
  6. ## Agregamos la función para limpiar cadenas de caracteres
  7. ## especiales
  8. ##+------------------------------------------------------------------------->
  9. function limpiaCadena ($cadena)
  10. {
  11. $cadena = stripslashes($cadena);
  12. return mysql_real_escape_string($cadena);
  13. }
  14.  
  15. ## Aplicamos la Función al usuario y contraseña
  16. ##+------------------------------------------------------------------------->
  17. $user_ingreso = limpiaCadena(htmlentities($_POST[usuario]));
  18. $contrasena_cad = limpiaCadena($_POST[contrasena]);
  19.  
  20. ## Encriptamos la contraseña con SHA1
  21. ##+------------------------------------------------------------------------->
  22. $contrasena_encriptada = sha1($contrasena_cad);
  23.  
  24. ## Comprobamos si el usuario Existe, comprobando usuario
  25. ## passwords encriptados y si usuario esta activado con (flag)
  26. ##+------------------------------------------------------------------------->
  27.  
  28. $busca_usuario=mysql_query("SELECT * FROM usuarios"
  29. ." WHERE USER = '$user_ingreso'"
  30. ." AND PASSWORD = '$contrasena_encriptada' "
  31. ." AND FLAG = '1'");
  32.  
  33. ## Si al comparar parametros los datos son correctos  
  34. ## es decir consulta == 1, Procedemos......
  35. ##+------------------------------------------------------------------------->
  36.  
  37. if(mysql_num_rows($busca_usuario)==1) // Los datos son validos
  38. {
  39. ## Creamos la Sesion y sus variables  
  40. ## Definimos la sesión para aplicarle seguridad a nuestras
  41. ## paginas internas...
  42. ##+------------------------------------------------------------------------->
  43. $_SESSION['pass_usuario'] = "$user_ingreso";
  44. $_SESSION["error_user"]= "SI";
  45.  
  46. ## Redireccionamos a nuestra aplicación...
  47. ##+------------------------------------------------------------------------->  
  48. header ("Location: carpeta_aplicacion/index.php");
  49. }
  50. ## Ver caso de Acceso Inválido
  51. ##+------------------------------------------------------------------------->
  52. else
  53. {
  54. ## En caso de NO ser correctos los datos, obtenemos la fecha
  55. ## y el ip del cliente, y la guardamos en una tabla
  56. ## para controlar el flood de intentos de ingreso a gusto....
  57. ##+------------------------------------------------------------------------->
  58. $ip = $_SERVER[REMOTE_ADDR];
  59. $fecha = date("Y-m-d");
  60.  
  61. mysql_query ("INSERT INTO flood_login"
  62.                      ." (ip, fecha)"
  63.                      ." Values"
  64.                      ." ('$ip', '$fecha')") or die ("Error ".mysql_error());
  65.  
  66.  
  67. ## y redireccionamos a nuestra pantalla inicial mostrando error
  68. ## de datos incorrectos....
  69. ##+------------------------------------------------------------------------->
  70. header("Location: index.php?erroringreso=si");
  71.  
  72. ## Tambien se puede redireccionar el flag con el usuario
  73. ## en base64, para ver si el usuario esta desactivado e informar
  74. ##$envia = base64_encode($_POST[usuario]);             
  75. ##header("Location: index.php?erroringreso=si&flag=$envia");
  76. ##+------------------------------------------------------------------------->
  77. }
  78. ?>

sorry por tanto código pero quise dejar un código de acceso que me ha llevado tiempo en crear y se los dejo documentado, para fines didácticos, y ver si lo podemos afinar con cositas como estas.....

ojo : este es solo codigo de control de usuarios para ingresos al sistema y demas es necesario ver el tema de sesiones y seguridad de estas con session_start(); por ejemplo......

saludos .....
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #2 (permalink)  
Antiguo 25/06/2009, 00:21
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: Consulta sobre codigo

Pregunto: que crees que sea mas efectivo para escapar caracteres que se van a ingresar a base de datos MySQL?

a) addslashes()
b) mysql_real_escape_string()
c) a + b

Despues de responder selecciona el siguiente texto para poder leerlo:

Lo del addslashes te lo explique ya en el otro tema, si tienes habilitadas las comillas magicas se ejecuta automaticamente; si pasas tus variables por addslashes y mysql_real_escape_string se van a escapar doblemente, pero tal vez no lo entiendas hasta que lo pruebes.

No preguntes, lo viste en un foro y puede que sea algo correcto, prueba usando una, luego la otra, luego ambas y nos cuentas los resultados.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 25/06/2009, 00:22
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 8 meses
Puntos: 55
Respuesta: Consulta sobre codigo

bueno la funcion de arriba hace una limpiesa clasica la cual no quiere decir q sea la ideal

es tambien uan cuesiton de gustos y necesidades del sistema

por ejemplo yo prefiero utilizar mysql_real_escape_string() antes de addslashes(), guardar o limpiar las cadenas de todo html no valido con strip_tags y quitar atritubos indeseados, y a todo el resto pasarle un htmlspecialchars o en su defecto htmlentities() para terminar de limpiarlo haciendo esto ya quedan muy pocas cosas por las q te puedan complicar la existencia

slaudos
__________________
Degiovanni Emilio
developtus.com
  #4 (permalink)  
Antiguo 25/06/2009, 00:32
Avatar de Tx
Tx
 
Fecha de Ingreso: enero-2002
Ubicación: Cba - Arg
Mensajes: 188
Antigüedad: 22 años, 3 meses
Puntos: 1
Respuesta: Consulta sobre codigo

Hola kaninox,
sinceramente me parece muchisimo mejor tu funcion "limpiar_cadena", que la recursiva del ejemplo, cortita y al pie.

Primero, en tu funcion, preguntas si magic_quotes_gpc esta activada, para recien actuar en consecuencia; la recursiva, escapa caracteres escapados incluso, valga la redundancia, no hace ningun checkeo de la configuracion de PHP.
Ademas, escapa incluso las claves de los arreglos, cosa que serviria en algun caso en particular, pero para lo que se planteo la verdad no le veo.

Por otro lado, no es recomendable el uso de funciones recursivas tan generales, si cada envio por POST o GET estarias llamando a una funcion recursiva, seria un gasto innecesario comparado con su ventaja.

En definitiva, apostaria a seguir con la tuya y mejorarla en lo que vayas viendo que necesitas.

Saludos!
  #5 (permalink)  
Antiguo 25/06/2009, 02:22
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: Consulta sobre codigo

muchas gracias tenia una duda y creo que me aclararon del todo :D
triby probe y claro, me quedo con mysql_real_escape_string(); ya entendí

gracias saludos
__________________
Gokuh Salvo al mundo. PUNTO!!!!
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 22:10.