Skip to content

Security: gaebalai/workspace_cursor

Security

SECURITY.md

๐Ÿ”’ ๋ณด์•ˆ ์ •์ฑ…(Security Policy)

๊ฐœ์š”

์ด ํ”„๋กœ์ ํŠธ๋Š” Cursor ์ดˆ๋ณด์ž ํ•™์Šต ํ”„๋กœ์ ํŠธ๋กœ์„œ, ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ณด์•ˆ์„ ์ตœ์šฐ์„ ์œผ๋กœ ๊ณ ๋ คํ•˜์—ฌ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ›ก๏ธ ๊ตฌํ˜„๋œ ๋ณด์•ˆ ๋Œ€์ฑ…

1. ์˜์กด์„ฑ(Dependency) ๋ณด์•ˆ

  • npm audit: ์ •๊ธฐ์ ์œผ๋กœ ์ทจ์•ฝ์  ๊ฒ€์‚ฌ ์ˆ˜ํ–‰
  • ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ‚ค์ง€ ์‚ฌ์šฉ: OpenAI SDKใ€Anthropic SDKใ€Next.js ์‚ฌ์šฉ
  • ์ตœ์‹  ๋ฒ„์ „ ์œ ์ง€: ๋ณด์•ˆ ํŒจ์น˜์™€ ์—…๋ฐ์ดํŠธ๋ฅผ ์‹ ์†ํžˆ ๋ฐ˜์˜

2. ๊ธฐ๋ฐ€ ์ •๋ณด ๋ณดํ˜ธ

  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ด€๋ฆฌ: API ํ‚ค์™€ ๊ฐ™์€ ๋ฏผ๊ฐ ์ •๋ณด๋Š” .env ํŒŒ์ผ์—์„œ ๊ด€๋ฆฌ
  • ํ•˜๋“œ์ฝ”๋”ฉ ๊ธˆ์ง€: ์†Œ์Šค ์ฝ”๋“œ์— ์ง์ ‘ ๊ธฐ๋ฐ€ ์ •๋ณด ํฌํ•จ ๊ธˆ์ง€
  • ๋ฐ๋ชจ ๋ชจ๋“œ ์ง€์›: API ํ‚ค ์—†์ด๋„ ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“œ ์ œ๊ณต

3. ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ ๋ฐ ์„ธ๋‹ˆํƒ€์ด์ง•(Sanitization)

// ์—„๊ฒฉํ•œ ์ž…๋ ฅ ๊ฒ€์ฆ ์˜ˆ์‹œ
if (!text || typeof text !== "string" || text.trim() === "") {
  return NextResponse.json(
    { success: false, error: "Text is required" },
    { status: 400 }
  );
}

4. ๋ณด์•ˆ ํ—ค๋” ์„ค์ •

  • CSP (Content Security Policy): XSS(ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…) ๋ฐฉ์ง€
  • X-Frame-Options: ํด๋ฆญ์žฌํ‚น(Clickjacking) ๋ฐฉ์ง€
  • X-Content-Type-Options: MIME ํƒ€์ž… ์Šค๋‹ˆํ•‘ ๋ฐฉ์ง€

5. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ์˜ ์œ„ํ—˜ ๋ช…๋ น์–ด ์ฐจ๋‹จ

  • ์•ˆ์ „ ํ›…(Hook): rm -rf ๋“ฑ ์œ„ํ—˜ ๋ช…๋ น ์ž๋™ ๊ฐ์ง€ ๋ฐ ์ฐจ๋‹จ
  • gomi ์—ฐ๋™: ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•œ ์•ˆ์ „ ์‚ญ์ œ ๋ฐฉ์‹ ๊ถŒ์žฅ
  • Claude Code ์•ˆ์ „ ์„ค์ •: AI๊ฐ€ ์ƒ์„ฑํ•œ ๋ช…๋ น์–ด ์‹คํ–‰ ์ „ ํ™•์ธ ์ ˆ์ฐจ ์ ์šฉ

๐Ÿ” ๋ณด์•ˆ ์ ๊ฒ€ ๊ฒฐ๊ณผ

์ตœ์‹  ์ ๊ฒ€ ์ผ์‹œ: 2025-07-29

์˜์กด์„ฑ ์ ๊ฒ€

npm audit --audit-level moderate
# ๊ฒฐ๊ณผ: found 0 vulnerabilities โœ…

