Skip to content

Latest commit

ย 

History

History
148 lines (100 loc) ยท 3.98 KB

File metadata and controls

148 lines (100 loc) ยท 3.98 KB

๋ณด์•ˆ ์ •์ฑ… (Security Policy)

์ง€์› ๋ฒ„์ „

์ด ํ”„๋กœ์ ํŠธ๋Š” ๋ฌธ์„œ ๋ฐ ์›Œํฌํ”Œ๋กœ ๊ฐ€์ด๋“œ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์˜ ๋ฌธ์„œ๊ฐ€ ํ•ญ์ƒ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „ ์ง€์› ์ƒํƒœ
main ๋ธŒ๋žœ์น˜ โœ… ์ง€์›
์ด์ „ ์ปค๋ฐ‹ โŒ ์ง€์› ์•ˆํ•จ

๋ณด์•ˆ ์ทจ์•ฝ์  ์‹ ๊ณ 

์‹ ๊ณ  ๋Œ€์ƒ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณด์•ˆ ๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜์…จ๋‹ค๋ฉด ์‹ ๊ณ ํ•ด ์ฃผ์„ธ์š”:

  • ์˜ˆ์ œ ์ฝ”๋“œ์˜ ๋ณด์•ˆ ์ทจ์•ฝ์ : ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ ํŒจํ„ด, ์ทจ์•ฝํ•œ ์˜ˆ์ œ
  • ๋ฏผ๊ฐํ•œ ์ •๋ณด ๋…ธ์ถœ: ์‹ค์ˆ˜๋กœ ํฌํ•จ๋œ API ํ‚ค, ๋น„๋ฐ€๋ฒˆํ˜ธ, ๊ฐœ์ธ์ •๋ณด
  • ์•…์„ฑ ์ฝ˜ํ…์ธ : ์•…์„ฑ ๋งํฌ, ํ”ผ์‹ฑ ์‹œ๋„, ์œ ํ•ดํ•œ ์ฝ˜ํ…์ธ 
  • ์ž˜๋ชป๋œ ๋ณด์•ˆ ๊ฐ€์ด๋“œ: ๋ณด์•ˆ์— ์ทจ์•ฝํ•œ ๋ฐฉ๋ฒ•์„ ๊ถŒ์žฅํ•˜๋Š” ๋ฌธ์„œ

์‹ ๊ณ  ๋ฐฉ๋ฒ•

์ผ๋ฐ˜์ ์ธ ๋ณด์•ˆ ์ด์Šˆ

๊ณต๊ฐœ์ ์œผ๋กœ ๋…ผ์˜ํ•ด๋„ ๋˜๋Š” ๋ณด์•ˆ ๊ด€๋ จ ๊ฐœ์„ ์‚ฌํ•ญ:

  1. Issue ์ƒ์„ฑ
  2. type: bug ๋ผ๋ฒจ ์‚ฌ์šฉ
  3. ์ œ๋ชฉ์— [Security] ์ ‘๋‘์‚ฌ ์ถ”๊ฐ€
์˜ˆ์‹œ: [Security] examples/hooks์˜ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ช…๋ น์–ด ์‹คํ–‰ ์˜ˆ์ œ

๋ฏผ๊ฐํ•œ ๋ณด์•ˆ ์ด์Šˆ

๊ณต๊ฐœ์ ์œผ๋กœ ๋…ผ์˜ํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฏผ๊ฐํ•œ ๋ณด์•ˆ ๋ฌธ์ œ:

  1. GitHub Security Advisories ์‚ฌ์šฉ

  2. ๋˜๋Š” ๋น„๊ณต๊ฐœ ์ด์Šˆ ์ƒ์„ฑ

    • ๋ฉ”์ธํ…Œ์ด๋„ˆ์—๊ฒŒ ์ง์ ‘ ์—ฐ๋ฝ

์‹ ๊ณ  ๋‚ด์šฉ

๋ณด์•ˆ ์ด์Šˆ ์‹ ๊ณ  ์‹œ ๋‹ค์Œ ์ •๋ณด๋ฅผ ํฌํ•จํ•ด ์ฃผ์„ธ์š”:

## ๋ณด์•ˆ ์ด์Šˆ ์„ค๋ช…
[๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์„ค๋ช…]

## ์˜ํ–ฅ๋ฐ›๋Š” ํŒŒ์ผ
[ํŒŒ์ผ ๊ฒฝ๋กœ ๋ฐ ๋ผ์ธ ๋ฒˆํ˜ธ]

