Introdução
O balcão do mercado de Gearroom oferece uma página principal e uma móvel de login. Ambas abrem o empréstimo do mesmo membro. A política já conta por conta, mas as páginas mantêm contadores separados. Um membro limitado em uma página ainda pode se autenticar na outra.
Use tentativas limitadas de Hydra para demonstrar essa falha e depois reúna as entradas sob um limite compartilhado por conta. Comprove as duas direções, preserve o login normal de outro membro e confirme a recuperação após expiração natural. Você entregará uma política efetiva em execução com histórico real de requisições e registros intactos, não um relatório.
Este laboratório se apoia em Limit Attempts by Account: você deve reconhecer seu argumento de formulário Hydra, marcador positivo conhecido, política JSON, diagnósticos curl e comandos deskctl. Os mecanismos permanecem iguais. O ambiente é inicializado novamente com outros membros e registros; arquivos, sessões e processos anteriores não são transferidos. Workstation é o terminal preparado e Equipment Desk é o site. As duas interfaces pertencem ao mesmo contêiner isolado de treinamento. Todas as contas e dados são recursos sintéticos locais.
Reserve cerca de 50 minutos com leitura e erros comuns; é uma estimativa do autor, não um tempo medido com iniciantes. Só o membro de teste declarado pode receber senhas erradas repetidas. O membro de referência deve usar a senha correta conhecida. Preserve o serviço, as contas, os registros originais e os valores de treinamento.
Confirmar duas entradas de uma conta
Nesta etapa, estabeleça que as duas páginas realmente autenticam o mesmo membro e abrem o mesmo empréstimo. Rótulos parecidos não comprovam sozinhos uma identidade compartilhada.
Abra Equipment Desk e depois Review brief. O membro de teste autorizado é samplemember, senha Sample24. O membro de referência normal é deskteam, senha Desk24.
Selecione Member sign-in, envie as credenciais de teste e selecione Open your record. Confira samplemember, empréstimo LN-318, Jules Chen, Workshop camera kit, retirada Friday 09:30, devolução Monday 16:00 e a nota da bolsa identificada para ambas as baterias. Selecione Sign out.

