Foros del Web » Administración de Sistemas » Apache »

Limitar ficheros con una determinada extensión

Estas en el tema de Limitar ficheros con una determinada extensión en el foro de Apache en Foros del Web. Se puede dar alguna orden a través de .htaccess de manera que solo se permitan subir un tipo de determinados ficheros, es decir solamente gráficos ...
  #1 (permalink)  
Antiguo 17/09/2014, 10:04
 
Fecha de Ingreso: marzo-2004
Ubicación: Madrid (España)
Mensajes: 837
Antigüedad: 20 años, 1 mes
Puntos: 9
Limitar ficheros con una determinada extensión

Se puede dar alguna orden a través de .htaccess de manera que solo se permitan subir un tipo de determinados ficheros, es decir solamente gráficos en formato jpg y png?
  #2 (permalink)  
Antiguo 17/09/2014, 13:08
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Limitar ficheros con una determinada extensión

Podrías hacerlo directamente con PHP o algún lenguaje del servidor. Si no, puedes subir los archivos a una carpeta determinada y establecer restricciones más o menos como se muestra aquí.
  #3 (permalink)  
Antiguo 18/09/2014, 10:40
 
Fecha de Ingreso: marzo-2004
Ubicación: Madrid (España)
Mensajes: 837
Antigüedad: 20 años, 1 mes
Puntos: 9
Respuesta: Limitar ficheros con una determinada extensión

Ok funciona bien aparentemente. Sin embargo al incluir otro .htaccess en un directorio puede intereferir con el .htaccess principal?
  #4 (permalink)  
Antiguo 18/09/2014, 11:10
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 13 años, 7 meses
Puntos: 56
Respuesta: Limitar ficheros con una determinada extensión

los .htaccess son heredables y vas desde el directorio raiz como primer archivo.
Las opciones se van sobrescribiendo, pero los grandes problemas son con el mod-rewrite.
puedes usar el htaccess para no dejar obtener ningun archivo que sea distinto a las extensiones que quieres y luego crear un cron o algo parecido que borre todos los archivos no deseados cada cierto tiempo.
Cita:
<Directory /directorio/carpeta/upload>
deny from all
<Files ~ "^\w+\.(gif|jpe?g|png)$">
order deny,allow
allow from all
</Files>
<IfModule mod_php5.c>
php_flag engine off
</IfModule>
</Directory>
Cambia el directorio al que sera aplicado y listo.
Solo te queda borrar los archivos que no te interesan cada x tiempo.
__________________
http://www.roglastudios.es
  #5 (permalink)  
Antiguo 18/09/2014, 12:26
 
Fecha de Ingreso: marzo-2004
Ubicación: Madrid (España)
Mensajes: 837
Antigüedad: 20 años, 1 mes
Puntos: 9
Respuesta: Limitar ficheros con una determinada extensión

He incluido este código y ahora debe haber algun problema. Algunas imagenes se ven y otras no
Código Apache:
Ver original
  1. # secure uploads directory
  2. <Directory /src/images/gohere>
  3. <Files>
  4.     Order Allow,Deny
  5.     Deny from all
  6. </Files>
  7. <FilesMatch "\.(jpg|jpeg|jpe|gif|png|tif|tiff)$">
  8.     Order Deny,Allow
  9.     Allow from all
  10. </FilesMatch>
  11. </Directory>
  #6 (permalink)  
Antiguo 18/09/2014, 15:04
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 13 años, 7 meses
Puntos: 56
Respuesta: Limitar ficheros con una determinada extensión

Cita:
Iniciado por Jhon Silver Ver Mensaje
He incluido este código y ahora debe haber algun problema. Algunas imagenes se ven y otras no
Código Apache:
Ver original
  1. # secure uploads directory
  2. <Directory /src/images/gohere>
  3. <Files>
  4.     Order Allow,Deny
  5.     Deny from all
  6. </Files>
  7. <FilesMatch "\.(jpg|jpeg|jpe|gif|png|tif|tiff)$">
  8.     Order Deny,Allow
  9.     Allow from all
  10. </FilesMatch>
  11. </Directory>
