๐Ÿ›ก๏ธ Laravel Secure Baseline: ํŒŒ์ดํ”„๋ผ์ธ์ด ๋งˆ๋•…ํžˆ ๋ฐ›์•„์•ผ ํ•  ์ˆ˜ํ˜ธ์ž

๋ฐœํ–‰: (2025๋…„ 12์›” 4์ผ ์˜ค์ „ 04:30 GMT+9)
4 min read
์›๋ฌธ: Dev.to

Source: Dev.to

Laravel ํ”„๋กœ์ ํŠธ์—์„œ ๊ฒ€์‚ฌํ•˜๋Š” ํ•ญ๋ชฉ

  • ํ™˜๊ฒฝ ์•ˆ์ „์„ฑ: APP_DEBUG, APP_KEY, APP_URL, APP_ENV
  • ๋ณด์•ˆ ์ฟ ํ‚ค ๋ฐ ํ—ค๋”: HSTS, CSP, X-Frame-Options, SameSite, Secure, HttpOnly
  • ์œ„ํ—˜ํ•œ ์„ค์ •: CORS ์™€์ผ๋“œ์นด๋“œ, ๋‚ฎ์€ ๋กœ๊ทธ ๋ ˆ๋ฒจ, ๋…ธ์ถœ๋œ ์Šคํ† ๋ฆฌ์ง€
  • ๋””๋ฒ„๊ทธ ๋ˆ„์ˆ˜: Telescope, Horizon, phpinfo() ๋ฐ ๋””๋ฒ„๊ทธ ๋ผ์šฐํŠธ๊ฐ€ ์žˆ์–ด์„œ๋Š” ์•ˆ ๋˜๋Š” ๊ณณ์— ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ
  • ์˜์กด์„ฑ ๊ด€๋ฆฌ: ์˜ค๋ž˜๋˜์—ˆ๊ฑฐ๋‚˜ ๋ณด์•ˆ์— ์ทจ์•ฝํ•œ Composer ํŒจํ‚ค์ง€
  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณด์•ˆ: APP_URL ๋ถˆ์ผ์น˜, ๊ด€๋Œ€ํ•จ ์„ธ์…˜ ๋“œ๋ผ์ด๋ฒ„, ์ƒ์„ธ ์˜ค๋ฅ˜

์„ ํƒ์  --fail-on ๊ฐ์ง€๋Š” CI์—์„œ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ฐ’์ด ๋ฐœ๊ฒฌ๋  ๋•Œ ๋ฐฐํฌ๋ฅผ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๋ฌธ์ œ๊ฐ€ ๊ฐ์ง€๋˜๋ฉด ๋„๊ตฌ๋Š” ์‹คํŒจ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค, ์˜ˆ:

๐Ÿšจ CI BLOCKED โ€” APP_DEBUG=true detected in production environment.

๋น ๋ฅธ ์„ค์น˜

composer require ind4skylivey/laravel-secure-baseline --dev

์ตœ์†Œ GitHub Actions ๋‹จ๊ณ„

- run: php artisan secure:scan --fail-on=fail --error-exit-code=1

์ด ๋ช…๋ น์„ GitHub Actions CI ์ž‘์—…์— ์ถ”๊ฐ€ํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์— ๋ณด์•ˆ ์ž์„ธ์™€ ๋น›๋‚˜๋Š” ๋ฐฉํŒจ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ƒ์„ฑ๋˜๋Š” ์ถœ๋ ฅ ํ˜•์‹

  • CLI ํ…์ŠคํŠธ ๋ณด๊ณ ์„œ
  • HTML ๋Œ€์‹œ๋ณด๋“œ
  • JSON ๊ตฌ์กฐํ™” ์ถœ๋ ฅ
  • Markdown ๋ณด๊ณ ์„œ
  • SARIF (GitHub ๋ณด์•ˆ ์•Œ๋ฆผ์šฉ)
  • CI ์‹คํŒจ ์‹œ GitHub ์ฃผ์„
  • โ€œ์ „๋ฌธ ๋ณด์•ˆ ์ „์„คโ€ ๋А๋‚Œ์„ ์œ„ํ•œ SARIFโ€ฏ+โ€ฏMarkdown ์กฐํ•ฉ

--fail-on=fail ๋ชจ๋“œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋  ๋•Œ ๋ฐฐํฌ๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

