Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/04/2020, 17:13
fanatimillo
Usuario no validado
 
Fecha de Ingreso: octubre-2003
Mensajes: 7
Antigüedad: 20 años, 6 meses
Puntos: 0
Seguridad en imagenes

Hola, la verdad que no estoy muy ducho con el tema, y vengo trabajando con un codigo hace ya muchos anos, pero la verdad que estoy teniendo muchos problemas de vulnerabilidad, me estan cada 2 dias ingreando y hackeando el sitio. por lo general encuentro los archivos hack dentro de la carpeta /imgprod que es justamente donde yo subo los archivos de imagenes y pdf de un listado de producto que administro.

voy a tratar de dejar el codigo lo mas sencillo posible, dado que luego repite mucho, pero lo ideal seria que alguien me ayude agregar seguridad sobre lo actual que tengo.

como veran mi gran problema es que hago una subida de archivo... pero este no tiene ningun tipo de seguridad, me podrian ayudar un poco en este principio de codigo para hacerlo mas seguro?
dejo abajo tambien la linea de html del form que contiene el

Código:
if ($HttpVars->TraerPost('envio') != '') { 
	$pathabs1 = "";
	$pathabs2 = "";
	$nombre = $HttpVars->TraerPost('nombre');	

	$sql="SELECT nombre from tbl_productos where nombre = '" . $nombre . "'";
	$result = mysqli_query( $conexion, $sql );
	if($result->num_rows > 0) { 
		$existe = 1;
	}else{	
		$archivo1=$_FILES['imgch']['tmp_name'];
		$nomarchivo1=$_FILES['imgch']['name'];

		if (is_dir( PATHIMAGEN ) == false) {
			mkdir( PATHIMAGEN );
		}

		$directorio = PATHIMAGEN ;
		$archfinal1 = $directorio . $nomarchivo1 ;		
		if (file_exists ($archivo1)){
			$pathabs1 = "" ;
			move_uploaded_file ($archivo1, $archfinal1 ); 
			if (file_exists ($directorio . $nomarchivo1))
			{
				$patharch1 = $directorio . $nomarchivo1 ;
				$pathabs1=str_replace("\\","\\\\",$patharch1);
			}
		}

		
		
		$nombre = $HttpVars->TraerPost('nombre') ;
		$keywords = $HttpVars->TraerPost('keywords') ;
		$chkpubli = $HttpVars->TraerPost('chkpubli') ;
		$destacado = $HttpVars->TraerPost('chkdestacado') ;
		$oferta = $HttpVars->TraerPost('chkoferta') ;
		if ($chkpubli == "") $chkpubli = 0;
		if ($destacado == "") $destacado = 0;
		if ($oferta == "") $oferta = 0;


		$dcorta = $HttpVars->TraerPost('dcorta') ;
		$dlarga = $HttpVars->TraerPost('dlarga') ;
		$tips = $HttpVars->TraerPost('tips') ;
		$dosis = $HttpVars->TraerPost('dosis') ;
		$codigo = $HttpVars->TraerPost('codigo') ;
		$precio = $HttpVars->TraerPost('precio') ;
		$id_cate = $HttpVars->TraerPost('cmbcategoria') ;
		$id_plaga = $HttpVars->TraerPost('cmbplaga') ;
		$id_subcate = $HttpVars->TraerPost('cmbsubcate') ;

		$sql="INSERT into tbl_productos( nombre, keywords, codigo, precio, dcorta, dlarga, tips, dosis, pathch, filech, destacado, oferta, publicado)  VALUES " . 
		                         "('".$nombre."','".$keywords."','".$codigo."',".$precio.",'".$dcorta."','".$dlarga."','".$tips."','".$dosis."','".$pathabs1."','".$nomarchivo1."','".$pathadj1."',".$destacado.",".$oferta.",".$chkpubli.")";
		
		$result = mysqli_query( $conexion, $sql );
		$agregada = 1;		
		
		//grabo las categorias en la tabla relcateprod
		$sql = "SELECT MAX(id_prod) as id_prod FROM tbl_productos";
		$result = mysqli_query( $conexion, $sql );
		$myrow = mysqli_fetch_assoc($result);
		$id_prod = $myrow["id_prod"];

		$idcate=$HttpVars->TraerPost('id_cate');
		while (list ($key,$val) = @each ($idcate)) {
			$sql = "INSERT INTO tbl_relcateprod(id_prod, id_cate) VALUES (".$id_prod.",".intval($val).")";
			$result = mysqli_query( $conexion, $sql );
		} 
		$idplaga=$HttpVars->TraerPost('id_plaga');
		while (list ($key,$val) = @each ($idplaga)) {
			$sql = "INSERT INTO tbl_relplagaprod(id_prod, id_plaga) VALUES (".$id_prod.",".intval($val).")";
			$result = mysqli_query( $conexion, $sql );
		} 
	}
}
y el simple campo input file esta de la siguiente forma

Código HTML:
<div class="form-group">
          <label for="imgch">Imagen del producto</label>
          <input type="file" id="imgch" name="imgch">
        </div>