dejalo asi como te digo yo y asi no usas el match.
Código Apache:
Ver original
  1. <Directory /src/images/gohere>
  2.     deny from all
  3.     <Files ~ "^\w+\.(jpg|jpeg|jpe|gif|png|tif|tiff)$">
  4.         order deny,allow
  5.         allow from all
  6.     </Files>
  7.     <IfModule mod_php5.c>
  8.         php_flag engine off
  9.     </IfModule>
  10. </Directory>

Cita:
Como es permitido el uso de expresiones regulares, se puede definir en files las extensiones de archivo permitidas.
__________________
http://www.roglastudios.es
  #7 (permalink)  
Antiguo 22/09/2014, 12:05
 
Fecha de Ingreso: marzo-2004
Ubicación: Madrid (España)
Mensajes: 837
Antigüedad: 20 años, 1 mes
Puntos: 9
Respuesta: Limitar ficheros con una determinada extensión

No hay manera. El script va generando nuevas carpetas segun van los usuarios introduciendo nuevas imagenes. Yo creo que la mejor opcion va a ser a traves de formulario crear condicionales
  #8 (permalink)  
Antiguo 23/09/2014, 07:22
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 13 años, 7 meses
Puntos: 56
Respuesta: Limitar ficheros con una determinada extensión

pon el codigo del script y te digo como modificarlo para que no cree carpetas y acepte los tipos de archivo que quieres
__________________
http://www.roglastudios.es
  #9 (permalink)  
Antiguo 23/09/2014, 13:17
 
Fecha de Ingreso: marzo-2004
Ubicación: Madrid (España)
Mensajes: 837
Antigüedad: 20 años, 1 mes
Puntos: 9
Respuesta: Limitar ficheros con una determinada extensión

Te paso el código de admision del formulario.
El caso es que no tiene ningun tipo de validacion de ficheros ni limite de tamaño.
Desde .htacces he limitado la subida a 2 Mb

# limitar la subida a 2 MB
LimitRequestBody 2000000