ํŒ€์ด ์ฑ„ํƒํ•˜๋Š” ์ด์œ 

  • ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํ™˜๊ฒฝ์—์„œ APP_DEBUG=true๊ฐ€ ๋‚˜ํƒ€๋‚  ๊ฒฝ์šฐ CI ๋ฐฐํฌ๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์•ˆ ์ฟ ํ‚ค์™€ ํ—ค๋”๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์™ธ๋ถ€ ํ˜ธ์ถœ ์—†์ด ์˜์กด์„ฑ์„ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค.
  • SARIF์™€ ๊ฐ™์€ GitHub ์นœํ™”์ ์ธ ๋ณด์•ˆ ํ˜•์‹์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋น ๋ฅด๊ณ  ๋กœ์ปฌ์—์„œ ์‹คํ–‰๋˜๋ฉฐ ํ„ฐ๋ฏธ๋„์˜ ์ฃผ์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ๋ชจ

โœ… All clear. The deploy rune glows softly. You may pass.

์ด ๋„๊ตฌ๋Š” ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ , ๋ฌธ์ œ๋ฅผ ํฌ์ฐฉํ•˜๋ฉฐ, ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹คโ€”์ฆ‰, CI๊ฐ€ ๊ฐ‘์˜ท์„ ์ž…์€ ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์š”์ƒˆ์— ๊ธฐ์—ฌํ•˜๊ธฐ

์ƒˆ๋กœ์šด ๊ฒ€์ฆ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋‚˜์š”? ์ œ์•ˆํ•ด ์ฃผ์„ธ์š”. ํ•ฉ๋ฆฌ์ ์ด๋“ , ๊ธฐ์ดํ•˜๋“ , ์˜๊ฐ์„ ๋ฐ›์€ ๊ฒƒ์ด๋“ โ€”CI์™€ ์‹ค์ œ ํ™˜๊ฒฝ์—์„œ ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒ€์ฆ์ด ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ณด์•ˆ ์ œ์•ˆ์€ SECURITY.md์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
  • ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ๊ฐœ์„ .
  • ์ด์Šˆ ํ‹ฐ์ผ“์„ ํ†ตํ•œ ๊ฑด์ „ํ•œ ๋Œ€ํ™”.

CI ํŒŒ์ดํ”„๋ผ์ธ์€ ์—„๊ฒฉํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋น ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ๊ฒ€์ฆ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. Laravel Secure Baseline์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐํฌ๊ฐ€ ์ค‘๋‹จ๋˜์ง€ ์•Š๊ณ , ์•ฑ์ด ๋ˆ„์ถœ๋˜์ง€ ์•Š์œผ๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ์•ˆ์‹ฌํ•˜๊ณ  ์ž ์„ ์ž˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ์ฃผ์˜ ์ด์ƒํ•จ์€ ๋ณ€ํ•จ์—†์ง€๋งŒ, ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์€ ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

SaaS IA ๋‰ด์Šค

SaaS IA ๋‰ด์Šค์šฉ ์ปค๋ฒ„ ์ด๋ฏธ์ง€ https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazon...

#Kiro๋ฅผ ์‚ฌ์šฉํ•ด Poof!๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ฌผ๊ฑด์„ ์–ด์ง€๋Ÿฌ์šด ํœด๋Œ€ํฐ ์‚ฌ์ง„์—์„œ ๋ฐ•๋ฌผ๊ด€ ์ˆ˜์ค€์˜ ์‹œ๊ฐ์  ์ธ๋ฒคํ† ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ์•ฑ์œผ๋กœ, ๋ฌด์—‡์„ ๋ณด๊ด€ํ•˜๊ณ , ํŒ๋งคํ•˜๊ณ , ๊ธฐ๋ถ€ํ• ์ง€ ์‰ฝ๊ฒŒ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ์ด๋ฏธ์ง€ ์ƒ์„ฑ(FLUX.2) ๋ฐ ์˜๋ฏธ ๊ฒ€์ƒ‰ ๊ธฐ์ˆ  ํ™œ์šฉ!

!Forem ๋กœ๊ณ https://media2.dev.to/dynamic/image/width=65,height=,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%...

ํ˜ผ๋ˆ์—์„œ ์ฝ”๋“œ๋กœ: ALPHALABS

๋ฐค์ƒˆ๋„๋ก ๋‚˜๋ฅผ ๊ดด๋กญํžŒ ๋ฌธ์ œ ๋‚˜๋Š” ๋ˆ„๊ตฌ๋‚˜ AI ํŠธ๋ ˆ์ด๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ์ „๋žต์„ ๋ฐฑํ…Œ์ŠคํŠธํ•˜๋ฉฐ, ์„ฑ๊ณผ๋ฅผ ์ž…์ฆํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋žซํผ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.