Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thiago Dias_132983

Como proteger um diretorio (pasta) a acesso direto com php ?

Recommended Posts

eu tenho uma pasta chamada CLASSES dentro dela há algumas classes que são chamadas por um autoload, dentro de cada uma eu coloquei isso :

 

if(basename($_SERVER['PHP_SELF']) == basename(__FILE__)):
		echo utf8_decode("Você não tem permissão para acessar este arquivo");
		exit;
	endif; 

 

sendo que não existe nenhum arquivo index.php na PASTA CLASSES , como posso proteger a pasta?

 

pensei em criar um arquivo chamado index.php e colocar o codigo acima

 

qual a melhor forma ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A melhor opção e deixar essa pasta fora do diretório htdocs/www. Assim ele fica inacessível pela web, mas acessível aos arquivos PHP que estão dentro de htdocs/www.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A melhor opção e deixar essa pasta fora do diretório htdocs/www. Assim ele fica inacessível pela web, mas acessível aos arquivos PHP que estão dentro de htdocs/www.

 

não entendi muito bem , Como seria isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi muito bem , Como seria isso ?

 

 

O diretório raiz do seu site se chama 'htdocs'/'htmldocs'/'www' ou algo assim, certo? Então é só deixar o diretório de 'classes' no mesmo nível dele.

 

usuario/
- classes/
- - Exemplo.php (vamos supor que nesse arquivo tenha uma classe chamada Exemplo)
- htdocs/
- - index.php

 

Depois é só adicionar esse diretório ao seu include_path no arquivo htdocs/index.php

set_include_path( get_include_path() . PATH_SEPARATOR . realpath('../classes'));

/* Quando se coloca um caminho de uma diretório no include_path, você pode chamar um arquivo desse diretório de qualquer lugar como se eles estivessem no mesmo diretório do arquivo que está fazendo a chamada */

require "Exemplo.php";
$exemplo = new Exemplo;

 

 

Assim o diretório 'classes' fica fora do alcance dos visitantes do seu site e ao mesmo tempo seus scripts tem total acesso a ele. Simples assim.

 

-

 

Há uma outra opção, mas não tão boa: usar um .htaccess no diretório, bloqueando todos os acesso:

order deny, allow
deny from all

 

 

Desvantagens:

- Gera uma mensagem de erro forbidden (proibido) quando alguém tenta acessar diretamente o conteúdo desse diretório.

- É menos elegante...

Compartilhar este post


Link para o post
Compartilhar em outros sites

utilizar um index é uma maneira simples. Não totalmente segura.

 

Caso quiser realmente bloquear, utilize um .htaccess

 

Fiz um exemplo prático para demonstrar:

/index.php

<?php
include('pasta/teste.php');

 

/pasta/teste.php

<?php
echo 'entrou';

 

/pasta/.htaccess

Options -Indexes //Indica que não aparecerá a lista de arquivos existentes na página

Order Deny,Allow //Define a ordem de "prioridade" entre deny e allow. Nesse caso, qualquer regra ambígua, dará prioridade para Deny
Deny from All //Bloqueio qualquer tipo de acesso externo.

 

Teste você mesmo, tente acessar a pasta.

 

Você verá que o arquivo index.php consegue acessar o arquivo teste.php, através do include. Entretanto, você não consegue acessar diretamente o arquivo teste.php.

 

Caso você precise de acesso externo, e não quer mostrar a árvore de arquivos, deixe somente a primeira linha.

 

Desvantagens:

- Gera uma mensagem de erro forbidden

 

Essa mensagem pode ser alterada.

 

Basta adicionar essa linha:

ErrorDocument 403 /arquivoDeErro.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Thiago, eu recomendo que você só use a solução via .htaccess se quiser permitir que os arquivos das classes possam ser acessados remotamente, mas apenas para alguns IPs:

order deny, allow
# Bloqueia todos
deny from all
# Exceto estes:
allow from ENDEREÇO IP 1
allow from ENDEREÇO IP 2

 

Alterando o 'ENDEREÇO IP 1' e 'ENDEREÇO IP 1' pelos números de IPs que você deseja permitir.

 

Mas se você quiser impedir os acessos diretos totalmente, a opção melhor opção é colocar esse diretório forma do diretório raiz www, como exemplifiquei acima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera vocês me ajudaram bastante a ter uma noção da "coisa" , Muito Obrigado !

 

Antes eu havia criado um script simples foi este :

 

<?php 
Header("Location: ../");
exit;
?>

 

vou fazer algo mais complexo , mesmo assim ele está muito inseguro ? :s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera vocês me ajudaram bastante a ter uma noção da "coisa" , Muito Obrigado !

 

Antes eu havia criado um script simples foi este :

 

<?php 
Header("Location: ../");
exit;
?>

 

vou fazer algo mais complexo , mesmo assim ele está muito inseguro ? :s

 

Está, pois se eu souber o nome de um desses arquivos, eu consigo acessá-lo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas tem uma coisa, se são classes, e mesmo que o camarada acerte o nome da sua classe .php como ele vai ler/copiar/alterar ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.