상품권 번호를 어떻게 지키는가

경로를 막는 것과 별개로, 데이터를 통째로 가져가더라도 번호를 읽을 수 없게 만드는 쪽을 봅니다.

등록 재고 175

결과 차이를 브라우저 안에서 다시 계산해 보여 주는 화면입니다. 실제로 동작하는 공격 코드는 들어 있지 않습니다.

2026-09-14 10:30:00

업로드 경로로 파일이 올라가 서버 안에서 실행된 상황

앞의 방어가 모두 실패했다고 가정합니다. 이 상태에서 데이터베이스를 통째로 가져갔을 때 양쪽이 어떻게 보이는지 확인합니다.

지금 구조 — 평문 저장재현 전

내려받은 표 (voucher_stock)

serialvoucher_no
CV10-000418696-****-****-3721
CV10-000424426-****-****-1605
CV10-000431709-****-****-4912
CV10-000449688-****-****-7614
CV30-001019709-****-****-2511
CV30-001028896-****-****-2703

재현을 누르면 이 칸의 값이 그대로 드러납니다

번호 자체가 돈이라 표 하나가 곧 피해 금액이 됩니다. 유출 시점을 알아도 이미 쓰인 번호는 되돌리기 어렵습니다.

개편 후 — 암호화 저장, 키 분리재현 전

내려받은 표 (voucher_stock)

serialvoucher_no_enc
CV10-00041gAAAAABSguNPHY7yFy5A3plM9_9XQ15hBAzguGJztEVX==
CV10-00042gAAAAABqFCqVW8SF3UvrspX4irm5rg1Dsw_7HUBEwVTx==
CV10-00043gAAAAABSmnzTmnC7H385LXjQ8VE1Y-Ayugpk3RWREoQi==
CV10-00044gAAAAABqW3M1FAXgrhMvC4wCjOvixMg9SyYEgQfufvsV==
CV30-00101gAAAAABqQagKYSp0Zd8Mih6EDV8CRhZbSej9feYO4QRd==
CV30-00102gAAAAABg9YNyAS7EmneFyg22kSzvsUb8ANtVKvfm6tGd==

저장된 값은 언제나 이 형태입니다

되돌리는 열쇠는 이 서버에 두지 않습니다. 표를 통째로 가져가도 값만 가져가는 것이 됩니다.

웹쉘이 올라간 상황 재현을 누르면 서버 안이 열린 상태를 가정하고, 같은 표를 내려받았을 때 양쪽 값이 어떻게 다른지 보여 줍니다.