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" 은 핵 옵션. 더 작은 incident — 빌려준 폰, 테스트하려고 앱 로그인한 친구, 의심되는 session — 한테 finer-grained 컨트롤이 덜 아파.

1. 한 session revoke

admin sessions 페이지가 모든 active session 리스트: token (truncated), IP, 생성, 만료. 각 row 마다 자기 delete 버튼.

2. IP 별 revoke

특정 IP 의심되면 그 session revoke 하고 한 작업으로 blacklist.

3. Incident 동안 lockout 강화

active 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

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

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