Tornar o arquivo php acessível somente a partir de tarefas agendadas

1

Eu tenho vários arquivos php que são destinados a executar apenas a partir da tarefa agendada. Eu não quero que ninguém tenha acesso a esses arquivos, digitando o URL no navegador ou de alguma outra forma ... Existe uma maneira de tornar este arquivo acessível apenas para tarefas agendadas? Eu uso o painel de controle do plesk ...

    
por Levani 09.05.2011 / 11:42

3 respostas

1

Você deseja criar um arquivo .htaccess com algumas regras para limitar o acesso a esses arquivos. Isso afetará o Apache quando ele for servir os arquivos via http, mas não afetará o servidor local e coisas como executar o código php para acessar os arquivos.

A documentação do Apache tem detalhes para o bloco de arquivos aqui e o negar a diretiva aqui . O Anthonysomerset me bateu em um exemplo em seu resposta.

    
por 09.05.2011 / 12:06
1

Se a sua tarefa agendada usar a linha de comando php, você poderá usar o htaccess para proibir o acesso ao diretório em que o arquivo php está (ou o próprio arquivo php).

Um bloco de htaccess será semelhante a este:

<Files yourphpfile.php>
    order allow,deny
    deny from all
</Files>

Basta colocar isso em um arquivo .htaccess no diretório com seu arquivo php.

    
por 09.05.2011 / 12:05
1

Você pode simplesmente colocar o (s) arquivo (s) em questão fora do DocRoot (por exemplo, em /home/yourusername/cronscripts em vez de /home/yourusername/public_html/cronscripts ). Não há como o seu servidor Web acessar os arquivos * .

.htaccess também é uma abordagem comum e tem a vantagem sobre a primeira opção de trabalhar, mesmo se você não estiver usando PHP de linha de comando para acionar o trabalho. Normalmente, você usaria as instruções Allow e Deny para restringir quais endereços IP de origem podem alcançar um determinado código.

Como opção de último recurso, ou se você precisar acessar o script de vários locais ou locais com endereços IP variáveis, considere usar um segredo compartilhado, por meio de código como:

if ( !isset($_GET['secretpass'])
  || $_GET['secretpass'] != 'hmAPcrkqjDhMkJw' )
{
    //Try to be fancy ("HTTP" response is for mod_php, "Status:" is for FastCGI)
    header("HTTP/1.1 404 Not Found");
    header( "Status: 404 File Not Found" );
    exit(0);

    //Or, if you'd rather, you can just:
    die( "Unauthorized access." );
}

Então, quando você chama o script, só você sabe o parâmetro correto para colocar no fim ( link ) .

* : A menos que você configure explicitamente um script separado ou um symlink para fazer isso, é claro, mas agora estamos apenas sendo pedantes.

    
por 09.05.2011 / 12:18