본문 바로가기
C.W.K.
Stream
Lesson 04 of 05 · published

Granular Killswitch — Revoke All 너머

~15 min · granular, incident-mode, severity-ladder

Level 0Greenhorn
0 XP0/53 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

"Revoke All" 은 최후의 수단이야. 더 작은 사고 — 잠깐 빌려준 폰, 테스트한다고 앱에 로그인한 친구, 수상한 session 하나 — 에는 더 잘게 나뉜 컨트롤이 덜 아파.

1. 한 session revoke

admin sessions 페이지가 살아있는 session 을 전부 보여줘. token (앞부분만), IP, 생성 시각, 만료 시각. row 마다 삭제 버튼을 하나씩 달아.

2. IP 별 revoke

특정 IP 가 수상하면 그 session 을 revoke 하고 blacklist 에 넣는 걸 한 번에 처리해.

3. Incident 동안 lockout 강화

brute force 를 맞고 있는 중이면 update 한 번으로 retry limit 을 5 에서 2 로 낮춰. 끝나면 되돌리고.

4. Local IP bypass 일시적 비활성

공격자가 LAN 안에 있을 수도 있어 (아이 친구, 수상한 손님, 이미 뚫린 IoT). 그럴 땐 local bypass 를 잠깐 빼서 그쪽도 PIN 게이트를 통과하게 만들어.

Code

토큰 prefix 로 한 session revoke·python
@app.post("/admin/security/sessions/{token_prefix}/delete")
async def delete_session(request: Request, token_prefix: str):
    require_admin(request)
    db.execute(
        "DELETE FROM security_sessions WHERE substr(token, 1, 8) = ?",
        (token_prefix,)
    )
    db.commit()
    return RedirectResponse("/admin/security", status_code=302)
한 IP 의 모든 session 죽이고 blacklist·python
@app.post("/admin/security/ip/{ip}/kill")
async def kill_ip(request: Request, ip: str):
    require_admin(request)
    db.execute("DELETE FROM security_sessions WHERE ip = ?", (ip,))
    db.execute("""
      INSERT OR REPLACE INTO security_blacklist(ip, reason, blocked_at)
      VALUES (?, 'manual_admin_block', ?)
    """, (ip, now()))
    db.commit()
    return {"killed_sessions_for": ip}
Incident mode — 더 엄격한 retry limit·python
@app.post("/admin/security/incident-mode")
async def incident_mode(request: Request, on: bool = Form(...)):
    require_admin(request)
    new_max = 2 if on else 5
    db.execute("UPDATE security_config SET max_retry = ?", (new_max,))
    db.commit()
    return {"max_retry": new_max}

External links

Exercise

Granular 엔드포인트 3개 (한 session revoke, IP kill, incident mode) 와 admin 테이블의 각 session 옆 작은 버튼 row 추가. 다른 머신에서 curl 로 IP-kill 경로 테스트: 그 IP 의 session 사라지고 IP 가 reason='manual_admin_block' 으로 blacklist 에 나타남 확인.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.