Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
olá,
Estou com problema de invasão no site, o site tem um sistema administrativo que faz upload de imagens, e essas imagens estão sendo gravadas numa pasta uploads dentro do FTP, e sempre está tendo arquivos maliciosos nessa pasta.
Não sei como proteger essa pasta, eu ja revisei todo o código, ocultei a URL das imagens, para não mostrar o caminho inteiro da imagem, coloquei .htaccess para ter url amigáveis e ainda está sendo atacado.
Alguém pode me auxiliar ?!!
Obrigada!!
no momento do upload há alguma validação do tipo de arquivo permitido?
hinom,
Para o upload das fotos estou fazendo assim....
<?php
require "verifica.php";
?>
<?php
include '../db_connection/config.php';
include '../db_connection/opendb.php';
?>
<script type="text/javascript">
function Validar(){
if(document.upload_file.categoria.value == "-1"){
alert("Selecione uma categoria");
return false;
}
else{ return true;}
}
</script>
<h2>Insira Novas Fotos e suas Categorias</h2>
<p> </p>
<form name="upload_file" method="post" action="" enctype="multipart/form-data" onsubmit="return Validar();" >
<select name="categoria">
<option value="-1">Selecione uma categoria</option>
<?php
$res = mysql_query("SELECT * FROM categoria");
while($registro = mysql_fetch_array($res))
{
$cod = $registro[0];
$nome = $registro[1];
echo "<option value=\"$cod\">$nome</option>\n";
}
?>
</select>
<p> </p>
<input type="file" name="img[]" class="multi" maxlength="1" accept="jpeg|jpg|png|gif"><br/>
<input type="submit" name="enviar" value="Enviar">
</form>
<?php
if(isset($_POST['enviar'])){
$categoria = mysql_escape_string($_POST['categoria']);
$pasta = 'uploads/';
foreach($_FILES["img"]["error"] as $key => $error){
if($error == UPLOAD_ERR_OK){
$tmp_name = $_FILES["img"]["tmp_name"][$key];
$nome = date('m.d.y') .'-'. $_FILES["img"]["name"][$key];
$uploadfile = $pasta.basename($nome);
if(move_uploaded_file($tmp_name, $uploadfile)){
// Chama o arquivo com a classe WideImage
require('wideimage/lib/WideImage.php');
// Carrega a imagem a ser manipulada
$image = WideImage::load($uploadfile);
// Redimensiona a imagem
$image = $image->resize(400, 300);
// Salva a imagem em um arquivo (novo ou não)
$image->saveToFile($uploadfile);
echo "O arquivo " .$nome. " foi enviado com sucesso!<br>";
$inserir = mysql_query("INSERT INTO imagens (foto,id_categoria) VALUES ( '$nome','$categoria')");
}else{
echo "Erro ao enviar o arquivo " .$nome. " !Por favor tente novamente!";
}
}
}
}
?>
e para visualizar as imagens assim:
<?php
//Expressão regular pra verificar se termina .(nome extensão)
$regex = '/\.(jpg|jpeg|png|gif|bmp)$/i';
//define a pasta onde estão as imagens
$dir = "dashboard/uploads/";
$errors = '';
//define o mime-types permitidos, de acordo com getimagesize
$mimeTypes = array('1' => 'image/gif', '2' => 'image/jpeg', '3' => 'image/png', '6' => 'image/jpg');
//Verifica se o valor existe, e se tem a extensão
if(isset($_GET['img']) && preg_match($regex, $_GET['img'])){
//atribui a variavel $img o caminho completo da imagem + imagem
$img = $dir . $_GET['img'];
//Verifica se o arquivo existe
if(file_exists($img)){
//resgata os valores do getimagesize
list($width, $height, $type) = getimagesize($img);
//Verifica se o mimetype existe
if(isset($mimeTypes[$type])){
//Resgat o mime-type
$mime = $mimeTypes[$type];
//informa o tipo da imagem
header("Content-type: {$mime}");
//imprime a imagem
echo file_get_contents($img);
exit;
}else{
$errors = 'MimeType não reconhecido :'.$type;
}
}else{
$errors = 'Imagem não existe no diretório';
}
}else{
$errors = 'valor na variavel $_GET["img"] inexistente, ou não existe as extensões : .jpg,.gif,.bmp,.png';
}
echo $errors;
?>
>
no momento do upload há alguma validação do tipo de arquivo permitido?
hinom, para o upload segue o código abaixo
<?php
require "verifica.php";
?>
<?php
include '../db_connection/config.php';
include '../db_connection/opendb.php';
?>
<script type="text/javascript">
function Validar(){
if(document.upload_file.categoria.value == "-1"){
alert("Selecione uma categoria");
return false;
}
else{ return true;}
}
</script>
<h2>Insira Novas Fotos e suas Categorias</h2>
<p> </p>
<form name="upload_file" method="post" action="" enctype="multipart/form-data" onsubmit="return Validar();" >
<select name="categoria">
<option value="-1">Selecione uma categoria</option>
<?php
$res = mysql_query("SELECT * FROM categoria");
while($registro = mysql_fetch_array($res))
{
$cod = $registro[0];
$nome = $registro[1];
echo "<option value=\"$cod\">$nome</option>\n";
}
?>
</select>
<p> </p>
<input type="file" name="img[]" class="multi" maxlength="1" accept="jpeg|jpg|png|gif"><br/>
<input type="submit" name="enviar" value="Enviar">
</form>
<?php
if(isset($_POST['enviar'])){
$categoria = mysql_escape_string($_POST['categoria']);
$pasta = 'uploads/';
foreach($_FILES["img"]["error"] as $key => $error){
if($error == UPLOAD_ERR_OK){
$tmp_name = $_FILES["img"]["tmp_name"][$key];
$nome = date('m.d.y') .'-'. $_FILES["img"]["name"][$key];
$uploadfile = $pasta.basename($nome);
if(move_uploaded_file($tmp_name, $uploadfile)){
// Chama o arquivo com a classe WideImage
require('wideimage/lib/WideImage.php');
// Carrega a imagem a ser manipulada
$image = WideImage::load($uploadfile);
// Redimensiona a imagem
$image = $image->resize(400, 300);
// Salva a imagem em um arquivo (novo ou não)
$image->saveToFile($uploadfile);
echo "O arquivo " .$nome. " foi enviado com sucesso!<br>";
$inserir = mysql_query("INSERT INTO imagens (foto,id_categoria) VALUES ( '$nome','$categoria')");
}else{
echo "Erro ao enviar o arquivo " .$nome. " !Por favor tente novamente!";
}
}
}
}
?>
e para visualizar as imagens
<?php
//Expressão regular pra verificar se termina .(nome extensão)
$regex = '/\.(jpg|jpeg|png|gif|bmp)$/i';
//define a pasta onde estão as imagens
$dir = "dashboard/uploads/";
$errors = '';
//define o mime-types permitidos, de acordo com getimagesize
$mimeTypes = array('1' => 'image/gif', '2' => 'image/jpeg', '3' => 'image/png', '6' => 'image/jpg');
//Verifica se o valor existe, e se tem a extensão
if(isset($_GET['img']) && preg_match($regex, $_GET['img'])){
//atribui a variavel $img o caminho completo da imagem + imagem
$img = $dir . $_GET['img'];
//Verifica se o arquivo existe
if(file_exists($img)){
//resgata os valores do getimagesize
list($width, $height, $type) = getimagesize($img);
//Verifica se o mimetype existe
if(isset($mimeTypes[$type])){
//Resgat o mime-type
$mime = $mimeTypes[$type];
//informa o tipo da imagem
header("Content-type: {$mime}");
//imprime a imagem
echo file_get_contents($img);
exit;
}else{
$errors = 'MimeType não reconhecido :'.$type;
}
}else{
$errors = 'Imagem não existe no diretório';
}
}else{
$errors = 'valor na variavel $_GET["img"] inexistente, ou não existe as extensões : .jpg,.gif,.bmp,.png';
}
echo $errors;
?>o ideal eh validar o arquivo no upload e nao na hora de mostrar...como você esta fazendo...
De bem forma bem simples seria assim..
Bom uma ideia e você renomar o arquivo msm!! mata a extenção dele..
E concatena um JPGE no nome do arquivo $nomefile.'.jpg';
arquivo php com extenção de JPG ate onde sei num roda =X
function checkTypeImg(Array $types, $file) {
if (!empty($types) && isset($file))
$types = implode('|', $types);
return preg_match('/^image\/(' . $types . ')$/', $file);
}
// validação dentor do FOR(){}
$valid = checkTypeImg(array('png', 'jpeg', 'jpg'), $_FILES['arquivo']['type'][$key]);// valida os formatos validos!!
if($valid){
if(move_uploaded_file($tmp_name, $uploadfile)){ //;.......//}
}else{
$error[] = 'Imagem '.$nameImg[$key].' Não esta no formato valido'; // trate o erro a sua maneira
unset($valid);
}Qual o formato desses vírus? .oq?
o código de validação está antes de usar move_uploaded_file ?
veja que nesse trecho não há validação alguma
$tmp_name = $_FILES["img"]["tmp_name"][$key];
$nome = date('m.d.y') .'-'. $_FILES["img"]["name"][$key];
$uploadfile = $pasta.basename($nome);
if(move_uploaded_file($tmp_name, $uploadfile)){
o código de validação que postou está sendo chamado em qual momento?
está aqui?
require "verifica.php";
se estiver usando cpanel, proucure por scaamento de virus, e ver se tem um