Pergunta

Eu tenho um script PHP que é executado como um programa CGI e HTTP Authenticate cabeçalho é devorado e cuspir. Então, eu gostaria de implementar algum tipo de autenticação baseada em formulário. Como uma restrição adicional, não há banco de dados de forma que nenhum dados da sessão podem ser armazenados.

Eu sou muito aberto a ter um nome de usuário mestre e senha. Eu só preciso para proteger a aplicação de um intruso que não sabe essas credenciais.

Assim como você implementar isso?

Cookies?

Eu poderia apresentar o formulário e se valida, posso enviar de volta um cookie que é um hash do endereço de IP vêm código secreto. Então eu posso impedir que páginas de prestar a menos que a coisa decifra corretamente. Mas eu não tenho nenhuma idéia de como implementar isso em PHP.

Foi útil?

Solução

Algumas maneiras que você poderia fazer isso.

  1. htaccess - ter o seu punho webserver garantir as páginas em questão (não exatamente forma cgi baseado embora).
  2. usar cookies e algum tipo de algoritmo de hash (md5 é bom o suficiente) para armazenar as senhas em um arquivo simples, onde cada linha no arquivo é usuário: passwordhash. Certifique-se de sal seus hashes para segurança extra vs tabelas do arco-íris. (Este método é um pouco ingênuo ... ser muito cuidado com segurança, se você seguir esse caminho)
  3. usar algo como um banco de dados sqlite apenas para autenticação alça. SQLite é bastante compacto e simples que ainda pode atender às suas necessidades, mesmo se você não quer um grande backend db.

Teoricamente, você também pode armazenar os dados da sessão em um arquivo simples, mesmo se você não pode ter um banco de dados.

Outras dicas

Se você estiver usando autenticação, então você já pode ter um htpasswd arquivo. Se você gostaria de continuar usando esse arquivo, mas mudar para utilizar a autenticação baseada em formulário, em vez de por meio do cabeçalho Authenticate, você pode usar um script PHP para usar as mesmas sessões de arquivo htpasswd e usar para manter o status de autenticação.

Pesquisa A rápida no Google para php htpasswd revela desta página com uma função PHP para verificação credenciais contra um htpasswd. Você pode integrá-lo (supondo que você tem sessões definidas para início automático) 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ê faz, você está limitado pelo nome de usuário e senha a ser conhecido. Se eles sabem disso, eles obter o seu cookie mágico que lhes permite. Você quer impedi-los de ver as páginas, se eles não sabem o segredo, e autorização básica faz isso, é fácil de configurar, e não requer um monte de trabalho de sua parte.

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

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

Boa sorte,:)

... Sobre o sal, adicione o nome de usuário no seu sal de hash irá impedir que alguém que conhece o seu sal e ter acesso ao seu arquivo de senhas para escrever uma tabela de arco-íris e número de crack de senha de seus usuários.

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