Compare Member e Record, ambos os horários e a nota de embalagem após cada login real. As duas páginas devem abrir este mesmo registro.
Selecione Mobile sign-in, use as mesmas credenciais e abra o registro. Confira a mesma identidade, empréstimo e todos os detalhes; depois saia. São duas entradas para um diretório de membros, não contas ou hosts separados.
Selecione Member sign-in, use deskteam / Desk24 e abra seu registro. É LN-087, Ari Lane, Folding projection screen, com a nota de manter a tela seca antes de embalar. Saia novamente.
Alterne para Workstation. A interface começa em /home/labex/project/login-limits; pwd mostra o local:
pwd
Se estiver em outro lugar, use o mesmo comando de mudança de diretório de antes:
cd /home/labex/project/login-limits
Leia a política preparada e a política ativa real:
cat policy.json
deskctl status
A chave key já é account. Em entry_groups, /signin pertence a desktop, enquanto /mobile/signin pertence a mobile. Um grupo identifica quais entradas compartilham um contador para essa conta. Rótulos diferentes atualmente dão contadores separados ao mesmo membro. Preserve três falhas, janela de 30 segundos e bloqueio de 12 segundos.
Observar a falha na entrada alternativa
Nesta etapa, limite a entrada principal e demonstre um login genuíno pela móvel durante o mesmo bloqueio.
Permaneça em Workstation. O arquivo preparado ainda contém apenas cinco candidatos deliberadamente errados para o membro autorizado:
cat wrong-passwords.txt
Os caminhos POST reais aparecem abaixo dos dois formulários visíveis. Eles usam os mesmos campos username e password. O endereço de loopback 127.0.0.1 e a porta 8080 alcançam este serviço local de treinamento. A opção -l de Hydra agora seleciona samplemember; -P, -s, -t 1, -I, o argumento POST entre aspas e S=Signed in as têm os mesmos significados do primeiro laboratório. Todo candidato é errado, então uma execução completa deve informar 0 valid password found; essa saída sozinha não comprova a proteção da entrada alternativa.
Deixe as tentativas anteriores expirarem naturalmente:
deskctl wait
Execute os quatro comandos seguintes juntos, sem parar para ler entre eles. As requisições curl usam senhas corretas conhecidas; -o salva cada corpo e -w imprime seu status HTTP:
hydra -I -l samplemember -P wrong-passwords.txt -s 8080 -t 1 127.0.0.1 http-post-form '/signin:username=^USER^&password=^PASS^:S=Signed in as'
curl -s -o main-probe.html -w 'Main HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/signin
curl -s -o mobile-probe.html -w 'Mobile HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/mobile/signin
curl -s -o reference-probe.html -w 'Reference HTTP %{http_code}\n' --data 'username=deskteam&password=Desk24' http://127.0.0.1:8080/mobile/signin
Espere Main HTTP 429, Mobile HTTP 200 e Reference HTTP 200. O mesmo membro está limitado na entrada principal, mas consegue se autenticar na móvel. Confirme a identidade móvel em vez de confiar só em 200:
grep -o 'Signed in as samplemember' mobile-probe.html
Leia as decisões reais do servidor:
deskctl events
Procure um limite atingido por samplemember em /signin, um login principal limitado e uma autenticação em /mobile/signin, na mesma revisão. Um evento limitado de uma única entrada não demonstra limite entre entradas. O membro de referência continua sendo outra conta; seu sucesso não corrige essa falha.
O histórico continua disponível após o bloqueio. Se perdeu a janela de observação, deixe deskctl wait terminar e repita o mesmo bloco limitado. Para erro de conexão ou sintaxe de Hydra, corrija primeiro o argumento completo, o endereço, a porta e o caminho declarado. HTTP 400 significa nomes de campo ou estrutura incorretos; 404 indica caminho incorreto. Uma digitação errada comum não exige redefinir a VM.
Colocar as páginas no mesmo grupo por conta
Nesta etapa, faça os dois caminhos POST usarem um contador para o mesmo membro. As contas devem permanecer separadas entre si.
Permaneça em Workstation. Substitua o arquivo de política pelo objeto completo abaixo. O here-document entre aspas preserva o JSON literalmente; seu fechamento EOF deve ficar sozinho na linha, sem espaços iniciais. Como antes, > sobrescreve este arquivo local:
cat > policy.json <<'EOF'
{
"key": "account",
"entry_groups": {
"/signin": "members",
"/mobile/signin": "members"
},
"failed_attempts": 3,
"window_seconds": 30,
"cooldown_seconds": 12
}
EOF
As duas rotas agora têm o mesmo rótulo de grupo. É um nome curto não vazio, não uma palavra especial: outro nome compartilhado equivalente é permitido. Os rótulos podem ter até 48 caracteres. Preserve a chave por conta, as duas chaves reais de rota e os números combinados. Remover uma rota, desativar um formulário ou voltar ao contador global não atende à tarefa.
Aplique explicitamente o arquivo:
deskctl apply policy.json --wait
Políticas alteradas esperam a expiração natural do estado de tentativas existente. Nenhum contador ativo, histórico ou registro é apagado e o processo não reinicia. Reaplicar a mesma política continua sem efeito. Uma vírgula JSON ausente ou campo errado deixa a política anterior ativa; corrija o arquivo antes de tentar novamente.
deskctl status
Confirme a chave ativa account e os rótulos iguais na nova revisão. Um arquivo local correto não basta até o serviço usá-lo. Agora você precisa de evidências dessa revisão, não dos eventos anteriores de grupos separados.
Testar as duas direções e preservar o acesso
Nesta etapa, comprove que falhas de qualquer página limitam a outra, enquanto o membro de referência pode trabalhar e o de teste se recupera naturalmente.
Permaneça em Workstation. Teste primeiro da principal para a móvel:
deskctl wait
Execute este bloco completo junto:
hydra -I -l samplemember -P wrong-passwords.txt -s 8080 -t 1 127.0.0.1 http-post-form '/signin:username=^USER^&password=^PASS^:S=Signed in as'
curl -s -o mobile-probe.html -w 'Mobile HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/mobile/signin
curl -s -o reference-probe.html -w 'Reference HTTP %{http_code}\n' --data 'username=deskteam&password=Desk24' http://127.0.0.1:8080/mobile/signin
Espere zero descobertas de Hydra, Mobile HTTP 429 e Reference HTTP 200. Os dois corpos salvos devem concordar:
grep -o 'Too many attempts' mobile-probe.html
grep -o 'Signed in as deskteam' reference-probe.html
deskctl events
A revisão atual precisa mostrar o limite principal, a recusa móvel e a autenticação normal de referência. Espere a recuperação natural:
deskctl wait
Alterne para Equipment Desk, selecione Mobile sign-in, use samplemember / Sample24 e selecione Open your record. Confira o empréstimo de câmera LN-318 intacto e a nota da bolsa de baterias; depois Sign out. Esse novo login móvel confirma a recuperação do limite principal.
Volte a Workstation. Inverta agora a direção:
deskctl wait
Execute este bloco completo junto:
hydra -I -l samplemember -P wrong-passwords.txt -s 8080 -t 1 127.0.0.1 http-post-form '/mobile/signin:username=^USER^&password=^PASS^:S=Signed in as'
curl -s -o main-probe.html -w 'Main HTTP %{http_code}\n' --data 'username=samplemember&password=Sample24' http://127.0.0.1:8080/signin
curl -s -o reference-probe.html -w 'Reference HTTP %{http_code}\n' --data 'username=deskteam&password=Desk24' http://127.0.0.1:8080/signin
Espere zero descobertas, Main HTTP 429 e Reference HTTP 200:
grep -o 'Too many attempts' main-probe.html
grep -o 'Signed in as deskteam' reference-probe.html
deskctl events
Desta vez, o limite móvel deve ser seguido pela recusa principal. É outra direção, não uma cópia renomeada do primeiro resultado. Se um diagnóstico chegou tarde, deixe estabilizar naturalmente e repita essa direção limitada; não amplie candidatos nem redefina contadores.
deskctl wait
Alterne para Equipment Desk, selecione Member sign-in, use samplemember / Sample24 e abra o registro original LN-318. Esse login principal comprova a recuperação do limite móvel. Saia e use Member sign-in com deskteam / Desk24 para reabrir LN-087, conferindo a tela e a nota sobre embalagem seca. Saia novamente e abra Visitor guide.
O navegador cria sua própria sessão após cada login real; as respostas curl de diagnóstico não o autenticam. Se um registro retornar 403, corrija o login real do navegador e use Open your record. Corrija erros comuns de senha ou caminho sem reiniciar o cenário.
As duas entradas reais agora seguem um limite por conta, com evidências da política atual nas duas direções, acesso de referência preservado, recuperação natural e registros intactos. A avaliação lê esses fatos existentes e páginas públicas; não realiza testes ou recuperações ausentes. Isso comprova o comportamento local declarado de um único processo, não um limite distribuído de produção nem defesa contra toda forma de login automatizado.
Resumo
Você confirmou que duas páginas reais compartilham uma identidade, reproduziu uma falha causada por grupos separados e aplicou um contador compartilhado por conta. Testes limitados de Hydra comprovaram as duas direções, acesso normal de referência e recuperação natural para registros intactos. Nem uma recusa em uma única página nem o histórico de uma política antiga comprovam o resultado completo.