Código PHP:
Ver original
  1. <form id="new_item_post" class="fm" method="post" action="<? $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">
  2. <legend></legend>
  3. <div class="row">
  4. <div class="col_lft"><label>Tipo de Anuncio</label></div>
  5. <div class="col_rgt">
  6.       <label class="radio" id="sell"><input class="tipe_ad_" name="type_ad" type="radio" id="type_ad_0" value="1" checked="checked" />
  7.     Oferta / Ventas</label>
  8.     <label class="radio" id="buy"><input class="tipe_ad_" type="radio" name="type_ad" value="2" id="type_ad_1" />
  9.     Demanda / Compras</label>
  10. </div>
  11. </div>
  12. <div class="row">
  13. <div class="col_lft"><label>Categoría</label></div>
  14. <div class="col_rgt"><select name="category" id="category">
  15.     <option value="0">Selecciona</option>
  16.         <?
  17.         $parent=selectSQL("category",$where=array('parent_cat' => -1));
  18.         for($j=0;$j<count($parent);$j++){
  19.         ?>
  20.         <option value="0" disabled="disabled" style="font-weight:600; background:#e8e8e8;"><?=utf8_encode(strtoupper($parent[$j]['name']));?></option>
  21.         <?
  22.             $child=selectSQL("category",$where=array('parent_cat' => $parent[$j]['ID_cat']));
  23.             for($i=0;$i<count($child);$i++){
  24.         ?>
  25.         <option value="<?=$child[$i]['ID_cat'];?>">&nbsp;&nbsp;<?=utf8_encode($child[$i]['name']);?></option>
  26.         <?
  27.             }
  28.         } ?>
  29. </select>
  30. <div class="error_msg hidden" id="error_category">Selecciona una categoría</div>
  31. </div>
  32. </div>
  33. <div class="row">
  34. <div class="col_lft">
  35.   <label>Provincia</label></div>
  36. <div class="col_rgt"><select name="region" size="1" id="region">
  37.       <option value="0">Selecciona</option>
  38.       <?php $cat = selectSQL("region",$arr=array(),"name ASC");
  39.       for($i=0;$i<count($cat);$i++){ ?>
  40.       <option value="<?php echo $cat[$i]['ID_region']; ?>">
  41.       <?php echo utf8_encode($cat[$i]['name']); ?>
  42.       </option>
  43.       <? } ?>
  44. </select>
  45. <div class="error_msg hidden" id="error_region">Selecciona una región</div>
  46. </div>
  47. </div>
  48. <div class="row">
  49. <div class="col_lft">
  50.   <label>Localidad</label></div>
  51. <div class="col_rgt"><select name="city" size="1" id="city">
  52.       <option value="0">Selecciona</option>
  53. </select>
  54. <div class="error_msg hidden" id="error_city">Selecciona una localidad</div>
  55. </div>
  56. </div>
  57. <legend></legend>
  58. <div class="row">
  59. <div class="col_lft"><label>Titulo</label></div>
  60. <div class="col_rgt"><input name="tit" type="text" id="tit" size="60" maxlength="60" /><div class="error_msg hidden" id="error_tit">Escribe un título correcto</div>
  61. </div>
  62. </div>
  63. <div class="row">
  64. <div class="col_lft"><label>Descripción</label></div>
  65. <div class="col_rgt"><textarea name="text" rows="5" id="text" maxlength="1200"></textarea><div class="error_msg hidden" id="error_text">Escriba una descripción para su anuncio</div>
  66. </div>
  67. </div>
  68. <div class="row">
  69. <div class="col_lft"><label>Precio</label></div>
  70. <div class="col_rgt"><input name="precio" type="text" id="precio" size="8" maxlength="9" class="price number" /><span class="legend"><?=COUNTRY_CURRENCY_CODE;?></span></div>
  71. </div>
  72. <legend></legend>
  73. <div class="row">
  74. <div class="col_lft"><label>Foto Principal</label></div>
  75. <div class="col_rgt">
  76. <input name="photo[]" type="file" class="foto" id="photo_1">
  77. </div>
  78. </div>
  79. <div class="row">
  80. <div class="col_lft"><label>Foto</label></div>
  81. <div class="col_rgt">
  82. <input name="photo[]" type="file" class="foto" id="photo_2">
  83. </div>
  84. </div>
  85. <div class="row">
  86. <div class="col_lft"><label>Foto</label></div>
  87. <div class="col_rgt">
  88. <input name="photo[]" type="file" class="foto" id="photo_3">
  89. </div>
  90. </div>
  91. <div class="row">
  92. <div class="col_lft"><label>Foto</label></div>
  93. <div class="col_rgt">
  94. <input name="photo[]" type="file" class="foto" id="photo_4">
  95. </div>
  96. </div>
  97. <div class="row">
  98. <div class="col_lft"><label>Foto</label></div>
  99. <div class="col_rgt">
  100. <input name="photo[]" type="file" class="foto" id="photo_5">
  101. </div>
  102. </div>
  103. <legend></legend>
  104. <div class="row">
  105. <div class="col_lft"><label>Tu nombre</label></div>
  106. <div class="col_rgt"><input name="name" type="text" id="name" size="30" maxlength="25" /><div class="error_msg hidden" id="error_name">Debes escribir tu nombre</div>
  107. </div>
  108. </div>
  109. <div class="row">
  110. <div class="col_lft"><label>Email</label></div>
  111. <div class="col_rgt"><? if(!isset($_SESSION['data']['mail'])){ ?>
  112. <input name="email" type="text" id="email" size="50" maxlength="50" />
  113. <? }else{ ?>
  114. <input name="email" type="text" id="email" readonly value="<? echo $_SESSION['data']['mail']; ?>"/>
  115. <? }?><div class="error_msg hidden" id="error_email">Indica tu email</div>
  116. </div>
  117. </div>
  118. <div class="row">
  119. <div class="col_lft"><label>Teléfono</label></div>
  120. <div class="col_rgt"><input name="telf" class="number" type="text" id="telf" size="10" maxlength="10" /><div class="error_msg hidden" id="error_telf">El teléfono es incorrecto</div></div>
  121. </div>
  122. <div class="row">
  123. <div class="col_lft"><label>Usuario de Whatsapp</label></div>
  124. <div class="col_rgt"><label class="radio">
  125.     <input name="whats_" type="radio" id="whats_0" value="0" checked="checked" />
  126.     No</label>
  127.   <label class="radio">
  128.     <input type="radio" name="whats_" value="1" id="whats_1" />
  129.     Si</label></div>
  130. </div>
  131. <div class="row">
  132. <div class="col_lft"><label></label></div>
  133. <div class="col_rgt"><label class="radio">
  134.     <input name="terminos" type="checkbox" id="terminos" value="1"/>
  135.     Acepto los <a href="terminos-y-condiciones-de-uso" target="_blank">términos y condiciones de uso</a></label><div class="error_msg hidden" id="error_terminos">Debes aceptar los términos</div>
  136. </div>
  137. </div>
  138. <div class="row">
  139. <input type="button" class="button" id="butPub" value="Publicar Anuncio"/>
  140. </div>
  141. </form>
  #10 (permalink)  