๊ธฐ๋ฐ€ ์ •๋ณด ์Šค์บ”

  • API ํ‚ค ํ•˜๋“œ์ฝ”๋”ฉ: ์—†์Œ โœ…
  • ๋น„๋ฐ€๋ฒˆํ˜ธ/ํ† ํฐ ํ•˜๋“œ์ฝ”๋”ฉ: ์—†์Œ โœ…
  • ๊ธฐ๋ฐ€ ํŒŒ์ผ Git ์ œ์™ธ ์„ค์ •: ์ ์ ˆ โœ…

์ฝ”๋“œ ๋ณด์•ˆ

  • ์ž…๋ ฅ ๊ฒ€์ฆ: ์ ์ ˆํžˆ ๊ตฌํ˜„๋จ โœ…
  • ์—๋Ÿฌ ์ฒ˜๋ฆฌ: ์ ์ ˆํžˆ ๊ตฌํ˜„๋จ โœ…
  • XSS ๋ฐฉ์ง€: CSP ํ—ค๋” ์ ์šฉ โœ…

๐Ÿšจ ์ทจ์•ฝ์  ์‹ ๊ณ  ์ ˆ์ฐจ

๋ณด์•ˆ์ƒ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ์•„๋ž˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณด๊ณ ํ•ด ์ฃผ์„ธ์š”:

  1. GitHub Issues: ์ผ๋ฐ˜์ ์ธ ๋ณด์•ˆ ์ด์Šˆ
  2. ์ง์ ‘ ์—ฐ๋ฝ: ์‹ฌ๊ฐํ•œ ์ทจ์•ฝ์ ์ผ ๊ฒฝ์šฐ ๋ณด์•ˆ ๋‹ด๋‹น์ž์—๊ฒŒ ์ง์ ‘ ๋ณด๊ณ 

๐Ÿ“‹ ๊ฐœ๋ฐœ์ž ๋ณด์•ˆ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

ํ•„์ˆ˜ ํ™•์ธ ํ•ญ๋ชฉ

  • npm audit ๊ฒฐ๊ณผ ์ทจ์•ฝ์  0๊ฑด
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๋ชจ๋“  ๊ธฐ๋ฐ€ ์ •๋ณด ์ €์žฅ
  • ๋ชจ๋“  API ์—”๋“œํฌ์ธํŠธ์— ์ž…๋ ฅ ๊ฒ€์ฆ ์ ์šฉ
  • ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์— ๊ธฐ๋ฐ€ ์ •๋ณด ํฌํ•จ ๊ธˆ์ง€
  • ์œ„ํ—˜ ๋ช…๋ น ์‹คํ–‰ ์ „ ์•ˆ์ „ ํ™•์ธ

๊ถŒ์žฅ ์‚ฌํ•ญ

  • ์˜์กด์„ฑ ์ •๊ธฐ ์—…๋ฐ์ดํŠธ
  • ๋ณด์•ˆ ํ—ค๋”(CSP ๋“ฑ) ์ ์ ˆํžˆ ์„ค์ •
  • ๋กœ๊ทธ์— ๊ธฐ๋ฐ€ ์ •๋ณด ๊ธฐ๋ก ๊ธˆ์ง€
  • ์ตœ์†Œ ๊ถŒํ•œ ์›์น™(Principle of Least Privilege) ์ ์šฉ

๐Ÿ”„ ์ง€์†์ ์ธ ๋ณด์•ˆ ๊ด€๋ฆฌ

์ด ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณด์•ˆ ์œ ์ง€ ํ™œ๋™์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:

  1. ์ž๋™ํ™”๋œ ๋ณด์•ˆ ๊ฒ€์‚ฌ: Git hooks๋กœ ์œ„ํ—˜ ์ž‘์—… ์ฐจ๋‹จ
  2. ์ •๊ธฐ ์ ๊ฒ€: ์˜์กด์„ฑ ๋ฐ ์ฝ”๋“œ ๋ณด์•ˆ ์ƒํƒœ ์ฃผ๊ธฐ์  ํ™•์ธ
  3. ๊ต์œก์  ๋ฐฐ๋ ค: ์ดˆ๋ณด์ž์—๊ฒŒ ์•ˆ์ „ํ•œ ํ•™์Šต ํ™˜๊ฒฝ ์ œ๊ณต

์ตœ์ข…์—…๋ฐ์ดํŠธ: 2025-08-01 18:55:00 KST

There aren't any published security advisories