파일 업로드 보안 취약점 완전 방어: MIME 위조·웹쉘 차단 실전 가이드
확장자 화이트리스트와 Content-Type 검증을 다 걸어뒀는데도 웹쉘이 떨어졌다. 파일 업로드 보안 취약점이 어디서 새는지, magic bytes도 polyglot으로 우회되는 이유를 따라가본다. 결국 재인코딩과 웹루트 외부 저장이 가장 효과적이라는 결론에 도달했다.
확장자 화이트리스트와 Content-Type 검증을 다 걸어뒀는데도 웹쉘이 떨어졌다. 파일 업로드 보안 취약점이 어디서 새는지, magic bytes도 polyglot으로 우회되는 이유를 따라가본다. 결국 재인코딩과 웹루트 외부 저장이 가장 효과적이라는 결론에 도달했다.
Next.js 14 환경에서 카카오·구글·네이버 소셜 로그인을 도입할 때 NextAuth.js와 Passport.js 중 무엇이 적절한지 비교한다. 콜백 검증, state 파라미터, 토큰 보관까지 보안 관점에서 따져본다.
Presigned URL은 만료 시간만 짧게 잡으면 안전하다는 통념이 있다. 실제로는 IAM 권한이 그대로 상속되고, Content-Type 검증과 크기 제한이 별도로 필요하다.
TOTP 2단계 인증 구현은 함수 두 줄로 끝나지 않는다. 서버 NTP 시간이 어긋나면 사용자가 락아웃되고, 백업 코드가 없으면 폰을 잃어버린 사용자는 영원히 못 들어온다. Python과 Node.js 양쪽으로 풀어본 실전 가이드다.
RS256이 무조건 정답이라는 통념을 깬다. 환경별로 답이 다르다. HS256, RS256, ES256을 키 관리와 검증 비용 기준으로 다시 본다.
세션 JWT 인증 비교를 다룬다. JWT로 갈아탔다가 로그아웃이 안 되는 문제로 헤맸던 경험, 그리고 어떤 기준으로 다시 결정했는지 정리한다.
어제 운영 서버 점검하다가 securityheaders.com에서 D 받은 걸 보고 헤더를 다시 손봤다. 그 과정에서 정리한 메모다.
bcrypt argon2 비교를 신규 인증 모듈에 적용하면서 겪은 OOM과 파라미터 튜닝, 그리고 결국 어떤 조합으로 안정화됐는지 시간순으로 풀어본다.
Node.js 앱을 HPA로 스케일링할 때 후보는 셋이다. CPU 기반, 메모리 기반, KEDA. 어느 게 맞는지 세 가지 축으로 비교하고 벤치마크로 검증한 결과를 적는다. TypeScript 제네릭으로 메트릭을 타입화한 예제도 포함한다.
동일한 Next.js 앱을 Vercel과 Netlify에 각각 배포해 빌드 시간, 엣지 함수 응답, 무료 플랜 한도를 비교한다. 한국 사용자 입장에서 어떤 워크로드에 어디가 더 잘 맞는지 살핀다.
프론트에서만 보던 CORS 오류를 백엔드에서 직접 다뤄보니 완전히 다른 풍경이 보였다. 세 가지 환경에서 안전하게 푸는 기준을 정리한다.
코드 리뷰에서 f-string으로 조립된 SQL 쿼리를 본 적이 있다. SQL Injection 방지 실전을 parameterized query, ORM, 입력 검증 세 축으로 정리한다. Python과 Node.js 예제 기반.