Skip to content

๐Ÿ” Security : SMS ํ† ํฐ ์†Œ์œ ๊ถŒ ๊ฒฝ๊ณ„ ์ •๋ฆฌ#59

Merged
DoHeonLim merged 1 commit into
developfrom
security/sms-token-boundary-hardening
Jun 29, 2026
Merged

๐Ÿ” Security : SMS ํ† ํฐ ์†Œ์œ ๊ถŒ ๊ฒฝ๊ณ„ ์ •๋ฆฌ#59
DoHeonLim merged 1 commit into
developfrom
security/sms-token-boundary-hardening

Conversation

@DoHeonLim

Copy link
Copy Markdown
Owner

Summary

SMS ๋กœ๊ทธ์ธ ํ† ํฐ๊ณผ ํ”„๋กœํ•„ ์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ ํ† ํฐ์˜ ์†Œ์œ ๊ถŒ ๊ฒฝ๊ณ„๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ , ์ธ์ฆ ์ „ User.phone ์ ์œ ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ „ ์ธ์ฆ rate limit ๋ณด๊ฐ• ์ดํ›„ ๊ฒ€ํ†  ๊ณผ์ •์—์„œ ํ™•์ธํ•œ SMS ํ† ํฐ ๋ชฉ์  ํ˜ผ์šฉ ๊ฐ€๋Šฅ์„ฑ๊ณผ rate limit ๊ธฐ๋ก transaction ๋ฒ”์œ„๋ฅผ ๋ณด์ •ํ•˜๋Š” ํ›„์† ์ž‘์—…์ž…๋‹ˆ๋‹ค.

Changes

[๐Ÿ“ฑ SMS]

  • SMS ๋กœ๊ทธ์ธ ํ† ํฐ์ด ์ธ์ฆ ์ „ User.phone์„ ์ ์œ ํ•˜์ง€ ์•Š๋„๋ก ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  • SMS ๋กœ๊ทธ์ธ ํ† ํฐ๊ณผ ํ”„๋กœํ•„ ์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ ํ† ํฐ์˜ userId ๋ชฉ์ ์„ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœํ•„ ์ธ์ฆ ํ† ํฐ์ด SMS ๋กœ๊ทธ์ธ ๊ฒ€์ฆ์—์„œ ์†Œ๋น„๋˜์ง€ ์•Š๋„๋ก ์ฐจ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ์ธ SMS ๋ฐœ์†ก ์‹คํŒจ ์‹œ ์ด์ „ ํ† ํฐ์˜ userId๊นŒ์ง€ ์กฐ๊ฑด๋ถ€๋กœ ๋ณต๊ตฌํ•˜๋„๋ก ๋ณด๊ฐ•ํ–ˆ์Šต๋‹ˆ๋‹ค.

[๐Ÿ—„๏ธ Database]

  • SMSToken.userId nullable ์ „ํ™˜ migration์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ์ธ SMS ํ† ํฐ์€ userId ์—†์ด ์ €์žฅํ•˜๊ณ , ๊ฒ€์ฆ ์„ฑ๊ณต ์‹œ ์ „ํ™”๋ฒˆํ˜ธ ๊ธฐ์ค€ User๋ฅผ ์กฐํšŒ ๋˜๋Š” ์ƒ์„ฑํ•˜๋„๋ก ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

[๐Ÿ” Rate Limit]

  • ์˜ค๋ž˜๋œ rate limit ๊ธฐ๋ก ์‚ญ์ œ๋ฅผ advisory lock transaction ๋ฐ–์œผ๋กœ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  • PostgreSQL transaction ๋‚ด๋ถ€ ์‚ญ์ œ ์‹คํŒจ๊ฐ€ ์ดํ›„ ์กฐํšŒ/๊ธฐ๋ก์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  • rate limit ํŒ๋‹จ transaction์€ lock, ์ตœ๊ทผ ์š”์ฒญ ์กฐํšŒ, ํ˜„์žฌ ์š”์ฒญ ๊ธฐ๋ก๋งŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋‹จ์ˆœํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

[โ˜”๏ธ Test]

  • SMS ์ธ์ฆ ์ „ User ์ƒ์„ฑ ๋ฐฉ์ง€ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœํ•„ ํ† ํฐ userId ์ž”์กด ๋ฐ ๋กœ๊ทธ์ธ ๋ชฉ์  ํ˜ผ์šฉ ๋ฐฉ์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • SMS ๋ฐœ์†ก ์‹คํŒจ rollback ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณด๊ฐ•ํ–ˆ์Šต๋‹ˆ๋‹ค.

