elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Este upload es seguro?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Este upload es seguro?  (Leído 4,919 veces)
RicRed

Desconectado Desconectado

Mensajes: 66



Ver Perfil WWW
Este upload es seguro?
« en: 29 Octubre 2012, 18:34 pm »

Hola a los usuarios del foro, este upload de imagenes por db seria seguro?

Código
  1. <?PHP
  2.    $conexion = mysql_connect("localhost", "root", "123456");
  3.    mysql_select_db("dbimages", $conexion);
  4. if (isset($_POST['enviar']))
  5. {
  6. $tipos = array("image/gif","image/jpeg","image/bmp","image/pjpeg");
  7. $maximo = 1000000; //1000Kb
  8. if (is_uploaded_file($_FILES['imagen']['tmp_name']))
  9. { // Se ha subido?
  10. if (in_array($_FILES['imagen']['type'],$tipos) && $_FILES['imagen']['size'] <= $maximo)
  11. { // Es correcto?
  12. $fp = fopen($_FILES['imagen']['tmp_name'], 'r'); //Abrimos la imagen
  13. $imagen = fread($fp, filesize($_FILES['imagen']['tmp_name'])); //Extraemos el contenido de la imagen
  14. $imagen = addslashes($imagen);
  15. fclose($fp); //Cerramos imagen
  16. $nombre = addslashes($_FILES['imagen']['name']); // Arreglamos el Nombre
  17. else $nombre = $_FILES['imagen']['name'];
  18.  
  19. $query = "INSERT INTO imagenes (imagen,nombre,tipo,descripcion,fecha,ip) VALUES ";
  20. $query.= "('".$imagen."','".$nombre."','".$_FILES['imagen']['type']."','";
  21. $query.= $_POST['descripcion']."','";
  22. $query.= date("d/m/y",time())."','".$_SERVER['REMOTE_ADDR']."')";
  23.  
  24. if (mysql_query($query)) echo '<a href="visor.php?mostrar='.mysql_insert_id().'">';
  25. else echo mysql_error();
  26. } else echo "El formato del archivo no es correcto o es mayor de 100Kb";
  27. } else echo "La imagen no ha sido subida";
  28. }
  29. //Desconexion DB
  30. ?>


En línea

[u]nsigned


Desconectado Desconectado

Mensajes: 2.397

JS/Node developer


Ver Perfil WWW
Re: Este upload es seguro?
« Respuesta #1 en: 30 Octubre 2012, 17:44 pm »

1) No es para nada recomendable guardar la imagen en forma binaria dentro de la DD.BB, vas a sobrecargar tu server. Mejor solo guarda el path como una cadena de texto.

2)Antes de copiar la imagen de la carpeta temporal de subida ($_FILES['imagen']['tmp_name']) a su ubicacion final, es recomendable revisar que se trate efectivamente de una imagen con la funcion getimagesize. Mas que nada para evitar RFI/LFI. Si dicha funcion devuelve false es que el archivo proporcionado por el usuario no se trata realmente de una image, independientemente de su extenision/mime-type ;)

Saludos


En línea

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!
RicRed

Desconectado Desconectado

Mensajes: 66



Ver Perfil WWW
Re: Este upload es seguro?
« Respuesta #2 en: 30 Octubre 2012, 17:57 pm »

seria mejor subir las imagenes en una carpeta con la funcion getimagesize, para evitar que suban shells al sistema.

Otra cosa, este codigo que se encuentra en esta web:

http://www.marcofbb.com.ar/upload-de-imagenes/

Seria seguro? no subiran archivos php o shells al sistema?

Codigo:

Código
  1. <?php
  2. // V2
  3. $varrand = substr(md5(uniqid(rand())),0,10);
  4. $varallw = array("image/bmp","image/gif","image/jpeg","image/pjpeg","image/png","image/x-png");
  5. $tips = array("bmp","gif","jpeg","png","jpg");
  6. $varpath = "http://samples.unijimpe.net/imagehosting.php?image=";
  7. $varstat = "";
  8.  
  9. if ($_POST["action"] == "upload") {
  10. if (is_uploaded_file($_FILES["imagen"]["tmp_name"])) {
  11. $varname = $_FILES["imagen"]['name'];
  12. $vartemp = $_FILES['imagen']['tmp_name'];
  13. $vartype = $_FILES['imagen']['type'];
  14.  
  15. if (in_array($vartype, $varallw) && $varname != "") {
  16. $arrname = explode(".", $varname);
  17. $i = strtolower(end($arrname));
  18. if(in_array($i, $tips)){
  19. $varname = $varrand.".".$i;
  20. if (copy($vartemp, "tmp/".$varname)) {
  21. $varpath = $varpath.$varname;
  22. $varstat = "ok";
  23. } else {
  24. $varstat = "Error al subir el archivo";
  25. }
  26. } else { $varstat = "Archivo no valido"; }
  27. } else {
  28. $varstat = "Archivo no valido";
  29. }
  30. }
  31. }
  32. ?>
  33. <html>
  34. <head>
  35. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  36. <title>PHP ImageHosting - unijimpe</title>
  37. <link href="cssupload.css" rel="stylesheet" type="text/css" />
  38. </head>
  39. <body>
  40. <table width="420" border="0" align="center" cellpadding="0" cellspacing="0">
  41.  <tr>
  42.    <td width="413" height="40" class="titulo">PHP ImageHosting - unijimpe - <a href="http://www.entra-ya.com.ar/">entra-ya</a> </td>
  43.  </tr>
  44.  <tr>
  45.    <td class="text">Aloja gratuitamente tus imagenes con PHP ImageHosting:</td>
  46.  </tr>
  47.  <tr>
  48.  <form action="imagehosting.php" method="post" enctype="multipart/form-data">
  49.    <td height="50" valign="top" class="text">
  50.      <input name="imagen" type="file" class="casilla" id="imagen" size="35" />
  51.      <input name="enviar" type="submit" class="boton" id="enviar" value="Upload Image" />
  52.  <input name="action" type="hidden" value="upload" />  </td>
  53. </form>
  54.  </tr>
  55.  <?php if ($varstat == "ok") { ?>
  56.  <tr>
  57.    <td class="textinf"><strong>Confirmaci&oacute;n:</strong><br>
  58. Archivo publicado satisfactoriamente. Puedes utilizar las siguientes opciones para enlazarlo:<br>
  59. <strong>Enlace HTML:</strong> <br>
  60. <input name='txt1' type='text' value='<a href="<?php echo $varpath; ?>"><img src="<?php echo $varpath; ?>" border="0" /></a>' size='60'>
  61. <br>
  62. <strong>Enlace Directo: </strong><br>
  63. <input name='txt2' type='text' value='<?php echo $varpath; ?>' size='60'></td>
  64.  </tr>
  65.  <?php } else { ?>
  66.  <?php if ($varstat != "") { ?>
  67.  <tr>
  68. <td class="textinf"><strong>Error:</strong><br>
  69.    <?php echo $varstat; ?>&nbsp;</td>
  70.  </tr>
  71.  <?php } ?>
  72.  <?php } ?>
  73. </table>
  74. <?php if ($varstat == "ok") { ?>
  75. <p align="center"><img src="tmp/<?php echo $varname; ?>"></p>
  76. <?php } ?>
  77. <?php if ($_GET['image'] != "") { ?>
  78. <p align="center"><img src="tmp/<?php echo $_GET['image']; ?>"></p>
  79. <?php } ?>
  80. </body>
  81. </html>

Saludos.
« Última modificación: 30 Octubre 2012, 18:00 pm por asasasaq » En línea

[u]nsigned


Desconectado Desconectado

Mensajes: 2.397

JS/Node developer


Ver Perfil WWW
Re: Este upload es seguro?
« Respuesta #3 en: 31 Octubre 2012, 13:06 pm »

No usa getimagesize, por lo estas en lo mismo, solo revisa la extension del archivo, asi que es facil colarle una shell. Pero es no tan dificil imaginar como implementarle eso al mismo, unas 4 o 5 lineas de codigo.... :silbar:
En línea

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!
gowend

Desconectado Desconectado

Mensajes: 46



Ver Perfil WWW
Re: Este upload es seguro?
« Respuesta #4 en: 20 Noviembre 2012, 20:47 pm »

Prueba con estas lineas de código, sabiendo que ya esta abierta una conexión a mysql:

Código:
<?php
// Ya iniciada la conexion, recibimos datos de un form
$id = $_POST['id'];

$nombres = $_FILES['foto']['name'];

$ruta_temp = $_FILES['foto']['tmp_name'];

$rutaN = "img/".$nombres;

$array_ext = array("png","gif","jpg","GIF","JPG","Gif","Jpg","Png","PNG");

$ext = pathinfo($nombres);

if (is_uploaded_file($ruta_temp))
{
        if (array_search($ext['extension'],$array_ext))
        {
                copy($ruta_temp,$rutaN);
               
                mysql_query("UPDATE registro SET imagen= '$rutaN' WHERE id ='$id'; ");

        }else{

                echo "Solo formato de imagenes: Gif, Jpg, Png";
               
                print_r ($ext['extension']);

        }
 }else{
        die ("Escoja una imagen");
 }
?>
En línea

Gowend132 El conocimiento es LIBRE!!!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Es este código seguro? « 1 2 3 »
PHP
NewLog 20 7,992 Último mensaje 30 Enero 2008, 04:00 am
por Carxl
¿Qué tan seguro es este login que he planteado en un sitio web en ASP.Net?
Desarrollo Web
TwisteD420 4 4,894 Último mensaje 4 Abril 2012, 02:42 am
por TwisteD420
Upload de imagenes seguro PHP
Nivel Web
RicRed 2 4,424 Último mensaje 19 Mayo 2012, 23:33 pm
por WarGhost
Alguien entra en mi PC (seguro seguro) me pueden ayudar?
Seguridad
BanKFull76 3 5,520 Último mensaje 9 Julio 2012, 16:15 pm
por Saberuneko
Hola, este método es seguro?
Dudas Generales
Terminator5 4 2,467 Último mensaje 8 Marzo 2023, 16:38 pm
por Falo Zipo Pixote
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines