로그인 페이지 간 제한 공유하기

HydraBeginner
지금 연습하기

소개

Gearroom의 시장 데스크에는 주 로그인 페이지와 모바일 로그인 페이지가 있습니다. 둘 다 같은 회원의 대여 기록을 엽니다. 정책은 이미 계정별로 집계하지만 두 페이지는 별도 카운터를 유지합니다. 한 페이지에서 제한된 회원이 다른 페이지에서는 여전히 인증할 수 있습니다.

제한된 Hydra 시도로 이 공백을 보인 뒤 두 진입점이 같은 계정 제한을 공유하도록 만듭니다. 양방향을 입증하고 다른 회원의 정상 로그인을 보존하며 대기 시간이 자연 종료된 뒤 복구를 확인합니다. 결과물은 실제 요청 기록과 변하지 않은 기록이 있는 유효한 실행 정책이지 보고서가 아닙니다.

이 실습은 Limit Attempts by Account를 바탕으로 하므로 해당 Hydra 폼 인수, 알려진 성공 표식, JSON 정책, curl 진단, deskctl 명령을 알아야 합니다. 메커니즘은 같습니다. 환경은 다른 회원과 기록으로 새로 초기화되며 이전 파일, 세션, 프로세스를 이어받지 않습니다. Workstation은 준비된 터미널이고 Equipment Desk는 웹사이트입니다. 두 인터페이스는 같은 격리 교육 컨테이너에 속합니다. 모든 계정과 데이터는 로컬 합성 자원입니다.

읽기와 일반적인 실수를 포함해 약 50분을 예상하세요. 작성자의 추정치이며 초보자에게 측정한 시간이 아닙니다. 반복된 잘못된 비밀번호는 지정된 테스트 회원에만 허용됩니다. 참조 회원에는 알려진 올바른 비밀번호를 써야 합니다. 원래 서비스, 계정, 기록, 교육 값을 보존하세요.

한 계정의 두 진입점 확인하기

이 단계에서는 두 페이지가 실제로 같은 회원을 인증하고 같은 대여 기록을 여는지 확인합니다. 비슷한 레이블만으로 같은 신원을 입증할 수는 없습니다.

Equipment Desk를 열고 Review brief를 선택합니다. 허용된 테스트 회원은 samplemember, 비밀번호는 Sample24입니다. 정상 참조 회원은 deskteam, 비밀번호는 Desk24입니다.

Member sign-in에서 테스트 자격 증명을 제출하고 Open your record를 선택합니다. samplemember, 대여 LN-318, Jules Chen, Workshop camera kit, 수령 Friday 09:30, 반납 Monday 16:00, 두 배터리를 레이블 있는 파우치에 넣으라는 메모를 확인합니다. Sign out을 선택합니다.

두 진입점에서 비교할 같은 회원과 완전한 카메라 대여 기록

실제 로그인마다 Member와 Record 필드, 두 시간, 포장 메모를 비교하세요. 두 페이지가 같은 기록을 열어야 합니다.

Mobile sign-in을 선택하고 같은 테스트 자격 증명으로 기록을 엽니다. 같은 신원, 대여 번호, 모든 세부 정보를 확인하고 로그아웃합니다. 하나의 회원 디렉터리에 대한 두 진입점이며 별도 계정이나 호스트가 아닙니다.

Member sign-in에서 deskteam / Desk24로 기록을 엽니다. LN-087, Ari Lane, Folding projection screen, 포장 전 스크린을 건조하게 유지하라는 메모입니다. 다시 로그아웃합니다.

Workstation으로 전환합니다. 시작 위치는 /home/labex/project/login-limits이며 pwd로 확인합니다.

pwd

다른 위치라면 앞서 사용한 같은 디렉터리 변경 명령을 씁니다.

cd /home/labex/project/login-limits

준비된 정책과 실제 활성 정책을 읽습니다.

cat policy.json
deskctl status

key는 이미 account입니다. entry_groups에서 /signin은 desktop에, /mobile/signin은 mobile에 속합니다. 그룹은 해당 계정에서 어떤 진입점이 카운터를 공유하는지 나타냅니다. 현재 서로 다른 그룹 이름 때문에 같은 회원에게 별도 카운터가 생깁니다. 실패 세 번, 30초 구간, 12초 대기 값을 유지하세요.

대체 진입점의 공백 관찰하기

이 단계에서는 주 진입점을 제한하고 같은 대기 구간 동안 모바일 진입점에서 실제 로그인이 가능한지 보입니다.

Workstation에 머무릅니다. 준비된 파일에는 허용된 테스트 회원용으로 의도적으로 틀린 후보 다섯 개만 있습니다.

cat wrong-passwords.txt

실제 POST 경로는 두 보이는 폼 아래에 있습니다. 둘 다 username과 password 필드를 씁니다. 루프백 주소 127.0.0.1과 포트 8080은 이 로컬 교육 서비스에 연결됩니다. Hydra의 -l은 이제 samplemember를 선택합니다. -P, -s, -t 1, -I, 따옴표 POST 인수, S=Signed in as는 첫 실습과 같은 의미입니다. 모든 후보가 틀리므로 완료된 실행은 0 valid password found를 보고해야 합니다. 이 출력만으로 대체 진입점이 보호됨을 증명하지는 못합니다.

이전 시도가 자연 만료되기를 기다립니다.

deskctl wait

다음 네 명령은 중간에 읽으려고 멈추지 말고 함께 실행합니다. curl 진단은 알려진 올바른 비밀번호를 사용합니다. -o는 각 본문을 저장하고 -w는 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

Main HTTP 429, Mobile HTTP 200, Reference HTTP 200이 예상됩니다. 같은 테스트 회원이 주 진입점에서는 제한되지만 모바일에서는 인증됩니다. 200만 믿지 말고 모바일 신원을 확인합니다.

grep -o 'Signed in as samplemember' mobile-probe.html

실제 서버 결정을 읽습니다.

deskctl events

같은 개정에서 samplemember의 /signin 임계값, 제한된 주 로그인, 인증된 /mobile/signin 로그인을 찾습니다. 한 진입점의 제한 이벤트만으로 진입점 간 제한을 증명할 수 없습니다. 참조 회원은 여전히 별도 계정이며, 그 성공이 공백을 수정하지는 않습니다.

기록은 대기 종료 후에도 읽을 수 있습니다. 관찰 구간을 놓쳤다면 deskctl wait가 끝난 뒤 같은 제한 블록을 반복합니다. 연결 또는 Hydra 구문 오류라면 먼저 전체 인수, 주소, 포트, 선언된 경로를 수정합니다. HTTP 400은 제출된 필드 이름이나 구조가 틀렸다는 뜻이고 404는 경로가 틀렸다는 뜻입니다. 일반적인 오타 때문에 VM을 재설정할 필요는 없습니다.

두 페이지를 같은 계정 그룹에 넣기

이 단계에서는 두 POST 경로가 같은 회원에 대해 하나의 카운터를 사용하도록 만듭니다. 계정 간 분리는 유지해야 합니다.

Workstation에 머무릅니다. 아래 완전한 객체로 정책 파일을 바꿉니다. 따옴표 히어 도큐먼트는 JSON을 문자 그대로 보존합니다. 종료 표시 EOF는 앞 공백 없이 한 줄에 혼자 있어야 합니다. 앞과 마찬가지로 >는 로컬 파일을 덮어씁니다.

cat > policy.json <<'EOF'
{
  "key": "account",
  "entry_groups": {
    "/signin": "members",
    "/mobile/signin": "members"
  },
  "failed_attempts": 3,
  "window_seconds": 30,
  "cooldown_seconds": 12
}
EOF

두 경로의 그룹 이름이 같아졌습니다. 이름은 짧고 비어 있지 않은 문자열이지 특별한 키워드가 아닙니다. 동등한 다른 공유 이름도 허용됩니다. 최대 48자입니다. 계정 키, 두 실제 경로 키, 정해진 숫자는 보존하세요. 경로 삭제, 폼 비활성화, 전역 카운터 복귀는 과제 조건을 충족하지 못합니다.

파일을 명시적으로 적용합니다.

deskctl apply policy.json --wait

변경된 정책은 기존 시도 상태가 자연 만료되기를 기다립니다. 활성 카운터, 기록, 회원 데이터는 삭제되지 않고 프로세스도 재시작되지 않습니다. 같은 정책 재적용은 여전히 변화가 없습니다. JSON 쉼표 누락이나 잘못된 필드는 이전 정책을 유지하므로 재시도 전에 파일을 수정하세요.

deskctl status

새 개정에서 활성 account 키와 같은 그룹 이름을 확인합니다. 로컬 파일이 올바른 것만으로 부족하며 실행 서비스가 사용해야 합니다. 이제 이전 분리 그룹 이벤트가 아닌 이 개정의 증거가 필요합니다.

양방향 테스트와 회원 접근 보존하기

이 단계에서는 어느 페이지의 실패든 다른 페이지를 제한하고, 참조 회원은 계속 일하며 테스트 회원은 자연 복구됨을 입증합니다.

Workstation에 머무릅니다. 먼저 주 진입점에서 모바일 방향을 테스트합니다.

deskctl wait

이 완전한 블록을 함께 실행합니다.

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

Hydra 발견 0개, Mobile HTTP 429, Reference HTTP 200이 예상됩니다. 저장된 두 본문도 일치해야 합니다.

grep -o 'Too many attempts' mobile-probe.html
grep -o 'Signed in as deskteam' reference-probe.html
deskctl events

현재 개정은 주 임계값, 모바일 거부, 정상 참조 인증을 보여야 합니다. 자연 복구를 기다립니다.

deskctl wait

Equipment Desk로 전환하고 Mobile sign-in에서 samplemember / Sample24를 사용한 뒤 Open your record를 선택합니다. 변하지 않은 LN-318 카메라 기록과 배터리 파우치 메모를 확인하고 Sign out을 누릅니다. 이 새 모바일 로그인은 주 진입점 제한에서 복구되었음을 확인합니다.

Workstation으로 돌아가 방향을 바꿉니다.

deskctl wait

이 완전한 블록을 함께 실행합니다.

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

발견 0개, Main HTTP 429, Reference HTTP 200이 예상됩니다.

grep -o 'Too many attempts' main-probe.html
grep -o 'Signed in as deskteam' reference-probe.html
deskctl events

이번에는 모바일 임계값 뒤에 주 진입점 거부가 있어야 합니다. 첫 결과의 이름만 바꾼 복사본이 아니라 다른 방향입니다. 진단이 늦었다면 자연스럽게 안정된 뒤 해당 제한 방향을 반복하세요. 후보를 늘리거나 카운터를 재설정하지 마세요.

deskctl wait

Equipment Desk로 전환하고 Member sign-in에서 samplemember / Sample24로 원본 LN-318 기록을 엽니다. 이 주 로그인은 모바일 제한에서 복구됨을 보여 줍니다. 로그아웃한 뒤 Member sign-in에서 deskteam / Desk24로 LN-087을 열어 스크린과 건조한 포장 메모를 확인합니다. 다시 로그아웃하고 Visitor guide를 엽니다.

브라우저는 실제 로그인 후마다 자체 세션을 만듭니다. curl 진단 응답은 브라우저를 로그인시키지 않습니다. 기록이 403이면 실제 브라우저 로그인을 수정하고 Open your record를 사용하세요. 일반적인 비밀번호나 경로 오타는 장면을 재시작하지 않고 수정합니다.

두 실제 진입점은 이제 계정마다 같은 제한을 따릅니다. 현재 정책의 양방향 증거, 보존된 참조 접근, 자연 복구, 변하지 않은 업무 기록이 있습니다. 평가는 기존 사실과 공개 페이지만 읽으며 누락된 테스트나 복구를 수행하지 않습니다. 이는 명시된 로컬 단일 프로세스 동작의 증명이지 분산 운영 제한이나 모든 자동 로그인 방식에 대한 방어는 아닙니다.

요약

두 실제 로그인 페이지가 한 신원을 공유함을 확인하고 별도 진입점 그룹의 공백을 재현한 뒤 공유 계정 카운터를 적용했습니다. 제한된 Hydra 테스트로 양방향, 정상 참조 접근, 변하지 않은 기록으로의 자연 복구를 입증했습니다. 한 페이지의 거부나 이전 정책 기록만으로 전체 결과를 증명할 수는 없습니다.