Antiguo 23/09/2014, 14:44
 
Fecha de Ingreso: marzo-2004
Ubicación: Madrid (España)
Mensajes: 837
Antigüedad: 20 años, 1 mes
Puntos: 9
Respuesta: Limitar ficheros con una determinada extensión

He encontrado este tutorial de validar el formulario http://www.dinvaders.com/como-subir-...-forma-segura/
Yo creo que va a ser la mejor opcion
  #11 (permalink)  
Antiguo 24/09/2014, 05:12
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 13 años, 7 meses
Puntos: 56
Respuesta: Limitar ficheros con una determinada extensión

Jhon cuando me refiero a tu script, deberias de buscar el archivo que procesa las peticiones post que hace el formulario.

Sin esa parte no se como procesas las variables post ni los archivos.

Puedes buscar algo como $_FILES y poner el codigo del script.

Cita:
De todas formas mirate estos apuntes de la web oficial de php
__________________
http://www.roglastudios.es
  #12 (permalink)  
Antiguo 25/09/2014, 14:58
 
Fecha de Ingreso: marzo-2004
Ubicación: Madrid (España)
Mensajes: 837
Antigüedad: 20 años, 1 mes
Puntos: 9
Respuesta: Limitar ficheros con una determinada extensión

Cita:
Iniciado por Dalam Ver Mensaje
Jhon cuando me refiero a tu script, deberias de buscar el archivo que procesa las peticiones post que hace el formulario.

Sin esa parte no se como procesas las variables post ni los archivos.

Puedes buscar algo como $_FILES y poner el codigo del script.
Código PHP:
Ver original
  1. if(isset($_FILES['photo'])){
  2.                 $tot = count($_FILES['photo']['name']);
  3.                 for($i=0; $i<$tot; $i++){
  4.                     $resultado=uploadImage($_FILES['photo'],IMG_ADS,$i,false);
  5.                     if($resultado!==false) insertSQL("images",$data=array('ID_ad'=>$last_ad[0]['ID_ad'],'name_image'=>$resultado));
  6.                 }
  #13 (permalink)  
Antiguo 26/09/2014, 20:42
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 13 años, 7 meses
Puntos: 56
Respuesta: Limitar ficheros con una determinada extensión

con 6 lineas es imposible que nadie te pueda ayudar.
Me doy por vencido.
Alla tu con tu problema.
Que tengas suerte
__________________
http://www.roglastudios.es

Etiquetas: ficheros, htaccess, limitar
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:14.