Ir para conteúdo

POWERED BY:

Arquivado

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

Alaerte Gabriel

Protegendo o arquivos php contra acesso direto.

Recommended Posts

Opa.. galera.. então ficaria:

<?php
	$pagina = __FILE__; //constante para pegar o nome do arquivo
	//echo $pagina; // C:\Apache2.2\htdocs\teste.php
	
	$p = explode('\\', $pagina); // por causa do que foi retornado

	$arq = $p[count($p)-1]; //pegando a última posição do array, que é então o nome do arquivo
	if( basename($_SERVER["PHP_SELF"]) == $arq )
	{
		exit( Header('Location: index.php') );

	}
?>
Não deve aparecer oque está aqui
? ainda não mandei pra um host, mas localmente funcionou..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala pessoal tudo bem?

De fato a segurança é as vezes negligenciada ou até mesmo esquecida por parte de pessoas que na verdade não conhecem muito bem ou passam despercebidas pela mente fervendo de variáveis e etc.

Como já tinha me deparado com o problema do aceso direto aos arquivos que contém as configurações e informações do banco, procurei e achei este tópico.

Mas (...tinha que ser principiante né! rsrsrs) tentei dos 3 jeitos explicados aqui como segue:

1° com o seguinte código:

$pagina="conexao.php"; //o nome da minha página que contem os dados de conexao.
if(basename($_SERVER["PHP_SELF"])=='$pagina'){
die("<script>alert('Sem permissao de acesso !')</script>\n<script>window.location=('index.html')</script>");
}
Resultado: Bloqueou o acesso direto (via browser) mas bloqueou a página index.html (que contém o formulário) também.

 

2° com o seguinte código:

if (eregi("conexao.php", $_SERVER['SCRIPT_NAME'])){
die ("<script>alert('Sem permissao de acesso !')</script>");
}
Resultado: Tanto no acesso via browser quanto via formulário.html resulta em uma página com uns caracteres estranhos.

 

3° com o seguinte código:

$pagina = __FILE__;
$p = explode('\\', $pagina);
$arq = $p[count($p)-1];
if( basename($_SERVER["PHP_SELF"]) == $arq )
{
	exit( Header('Location: index.html') );

}
Resultado: Nenhum, consigo acessar direta e indiretamente!

 

Ou seja, alguém pode jogar uma bóia para esse humilde náufrago?

Compartilhar este post


Link para o post
Compartilhar em outros sites

muito simples fazer isto, coloque uma variável qualquer no index.php com o valor TRUE e depois em todas as páginas secundárias verifique se a variável = true, se não for utilize o die(); ou exit para sair do script...

 

index.php

$PRINCIPAL = true;

 

 

// continua index

if ($principal != true)

{

die();

}

 

// continuação da pag sec.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E como eu faria pessoal pra proteger um diretório, pq se eu tenho um dir com vários aquivos php, se não tiver um index na pasta, os mesmo são listados e podem ser baixados facilmente, como eu poderia bloquear o acesso a esse diretório sem ficar colocando index em cada um que eu precise bloquear?

Já tentei usando o .htaccess mas ele bloquei até se você precisar do arquivo em outros páginas.

 

Att

 

Luis Carlos

Compartilhar este post


Link para o post
Compartilhar em outros sites

.htaccess é recursivo. Ele afeta o direório atual e todos os sub-diretórios. Acho a melhor orpção.

 

VocÊ pode usar uma destas opções no .htaccess:

IndexIgnore *

ou

Options -Indexes

Outra forma é retirar a permissão de leitura do diretório (chmod via FTP ou em linha de comando - via ssh)

Compartilhar este post


Link para o post
Compartilhar em outros sites

simplificando o script do post #21

<?php
	if ( basename($_SERVER['SCRIPT_FILENAME'])== basename(__FILE__) )
		exit( Header('Location: index.html') );
alguém vê algum problema nessa tática ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola estou comesando agora a pegar as informações sobre segurança de sites, pelo que vejo esse codigo ele impede que acessem uma pagina qualquer do site, por exemplo no arquivo de config, onde tem a chave de aceso ao bano de dados, e com isso conseguem ver essas informações e editarem o banco de dados, por exemplo em sites de jogos os sites podem sofrer SQL injection, esse codigo também bloqueia esse tipo de ataque por meio desse metodo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Carioca, boa noite.

 

Injeção de SQL (SQL Injection) é uma coisa, proteção de página é outra.

 

O amigo mal intencionado pode simplesmente enviar uma requisição de SQL Injection ao seu banco de dados através de uma página de login, lógico que você não vai bloquear uma página onde se faz login.

 

O que você pode fazer é criar função para se proteger de tal ataque.

 

Agora a proteção de acesso direto às páginas é outra coisa, como o nome já diz, impede o usuário de acessar a página diretamente digitando o endereço na URL. No seu caso de senha no arquivo config, sendo ele PHP e não tendo um "echo" ou um "print" não é possível visualizar sua senha, mais é sempre bom atribuir uma segurança ao seu site/página, com isso já intimida o usuário mal intencionado, imagina ele tentar acessar sua página diretamente, tudo bem, a página aparece em branco sem qualquer informação, porém o usuário já desconfia que o site/página, tem possíveis falhas de segurança, então um aviso e um redirecionamento caso o acesso seja direto cai muito bem ;)

 

Abraço.

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.