오류 시 허용 실패

Fail-open handling

보안 검사에 오류가 났을 때 요청을 그대로 허용하면 우회 경로가 생깁니다.

···
html
<div class="sd"><div class="sd-head"><strong>FAIL OPEN</strong><span id="state">live check</span></div><div class="sd-stage"><div class="fo-error">POLICY CHECK: ERROR</div><div class="fo-split"><div class="fo-lane"><span>fail open</span><div id="open-door">OPEN</div><b>request passes</b></div><div class="fo-lane"><span>fail closed</span><div id="closed-door">CLOSED</div><b>request stops</b></div></div></div><div class="sd-foot"><span id="caption">checking boundary</span><span>tap to step</span></div></div>
css
.sd{box-sizing:border-box;width:min(94vw,700px);height:min(86vh,318px);padding:clamp(9px,2.3vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--fg);display:flex;flex-direction:column;gap:clamp(6px,1.8vmin,12px);font:600 clamp(12px,2.6vmin,16px)/1.25 var(--font-sans, sans-serif)}.sd *{box-sizing:border-box}.sd-head,.sd-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:1.25em}.sd-head strong{color:var(--accent);letter-spacing:.06em}.sd-head span,.sd-foot{color:var(--muted)}.sd-foot{font-size:clamp(12px,2.4vmin,14px)}.sd-stage{position:relative;flex:1;min-height:0;display:flex;align-items:center;justify-content:center;gap:clamp(6px,2vmin,18px);overflow:hidden}.sd .mono{font-family:ui-monospace,monospace}.sd .tile{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(5px,1.5vmin,10px);text-align:center}.sd .good{color:var(--accent);border-color:var(--accent)}.sd .bad{color:var(--accent-3);border-color:var(--accent-3)}.sd .arrow{color:var(--muted);font-size:clamp(15px,4vmin,28px)}.sd .active{background:color-mix(in srgb,var(--accent) 16%,var(--surface));border-color:var(--accent)}.sd .blocked{background:color-mix(in srgb,var(--accent-3) 13%,var(--surface));border-color:var(--accent-3)}.sd-stage{flex-direction:column;gap:clamp(5px,1.4vmin,9px)}.fo-error{border:1px dashed var(--accent-3);border-radius:5px;padding:clamp(3px,1vmin,7px);color:var(--accent-3)}.fo-split{display:flex;gap:clamp(6px,2vmin,14px);width:min(100%,490px)}.fo-lane{flex:1;display:grid;justify-items:center;gap:clamp(3px,1vmin,6px);border:1px solid var(--line);border-radius:8px;padding:clamp(5px,1.4vmin,10px);text-align:center}.fo-lane>div{width:70%;border:2px solid var(--line);border-radius:5px;padding:clamp(4px,1.2vmin,8px);transition:all .2s}.fo-lane b{color:var(--muted);font-weight:600}.fo-lane:first-child.active>div{border-color:var(--accent-3);color:var(--accent-3);background:color-mix(in srgb,var(--accent-3) 15%,var(--surface))}.fo-lane:last-child.active>div{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb,var(--accent) 15%,var(--surface))}
js
let n=0;function advance(){n=1-n;document.querySelectorAll('.fo-lane').forEach((e,i)=>e.classList.toggle('active',i===n));document.getElementById('state').textContent=n?'safe default':'unsafe default';document.getElementById('caption').textContent=n?'error denies and rolls back':'error accidentally grants access'}advance();setInterval(advance,900);
document.querySelector('.sd').addEventListener('pointerdown',advance);

오류 시 허용 실패는 권한 확인, 결제 검증 등 보안 관문이 예외나 타임아웃을 만났을 때 기본값으로 통과시키는 결함입니다. 정상 결과가 없다는 사실을 허용으로 해석하면 공격자는 검사기를 고장 내 우회할 수 있습니다.

데모는 같은 검사 오류에서 열린 문과 닫힌 문을 나란히 비교합니다. 오류는 기록·경보하고 상태 변경은 롤백하며 안전한 거부 응답으로 처리해야 합니다.

언제 쓰나

인가, 정책 엔진, 위험 평가, 결제 검증처럼 실패 시 기본 동작이 중요한 곳에서 점검합니다.

페이지로 열기 ↗