HTAccess Password-Protection Tricks
Recently a reader asked about how to password-protect a directory for every specified IP while allowing open access to everyone else. No meu artigo, truques de htaccess estúpidos, eu mostro como proteger uma senha para cada IP, exceto o especificado, mas não para o caso inverso. Neste artigo, vou demonstrar esta técnica, juntamente com uma grande variedade de outros truques úteis de proteção de senha, incluindo alguns do meu artigo estúpido htaccess Tricks. Antes de entrar nas coisas suculentas, vamos rever algumas noções básicas da proteção de senha do HTAccess.
HTAccess password protection works in cascading fashion
Before we begin, there are few things you need to know about Apache’s various password-protection directives. Em primeiro lugar, estes truques de proteção de senha se aplicam ao diretório em que eles são colocados. Por exemplo, para proteger a senha de seu site inteiro, você colocaria um desses truques no arquivo de raiz HTAccess acessível à web para o seu site. As diretivas HTAccess são aplicadas na estrutura de diretórios, de forma em cascata, de modo que todas as sub-diretórios também são protegidas.
Você precisa de dois arquivos para a proteção de senha: htaccess e htpasswd
A segunda coisa que você precisa saber é que, na maioria dos casos, existem duas partes para qualquer protecção por palavra-passe implementação: a .
htaccess
arquivo e o .
htpasswd
arquivo. O arquivo .
htaccess
conterá qualquer um dos truques doces fornecidos neste artigo, enquanto o arquivo .
htpasswd
conterá o nome de usuário necessário e uma versão criptografada de sua senha.Existem várias formas de gerar o seu ficheiro .
htpasswd
. Se estiver confortável com o Unix, pode simplesmente executar o comando “htpasswd
“. Por exemplo, se introduzir o seguinte comando irá criar um ficheiro de senha de trabalho no directório /home/path/
:
htpasswd -bc /home/path/.htpasswd username password
colocar o arquivo de senha acima do diretório raiz acessível à web é uma boa medida de segurança. Se você examinar o arquivo depois que ele foi criado, a única coisa que ele vai conter é uma linha que parece semelhante a este:
username:Mx1lbGn.nkP8
em vez de executar um comando Unix, você pode preferir usar um dos 200.000 serviços online fornecendo um gerador de senha on-line.
independentemente de como ou onde decide criar o seu ficheiro.
htpasswd
, mantenha a sua localização em mente para utilização no(s) ficheiro (s) HTAccess associado (s). E sim, você pode usar um arquivo .
htpasswd
para vários arquivos HTAccess colocados em vários diretórios.
saiba que versão do Apache Você está usando
em cada um dos exemplos abaixo, as diretivas são fechadas dentro de um recipiente <IfModule>
. Isto é para evitar que o seu servidor colida se os módulos Apache necessários não estiverem disponíveis ou não estiverem instalados. Geralmente, os módulos necessários estarão presentes, mas a verificação <IfModule>
é uma boa medida de precaução.
ao implementar qualquer um dos métodos de protecção por senha neste artigo, certifique-se que verifica de novo qual a versão do Apache que está a usar antes de começar. Os exemplos neste artigo assumem que você está usando o Apache 1.3 ou 2.0, como os containers <IfModule>
estão verificando a presença do módulo mod_auth
. Assim, se você estiver executando o Apache 2.2 (ou melhor), você vai querer substituir o atual <IfModule>
containers com o seguinte:
<IfModule mod_authn_file.c></IfModule>
Em caso de dúvida, pergunte à sua máquina, instale a extensão Showip Firefox ou procure no painel de controlo do seu servidor. E, se você simplesmente não sabe, não se importa, ou não consegue descobrir, basta remover as etiquetas de abertura e fechamento <IfModule>
do método que você gostaria de usar e chamá-lo de bom. Sem eles, se seu servidor não estiver equipado com o módulo necessário, ele simplesmente retornará uma mensagem de erro de 500, que é facilmente resolvida através da remoção das diretivas de senha.
Você pode personalizar o diálogo sobre o pedido de palavra-passe
A última coisa que você deve saber antes de mergulhar em alguns truques doce é que você pode personalizar a mensagem mostrado no prompt de senha, editando a seguinte linha em cada um dos exemplos neste artigo:
AuthName "Username and password required"
alterando o texto dentro das aspas, você pode usar qualquer idioma que você desejar para o prompt de senha.Então agora, neste ponto da nossa aventura, estamos prontos para mergulhar em alguns suculentos truques de proteção de senha do HTAccess..
protecção básica contra a senha
para proteger a senha do seu site ou de qualquer directório, coloque este código no ficheiro HTAccess associado:
# basic password protection<IfModule mod_auth.c> AuthUserFile /home/path/.htpasswd AuthName "Username and password required" AuthType Basic <Limit GET POST> Require valid-user </Limit></IfModule>
é o mais básico possível. Lembre-se de criar o seu ficheiro de senha e especificar o seu directório na primeira linha. Vamos passar a algo mais interessante.
Abra-o acesso de um IP, senha para proteger todos os outros
Este método é grande durante o desenvolvimento do projecto, onde você deseja abrir o acesso com a capacidade de dar a outros o acesso através de senha:
# password protect excluding specific ip<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Deny,Allow Deny from all Allow from 111.222.333.444 Satisfy Any</IfModule>
colocando o código no arquivo HTAccess do diretório que você gostaria de proteger, apenas o IP especificado será permitido o acesso aberto; todo mundo terá de digitar o nome de usuário e senha.
Open access multiple IPs, password-protect everyone else
The above code may be modified easily to provide multiple IPs open access while deneging everyone else:
# password protect excluding specific ips<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Deny,Allow Deny from all Allow from localhost Allow from 111.222.333.444 Allow from 555.666.777.888 Satisfy Any</IfModule>
pode adicionar quantos IPs forem necessários. Este método é grande durante o desenvolvimento do projeto, onde as seguintes condições serão aplicáveis:
- Projeto de desenvolvimento permanece privado para os visitantes regulares
- Acesso pode ser concedido a clientes (ou qualquer pessoa), fornecendo a senha
- Membros da equipe de desenvolvimento pode ter acesso a seus respectivos máquinas
além de fornecer acesso irrestrito à sua equipe, você pode também querer manter alguns serviços web em mente, incluindo as seguintes directivas (inserir acima do Satisfy Any
directiva):
Allow from validator.w3.org
Allow from jigsaw.w3.org
Allow from google.com
acesso livre para todos com palavra-passe para proteger IPs específicos
Este método é útil para uma variedade de situações, incluindo casos em que você gostaria de bloquear uma lista de IPs maliciosos.
# password protect only for specified ips<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Allow,Deny Allow from all Deny from 111.222.333.444 Deny from 555.666.777.888 Satisfy Any</IfModule>
pode listar quantos endereços IP forem necessários. Você também pode negar a partir de blocos de IP inteiros, truncando o endereço em conformidade. Por exemplo, para bloquear todos os que vêm de um endereço IP começando com ” 999.888
“, acrescentaríamos a Seguinte Directiva:
Deny from 999.888
para mais informações sobre como isso funciona, Veja Esta seção do meu artigo estúpido htaccess Tricks.
Open access for everyone with password-protect for specific CIDR number
Similar to the previous method, here is a technique for requireing a password only from a select CIDR number. Este método é útil para bloquear mega-spammers como RIPE, Optinet, e outros. Se, por exemplo, você se encontrar adicionando linha após linha do Apache Deny
diretivas para endereços começando com os mesmos primeiros números, escolha um deles e tente uma pesquisa do whois. Listado dentro dos resultados do whois será o valor CIDR que representa cada endereço IP associado a essa rede específica. Assim, o bloqueio através do CIDR é uma maneira eficaz de prevenir eloquentemente todas as instâncias IP do ofensor de acessar o seu site. Aqui está um exemplo generalizado para bloqueio por CIDR:
# password protect only for specified CIDR<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Allow,Deny Allow from all Deny from 10.1.0.0/16 Deny from 80.0.0/8 Satisfy Any</IfModule>
senha proteger um único arquivo
eu usei esta técnica inúmeras vezes. Para proteger uma única senha, basta adicionar isto ao seu ficheiro HTAccess:
# password protect single file<IfModule mod_auth.c> <Files "protected.html"> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic </Files></IfModule>
aqui estamos protegendo um arquivo chamado “protected.html
” do access. O arquivo só estará disponível após a submissão do nome de usuário e senha apropriados.
Password protect multiple files
To protect multiple files, the method is very similar, only this time we are using Apache’s FilesMatch
directive. Isto permite-nos listar quantos ficheiros forem necessários:
# password protect mulitple files<IfModule mod_auth.c> <FilesMatch "(protected\.html)|(passwords\.txt)"> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic </FilesMatch></IfModule>
neste exemplo, estamos protegendo password dois arquivos, “protected.html
“e”passwords.txt
“. Para adicionar mais, simplesmente incluir mais instâncias de “|(filename\.ext)
” na lista de arquivos.
senha proteger vários tipos de arquivos
com este método, estamos usando a diretiva Apache FilesMatch
para proteger senha-proteger vários tipos de arquivos. Aqui está um exemplo:
# password protect mulitple file types<IfModule mod_auth.c> <FilesMatch "\.(inc|txt|log|dat|zip|rar)$"> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic </FilesMatch></IfModule>
uma Vez no lugar, esse código irá exigir uma senha para o acesso aos seguintes tipos de arquivo: .inc
, .txt
, .log
, .dat
, .zip
, e .rar
. Personalizar para atender às suas necessidades.
protecção por Senha para tudo, exceto um único arquivo
Obrigado a Brett Batie para esta técnica poderosa para permitir o acesso a um único ficheiro durante a senha-proteger tudo o resto:
# password protect everything except a single file<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic <Files "open-access.html"> Order Deny,Allow Deny from all Allow from 123.456.789 Satisfy any </Files></IfModule>
Quando colocados no diretório raiz ou em qualquer diretório pai, esse código irá proteger por palavra-passe de tudo, exceto o arquivo com o nome “open-access.html
“, que pode estar localizado em qualquer subsequente diretório ou subdiretório.
para proteger tudo, permitindo o acesso a vários arquivos, podemos usar a diretiva Apache FilesMatch
em vez disso. Aqui está um exemplo, permitindo o acesso a “open-access-1.html
“, “open-access-2.html
“, e “open-access-3.html
“:
# password protect everything except specified files<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic <FilesMatch "(open-access-1.html)|(open-access-2.html)|(open-access-3.html)"> Order Deny,Allow Deny from all Allow from 123.456.789 Satisfy any </FilesMatch></IfModule>
Observe que podemos consolidar a lista de arquivo da seguinte maneira:
<FilesMatch "open-access-\.html">
Uma abordagem alternativa para permitir o acesso aberto para qualquer arquivo ou grupo de arquivos é para localizá-los no seu próprio diretório com as seguintes directivas adicionada ao seu arquivo .htaccess:
Allow from all
satisfy any
envolvê-lo, em seguida,
Como você pode ver, o Apache’ mod_auth
funcionalidade torna possível configurar apenas sobre a protecção por palavra-passe de configuração que você pode precisar. De impedir o acesso de endereços IP e domínios específicos para permitir o acesso apenas para arquivos e diretórios específicos, o Apache torna possível proteger seus arquivos de forma fácil e segura. E ainda nem sequer entramos nas muitas possibilidades disponíveis para Configurar autorizações específicas de usuário e grupo. Acho que vou guardar isso para outro artigo. Entretanto, para mais informações sobre o poderoso Apache mod_auth
, confira a documentação oficial.