Pergunta

Eu tenho um script PHP que roda como um programa CGI e o HTTP Authenticate cabeçalho é comido e cuspido.Então, eu gostaria de implementar algum tipo de autenticação baseada em FORM.Como restrição adicional, não há banco de dados, portanto nenhum dado da sessão pode ser armazenado.

Estou muito aberto a ter um nome de usuário e senha mestres.Só preciso proteger o aplicativo de um intruso que não conheça essas credenciais.

Então, como você implementaria isso?

Biscoitos?

Eu poderia apresentar o formulário e se ele validar, posso enviar de volta um cookie que é um hash do endereço IP com código secreto.Então, posso impedir a renderização das páginas, a menos que a coisa seja descriptografada corretamente.Mas não tenho ideia de como implementar isso em PHP.

Foi útil?

Solução

Algumas maneiras de fazer isso.

  1. htaccess - faça com que seu servidor web proteja as páginas em questão (embora não seja exatamente baseado em formulário cgi).
  2. Use cookies e algum tipo de algoritmo de hash (md5 é bom o suficiente) para armazenar as senhas em um arquivo simples onde cada linha do arquivo é username:passwordhash.Tenha certeza de sal seus hashes para segurança extra versus tabelas arco-íris.(Este método é um pouco ingênuo...ser muito cuidado com a segurança se você seguir esse caminho)
  3. use algo como um sqlite banco de dados apenas para lidar com a autenticação.O SQLite é compacto e simples o suficiente para atender às suas necessidades, mesmo se você não quiser um grande back-end de banco de dados.

Teoricamente, você também poderia armazenar dados de sessão em um arquivo simples, mesmo que não possa ter um banco de dados.

Outras dicas

Se você estiver usando o Authenticate, talvez já tenha um htpasswd arquivo.Se desejar continuar usando esse arquivo, mas passar a usar a autenticação baseada em FORM em vez do cabeçalho Authenticate, você pode usar um script PHP para usar o mesmo arquivo htpasswd e usar sessões para manter o status de autenticação.

Uma rápida pesquisa no Google por php htpasswd revela esta página com uma função PHP para verificar credenciais em um htpasswd.Você poderia integrá-lo (supondo que você tenha sessões configuradas para inicialização automática) com algum código como este:

// At the top of your 'private' page(s):
if($_SESSION['authenticated'] !== TRUE) {
    header('Location: /login.php');
    die();
}

// the target of the POST form from login.php
if(http_authenticate($_POST['username'], $_POST['password']))
    $_SESSION['authenticated'] = TRUE;

Você realmente precisa de um formulário?Não importa o que você faça, você está limitado pelo nome de usuário e senha conhecidos.Se eles souberem disso, receberão o biscoito mágico que permite.Você deseja evitar que eles vejam as páginas se não souberem o segredo, e a autorização básica faz isso, é fácil de configurar e não exige muito trabalho de sua parte.

Você realmente precisa ver o cabeçalho de autorização se o servidor web cuidar do controle de acesso para você?

Além disso, se você estiver fornecendo o aplicativo para uma lista conhecida de pessoas (em vez do público), poderá fornecer acesso baseado em servidor web em outros fatores, como endereço IP de entrada, certificados de cliente e muitas outras coisas que são uma questão de configuração e não de programação.Se você explicou suas restrições de segurança, poderemos oferecer uma solução melhor.

Boa sorte, :)

...Sobre o salt, adicionar o nome de usuário no seu hash salt evitará que alguém que conheça o seu salt e tenha acesso ao seu arquivo de senha escreva uma tabela arco-íris e decifre o número da senha dos seus usuários.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top