Verification

  • npx prisma generate
  • npm run test -- features/auth/service/sms.test.ts features/auth/service/rateLimit.test.ts features/user/service/phone.test.ts
  • npx tsc --noEmit
  • npm run lint
  • npm run test
  • npx prisma validate
  • git diff --check

[๐Ÿ“ฑ SMS]
 - SMS ๋กœ๊ทธ์ธ ํ† ํฐ์ด ์ธ์ฆ ์ „ User.phone์„ ์ ์œ ํ•˜์ง€ ์•Š๋„๋ก ์ •๋ฆฌ
 - SMS ๋กœ๊ทธ์ธ ํ† ํฐ๊ณผ ํ”„๋กœํ•„ ์ „ํ™”๋ฒˆํ˜ธ ์ธ์ฆ ํ† ํฐ์˜ userId ๋ชฉ์  ๋ถ„๋ฆฌ
 - ํ”„๋กœํ•„ ์ธ์ฆ ํ† ํฐ์ด SMS ๋กœ๊ทธ์ธ ๊ฒ€์ฆ์—์„œ ์†Œ๋น„๋˜์ง€ ์•Š๋„๋ก ์ฐจ๋‹จ
 - ๋กœ๊ทธ์ธ SMS ๋ฐœ์†ก ์‹คํŒจ ์‹œ ์ด์ „ ํ† ํฐ์˜ userId๊นŒ์ง€ ์กฐ๊ฑด๋ถ€ ๋ณต๊ตฌ

[๐Ÿ—„๏ธ Database]
 - SMSToken.userId nullable ์ „ํ™˜ migration ์ถ”๊ฐ€
 - ๋กœ๊ทธ์ธ SMS ํ† ํฐ์€ userId ์—†์ด ์ €์žฅํ•˜๊ณ , ๊ฒ€์ฆ ์„ฑ๊ณต ์‹œ ์ „ํ™”๋ฒˆํ˜ธ ๊ธฐ์ค€ User๋ฅผ ์กฐํšŒ ๋˜๋Š” ์ƒ์„ฑ

[๐Ÿ” Rate Limit]
 - ์˜ค๋ž˜๋œ rate limit ๊ธฐ๋ก ์‚ญ์ œ๋ฅผ advisory lock transaction ๋ฐ–์œผ๋กœ ๋ถ„๋ฆฌ
 - PostgreSQL transaction ๋‚ด๋ถ€ ์‚ญ์ œ ์‹คํŒจ๊ฐ€ ์ดํ›„ ์กฐํšŒ/๊ธฐ๋ก์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ์ •๋ฆฌ
 - rate limit ํŒ๋‹จ transaction์€ lock, ์ตœ๊ทผ ์š”์ฒญ ์กฐํšŒ, ํ˜„์žฌ ์š”์ฒญ ๊ธฐ๋ก๋งŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋‹จ์ˆœํ™”

[โ˜”๏ธ Test]
 - SMS ์ธ์ฆ ์ „ User ์ƒ์„ฑ ๋ฐฉ์ง€ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
 - ํ”„๋กœํ•„ ํ† ํฐ userId ์ž”์กด ๋ฐ ๋กœ๊ทธ์ธ ๋ชฉ์  ํ˜ผ์šฉ ๋ฐฉ์ง€ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
 - SMS ๋ฐœ์†ก ์‹คํŒจ rollback ํšŒ๊ท€ ํ…Œ์ŠคํŠธ ๋ณด๊ฐ•

[โœ… Verification]
 - npx prisma generate
 - npm run test -- features/auth/service/sms.test.ts features/auth/service/rateLimit.test.ts features/user/service/phone.test.ts
 - npx tsc --noEmit
 - npm run lint
 - npm run test
 - npx prisma validate
 - git diff --check
@vercel

vercel Bot commented Jun 29, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
board-port Ready Ready Preview Jun 29, 2026 9:36am

@DoHeonLim
DoHeonLim merged commit dfbc2a3 into develop Jun 29, 2026
3 checks passed
@DoHeonLim
DoHeonLim deleted the security/sms-token-boundary-hardening branch July 2, 2026 08:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant