From 638a2edb74ba8c8ff311f51d7ccc4c959c11504f Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Thu, 18 Aug 2016 19:53:54 -0300 Subject: [PATCH] Inclusão de validação do nome de arquivos e pastas no navegador de diretórios --- admin/dicionario/editormapfile.js | 2 +- classesphp/classe_mapa.php | 2 ++ classesphp/mapa_controle.php | 40 +++++++++++++++++++++++++++++++++------- ferramentas/navegarquivos/exec.php | 43 +++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 77 insertions(+), 10 deletions(-) diff --git a/admin/dicionario/editormapfile.js b/admin/dicionario/editormapfile.js index f73e082..f4a55dd 100755 --- a/admin/dicionario/editormapfile.js +++ b/admin/dicionario/editormapfile.js @@ -467,7 +467,7 @@ i3GEOadmin.editormapfile.dicionario = { es : "" } ], 'dataTitulo' : [ { - pt : "Data - SQL ou caminho do arquivo com os dados", + pt : "Data - SQL ou caminho do arquivo com os dados. No caso de shapefile, verifique se o caminho está correto ao usar o navegador de arquivos", en : "", es : "" } ], diff --git a/classesphp/classe_mapa.php b/classesphp/classe_mapa.php index a7b6d32..a3cd02f 100755 --- a/classesphp/classe_mapa.php +++ b/classesphp/classe_mapa.php @@ -2031,6 +2031,8 @@ class Mapa { if (file_exists($arq)) { + $arq = str_replace(".shp","",$arq); + $arq = str_replace(".","",$arq).".shp"; $s = ms_newShapefileObj($arq,-1); /* if($this->v == 6) diff --git a/classesphp/mapa_controle.php b/classesphp/mapa_controle.php index 8683c1f..eee0e8e 100755 --- a/classesphp/mapa_controle.php +++ b/classesphp/mapa_controle.php @@ -589,14 +589,40 @@ switch (strtoupper($funcao)) include_once("classe_mapa.php"); copiaSeguranca($map_file); $m = new Mapa($map_file); - $retorno = $m->adicionaTemaSHP($_pg["arq"]); - if ($retorno != "erro") - { - $m->salva();$_SESSION["contadorsalva"]++;redesenhaMapa(); + //valida o caminho do arquivo shapefile + $nome = explode("/",$_pg["arq"]); + $nome = $nome[0]; + if(empty($nome)){ + $retorno = "erro"; } - else - { - $retorno = "erro.Nenhum dado espacializado foi encontrado."; + else{ + //remove o nome do caminho + $novo = explode("/",$_pg["arq"]); + $novo[0] = ""; + $_pg["arq"] = implode("/",$novo); + // + include(dirname(__FILE__)."/../ms_configura.php"); + $d = $navegadoresLocais[0]["drives"]; + $p = ""; + foreach($d as $n){ + if($n["nome"] == $nome){ + $p = $n["caminho"]; + } + } + if($p != "" && file_exists($p)){ + + $retorno = $m->adicionaTemaSHP($p."/".$_pg["arq"]); + if ($retorno != "erro") { + $m->salva();$_SESSION["contadorsalva"]++;redesenhaMapa(); + } + else{ + $retorno = "erro.Nenhum dado espacializado foi encontrado."; + } + + } + else{ + $retorno = "erro"; + } } break; /* diff --git a/ferramentas/navegarquivos/exec.php b/ferramentas/navegarquivos/exec.php index cb61a01..a1ce53a 100755 --- a/ferramentas/navegarquivos/exec.php +++ b/ferramentas/navegarquivos/exec.php @@ -6,6 +6,8 @@ $funcoesEdicao = array( ); if(in_array(strtoupper($funcao),$funcoesEdicao)){ if(verificaOperacaoSessao("admin/html/editormapfile") == false){ + retornaJSON("Vc nao pode realizar essa operacao.");exit; + //se nao estiver logado permite acesso a pasta i3geo/aplicmap/dados //localiza a pasta aplicmap/dados $d = dirname(__FILE__); //precisa descer ainda @@ -36,7 +38,15 @@ A lista de drives é definida no ms_configura e permite que o usuár */ case "LISTADRIVES": include(dirname(__FILE__)."/../ms_configura.php"); - $retorno = $navegadoresLocais[0]; + //pega apenas os nomes para nao expor o caminho completo + $d = $navegadoresLocais[0]["drives"]; + $resultado = array(); + //a primeira string sera o nome definido em drives + foreach($d as $n){ + $n["caminho"] = $n["nome"]; + $resultado[] = $n; + } + $retorno = array("drives"=>$resultado); break; /* Valor: LISTAARQUIVOS* @@ -44,7 +54,36 @@ Valor: LISTAARQUIVOS* Lista os arquivos de um diretório. */ case "LISTAARQUIVOS": - $retorno = listaArquivos($diretorio,true); + //pega o caminho + //nome + $nome = explode("/",$_GET["diretorio"]); + $nome = $nome[0]; + if(empty($nome)){ + $retorno = "erro"; + } + else{ + //remove o nome do caminho + $novo = explode("/",$_GET["diretorio"]); + $novo[0] = ""; + $_GET["diretorio"] = implode("/",$novo); + // + include(dirname(__FILE__)."/../../ms_configura.php"); + $d = $navegadoresLocais[0]["drives"]; + $p = ""; + foreach($d as $n){ + if($n["nome"] == $nome){ + $p = $n["caminho"]; + } + } + if($p != "" && file_exists($p)){ + $path = $p."/".$_GET["diretorio"]; + $path = str_replace(".","",$path); + $retorno = listaArquivos($path,true); + } + else{ + $retorno = "erro"; + } + } break; } cpjson($retorno); -- libgit2 0.21.2