## ์žฌํ˜„ ๋‹จ๊ณ„
1. [์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„]
2. [๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„]
3. ...

## ์˜ˆ์ƒ๋˜๋Š” ์œ„ํ—˜
[์ด ์ทจ์•ฝ์ ์ด ์•…์šฉ๋  ๊ฒฝ์šฐ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ]

## ๊ถŒ์žฅ ์ˆ˜์ • ๋ฐฉ๋ฒ• (์„ ํƒ)
[์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์ˆ˜์ • ๋ฐฉ๋ฒ• ์ œ์•ˆ]

์‘๋‹ต ์‹œ๊ฐ„

์‹ฌ๊ฐ๋„ ์ดˆ๊ธฐ ์‘๋‹ต ํ•ด๊ฒฐ ๋ชฉํ‘œ
๊ธด๊ธ‰ (Critical) 24์‹œ๊ฐ„ ์ด๋‚ด 48์‹œ๊ฐ„ ์ด๋‚ด
๋†’์Œ (High) 48์‹œ๊ฐ„ ์ด๋‚ด 1์ฃผ์ผ ์ด๋‚ด
์ค‘๊ฐ„ (Medium) 1์ฃผ์ผ ์ด๋‚ด 2์ฃผ์ผ ์ด๋‚ด
๋‚ฎ์Œ (Low) 2์ฃผ์ผ ์ด๋‚ด ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค

๋ณด์•ˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€

์˜ˆ์ œ ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ

์ด ํ”„๋กœ์ ํŠธ์˜ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ ๋‹ค์Œ์„ ์ค€์ˆ˜ํ•ด ์ฃผ์„ธ์š”:

DO โœ…

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ
export API_KEY="${CLAUDE_API_KEY}"

# ์•ˆ์ „ํ•œ ํŒŒ์ผ ๊ถŒํ•œ
chmod 600 ~/.config/credentials
// ์ž…๋ ฅ ๊ฒ€์ฆ
const sanitizedInput = validateInput(userInput);

// ์•ˆ์ „ํ•œ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ
const safePath = path.resolve(baseDir, path.basename(filename));

DON'T โŒ

# ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์‹œํฌ๋ฆฟ
API_KEY="sk-1234567890abcdef"

# ์œ„ํ—˜ํ•œ ๋ช…๋ น์–ด ์‹คํ–‰
eval "$USER_INPUT"
// SQL ์ธ์ ์…˜ ์ทจ์•ฝ
db.query(`SELECT * FROM users WHERE id = ${userId}`);

// ๊ฒฝ๋กœ ์กฐ์ž‘ ์ทจ์•ฝ
fs.readFile(userProvidedPath);

๋ฌธ์„œ ์ž‘์„ฑ ์‹œ

  • ์‹ค์ œ API ํ‚ค, ํ† ํฐ, ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์˜ˆ์ œ์— ํฌํ•จํ•˜์ง€ ๋งˆ์„ธ์š”
  • ํ”Œ๋ ˆ์ด์Šคํ™€๋” ์‚ฌ์šฉ: your-api-key, <TOKEN>, xxxxxxxx
  • ๋ณด์•ˆ์— ์ทจ์•ฝํ•œ ๋ฐฉ๋ฒ•์„ ๊ถŒ์žฅํ•˜์ง€ ๋งˆ์„ธ์š”
  • ์œ„ํ—˜ํ•œ ๋ช…๋ น์–ด์—๋Š” ๊ฒฝ๊ณ  ๋ฌธ๊ตฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”
โš ๏ธ **์ฃผ์˜**: ์ด ๋ช…๋ น์–ด๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š”
์ ์ ˆํ•œ ๋ณด์•ˆ ์กฐ์น˜๋ฅผ ์ทจํ•˜์„ธ์š”.

๋ณด์•ˆ ์—…๋ฐ์ดํŠธ

๋ณด์•ˆ ๊ด€๋ จ ์—…๋ฐ์ดํŠธ๋Š” ๋‹ค์Œ์„ ํ†ตํ•ด ๊ณต์ง€๋ฉ๋‹ˆ๋‹ค:

๊ฐ์‚ฌ์˜ ๋ง

๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์ฑ…์ž„๊ฐ ์žˆ๊ฒŒ ์‹ ๊ณ ํ•ด ์ฃผ์‹  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์‹ ๊ณ ์ž์˜ ๋™์˜ ํ•˜์— ๊ธฐ์—ฌ์ž๋กœ ์ธ์ •ํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