백엔드
인증-보안
2FA, RBAC, 세션, 암호화, Crypto
-
백엔드/Python-Flask
Rate Limiting을 걷어낸 날: 폐쇄망 배포에서 보안은 더하는 것이 아니다
"보안은 항상 더하는 것"이라는 통념의 반례. 폐쇄망 + nginx 프록시 배포에서 Flask-Limiter가 부과하던 의존성/운영 혼란/인지 부담을 가치-비용으로 저울질하고 제거한 의사결정 기록입니다. Next.js 구현 편의 자매 글입니다.
-
백엔드/Python-Flask
서버 기동을 거부시키는 설정 검증과 Path().name 한 줄로 막는 Path Traversal
`ALLOWED_ORIGINS`를 까먹으면 CORS가 `*` 폴백으로 조용히 열려 있던 문제와 URL 파라미터에 `../`를 꽂으면 상위 디렉토리 접근이 가능했던 path traversal을 각각 한 줄로 수정한 이야기입니다.
-
프론트엔드/크롬확장
단일 크롬 확장에서 멀티테넌트 구현하기: Space Isolation 패턴과 30개 메시지 핸들러 스코핑기
하나의 크롬 확장 안에 여러 격리된 데이터 공간을 두려면 메시지 핸들러마다 "현재 공간" 개념을 주입해야 합니다. 30개 가까운 핸들러에 Space Isolation 패턴을 녹이고, cross-page sync를 깨지 않으면서, 리팩토링 부수 효과로 dead code까지 정리한 경험을 정리했습니다.
-
백엔드/인증-보안
Hono + Cloudflare Workers + D1로 라이선스 서버 만들기: Lemon Squeezy 웹훅 완전 가이드
사이드 프로젝트에 Pro 라이선스를 붙이려면 서버가 필요합니다. Cloudflare Workers + Hono + D1로 주말에 구축한 라이선스 서버, 그리고 Lemon Squeezy 웹훅 이벤트 순서 함정으로 하루를 날린 이야기를 공유합니다.
-
프론트엔드/크롬확장
크롬 확장에 위장 공간 만들기: AES-GCM과 티어드 패딩으로 Plausible Deniability 구현
단순 암호화는 내용만 숨기고 존재는 드러냅니다. 크롬 확장에서 Plausible Deniability를 달성하기 위해 AES-GCM 고정 슬롯, 티어드 패딩, CSPRNG, 그리고 Auto-Timeout UX까지 네 레이어를 쌓은 실전 사례를 공유합니다.
-
백엔드/인증-보안
OAuth와 이메일 가입을 하나의 온보딩 플로우로 통합하기
계정 생성과 조직 설정을 분리하면 OAuth·이메일 두 가입 경로가 하나의 온보딩 페이지로 모입니다. 미들웨어 한 줄이 이 통합을 가능하게 합니다.
-
백엔드/인증-보안
NextAuth v5 JWT 콜백: OAuth와 Credentials 사용자 한 곳에서 분기하기
OAuth 경로에서는 user 객체에 회사 관계가 없어 토큰 초기화에 실패합니다. account.type 분기와 추가 DB 조회로 해결한 방법을 정리했습니다.
-
백엔드/인증-보안
NextAuth PrismaAdapter + 암호화된 이메일: Blind Index 커스텀 Adapter
OAuth 추가 후 getUserByEmail이 null을 반환하는 조용한 실패를 추적해, Prisma Extension과 Blind Index를 활용한 커스텀 Adapter로 해결한 사례입니다.
-
백엔드/인증-보안
MCP 서버 보안: LLM이 생성한 파일 경로를 18줄로 막는 Path Traversal 방어
MCP 서버는 로컬 권한과 LLM 입력이 만나는 새로운 공격 표면입니다. Path Traversal, prefix 우회, symlink 공격을 18줄의 검증 함수로 막는 방법과 그 뒤의 설계 원칙을 정리합니다.
-
백엔드/API설계
메모 한 통에 10MB? API 입력 길이 제한으로 무제한 텍스트 남용 막기
리포트 메모 필드에 아무 제한 없이 문자열을 받고 있었다. 악의든 실수든 누군가 MB 단위 텍스트를 넣으면 DB와 네트워크가 먼저 비명을 지른다. 5분이면 추가할 수 있는 방어선을 PR 리뷰에서 발견한 기록.