์›น์‚ฌ์ดํŠธ ๋ณด์•ˆ์˜ ์น˜๋ช…์ ์ธ ์ฃ„: ์˜ฌํ•ด ์ทจ์•ฝ์  ์Šค์บ๋„ˆ ํ†ต๊ณ„๋ฅผ ํ†ตํ•ด ๋ฐฐ์šด ๊ฒƒ

์•ฝ XNUMX๋…„ ์ „์— DataLine์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค IT ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ทจ์•ฝ์ ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค๋Š” ์šด์˜์— ๊ด€ํ•œ Qualys ํด๋ผ์šฐ๋“œ ์†”๋ฃจ์…˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๋งํ–ˆ๋‹ค. ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” 291๋…„ ๋™์•ˆ ์šฐ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ์ดํŠธ์— ๋Œ€ํ•ด XNUMX๊ฑด์˜ ์Šค์บ”์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๋ฐ˜์ ์ธ ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ ํ†ต๊ณ„๋ฅผ ์ถ•์ ํ–ˆ์Šต๋‹ˆ๋‹ค. 

์•„๋ž˜ ๊ธฐ์‚ฌ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์ˆ˜์ค€์˜ ์ค‘์š”๋„ ๋’ค์— ์ˆจ์–ด ์žˆ๋Š” ์›น์‚ฌ์ดํŠธ ๋ณด์•ˆ์˜ ํ—ˆ์ ์„ ์ •ํ™•ํžˆ ๋ณด์—ฌ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์Šค์บ๋„ˆ๊ฐ€ ํŠนํžˆ ์ž์ฃผ ๋ฐœ๊ฒฌํ•œ ์ทจ์•ฝ์ ์€ ๋ฌด์—‡์ธ์ง€, ์™œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ์ž์‹ ์„ ๋ณดํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

์›น์‚ฌ์ดํŠธ ๋ณด์•ˆ์˜ ์น˜๋ช…์ ์ธ ์ฃ„: ์˜ฌํ•ด ์ทจ์•ฝ์  ์Šค์บ๋„ˆ ํ†ต๊ณ„๋ฅผ ํ†ตํ•ด ๋ฐฐ์šด ๊ฒƒ

Qualys๋Š” ๋ชจ๋“  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ทจ์•ฝ์„ฑ์„ ๋‚ฎ์Œ, ์ค‘๊ฐ„, ๋†’์Œ์˜ ์„ธ ๊ฐ€์ง€ ์ค‘์š”๋„ ์ˆ˜์ค€์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. '์‹ฌ๊ฐ๋„'๋ณ„ ๋ถ„ํฌ๋ฅผ ๋ณด๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๋‚˜์˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‹ฌ๊ฐ๋„๊ฐ€ ๋†’์€ ์ทจ์•ฝ์ ์€ ๊ฑฐ์˜ ์—†์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„ ์‹ฌ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 

์›น์‚ฌ์ดํŠธ ๋ณด์•ˆ์˜ ์น˜๋ช…์ ์ธ ์ฃ„: ์˜ฌํ•ด ์ทจ์•ฝ์  ์Šค์บ๋„ˆ ํ†ต๊ณ„๋ฅผ ํ†ตํ•ด ๋ฐฐ์šด ๊ฒƒ

๊ทธ๋Ÿฌ๋‚˜ ๋น„ํŒ์ ์ด์ง€ ์•Š๋‹ค๊ณ  ํ•ด์„œ ๋ฌดํ•ดํ•˜๋‹ค๋Š” ๋œป์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋˜ํ•œ ์‹ฌ๊ฐํ•œ ์†์ƒ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 

์ฃผ์š” "์ค‘์š”ํ•˜์ง€ ์•Š์€" ์ทจ์•ฝ์ 

  1. ํ˜ผํ•ฉ ์ฝ˜ํ…์ธ  ์ทจ์•ฝ์ .

    ์›น์‚ฌ์ดํŠธ ๋ณด์•ˆ์˜ ํ‘œ์ค€์€ ์•”ํ˜ธํ™”๋ฅผ ์ง€์›ํ•˜๊ณ  ์ •๋ณด๊ฐ€ ๊ฐ€๋กœ์ฑ„์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•˜๋Š” HTTPS ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

    ์ผ๋ถ€ ์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉ ํ˜ผํ•ฉ ์ฝ˜ํ…์ธ : ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š์€ HTTP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ž์ฃผ ์ „๋‹ฌ๋˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ˆ˜๋™์  ์ฝ˜ํ…์ธ  โ€“ ์‚ฌ์ดํŠธ ํ‘œ์‹œ์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ •๋ณด: ์‚ฌ์ง„, CSS ์Šคํƒ€์ผ. ํ•˜์ง€๋งŒ ๊ฐ€๋” ์ด๋Ÿฐ ์‹์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™œ์„ฑ ์ฝ˜ํ…์ธ : ์‚ฌ์ดํŠธ์˜ ๋™์ž‘์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํŠน์ˆ˜ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ฒ„์—์„œ ๋“ค์–ด์˜ค๋Š” ํ™œ์„ฑ ์ฝ˜ํ…์ธ ๊ฐ€ ํฌํ•จ๋œ ์ •๋ณด๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์‘๋‹ต์„ ์ฆ‰์‹œ ์ˆ˜์ •ํ•˜๋ฉฐ ์ œ์ž‘์ž๊ฐ€ ์˜๋„ํ•˜์ง€ ์•Š์€ ๋ฐฉ์‹์œผ๋กœ ๊ธฐ๊ณ„๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

    ์ตœ์‹  ๋ฒ„์ „์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ํ˜ผํ•ฉ ์ฝ˜ํ…์ธ ๊ฐ€ ํฌํ•จ๋œ ์‚ฌ์ดํŠธ๊ฐ€ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฝ๊ณ ํ•˜๊ณ  ํ•ด๋‹น ์ฝ˜ํ…์ธ ๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์›น์‚ฌ์ดํŠธ ๊ฐœ๋ฐœ์ž๋Š” ์ฝ˜์†”์—์„œ๋„ ๋ธŒ๋ผ์šฐ์ € ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ด์–ด ํญ์Šค

    ์›น์‚ฌ์ดํŠธ ๋ณด์•ˆ์˜ ์น˜๋ช…์ ์ธ ์ฃ„: ์˜ฌํ•ด ์ทจ์•ฝ์  ์Šค์บ๋„ˆ ํ†ต๊ณ„๋ฅผ ํ†ตํ•ด ๋ฐฐ์šด ๊ฒƒ

    ์™œ ์œ„ํ—˜ํ•ฉ๋‹ˆ๊นŒ?: ๊ณต๊ฒฉ์ž๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€๋กœ์ฑ„๊ณ  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ต์ฒดํ•˜๋ฉฐ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์‚ฌ์ดํŠธ์— ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์‚ฌ์ดํŠธ ๋ฐฉ๋ฌธ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜๋”๋ผ๋„ ๋‹ค์Œ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ํ”ผ์‹ฑ โ€“ ์‚ฌ๊ธฐ์ ์ธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ฐ€ ์ •๋ณด๋ฅผ ์–ป๋Š” ๊ฒฝ์šฐ. ์˜ˆ๋ฅผ ๋“ค์–ด, ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ์นœ์ˆ™ํ•œ ์‚ฌ์ดํŠธ๋กœ ๊ฐ€์žฅํ•˜๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์‚ฌ์ดํŠธ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๋ฆฌ๋””๋ ‰์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์•…์„ฑ ์‚ฌ์ดํŠธ๊ฐ€ ์›๋ณธ๋ณด๋‹ค ํ›จ์”ฌ ์ข‹์•„ ๋ณด์ด๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์–‘์‹์„ ์ž‘์„ฑํ•˜๊ณ  ๊ธฐ๋ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์ถœํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 

    ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฒƒ: ์‚ฌ์ดํŠธ ๊ด€๋ฆฌ์ž๊ฐ€ SSL/TLS ์ธ์ฆ์„œ๋ฅผ ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑํ•œ ๊ฒฝ์šฐ๋ผ๋„ ์ธ์  ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์ทจ์•ฝ์ ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŽ˜์ด์ง€ ์ค‘ ํ•˜๋‚˜์— ์ƒ๋Œ€ ๋งํฌ๊ฐ€ ์•„๋‹Œ http์˜ ์ ˆ๋Œ€ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  http์—์„œ https๋กœ์˜ ๋ฆฌ๋””๋ ‰์…˜์„ ์„ค์ •ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. 

    ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์ดํŠธ์˜ ํ˜ผํ•ฉ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž ์ฝ˜์†”์—์„œ ์•Œ๋ฆผ์„ ์ฝ์–ด๋ณด์„ธ์š”. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐœ๋ฐœ์ž๋Š” ์˜ค๋žซ๋™์•ˆ ์ง€๋ฃจํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž๋™ํ™”๋œ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SSL ํ™•์ธ, ๋ฌด๋ฃŒ Lighthouse ์†Œํ”„ํŠธ์›จ์–ด ๋˜๋Š” ์œ ๋ฃŒ ์†Œํ”„ํŠธ์›จ์–ด Screaming Frog SEO Spider.

    ๋˜ํ•œ, ์ƒ์†๋œ ์ฝ”๋“œ์ธ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์˜ ๋ฌธ์ œ๋กœ ์ธํ•ด ์ทจ์•ฝ์ ์ด ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ผ๋ถ€ ํŽ˜์ด์ง€๊ฐ€ https๋กœ์˜ ์‚ฌ์ดํŠธ ์ „ํ™˜์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ์ด์ „ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.    

  2. "HTTPOnly" ๋ฐ "๋ณด์•ˆ" ํ”Œ๋ž˜๊ทธ๊ฐ€ ์—†๋Š” ์ฟ ํ‚ค์ž…๋‹ˆ๋‹ค.

    "HTTPOnly" ์†์„ฑ์€ ๊ณต๊ฒฉ์ž๊ฐ€ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ํ›”์น˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ์ฟ ํ‚ค๊ฐ€ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค. "secure" ํ”Œ๋ž˜๊ทธ๋Š” ์ฟ ํ‚ค๊ฐ€ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ „์†ก๋˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณด์•ˆ HTTPS ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฟ ํ‚ค๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ†ต์‹ ์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. 

    ๋‘ ์†์„ฑ ๋ชจ๋‘ ์ฟ ํ‚ค ์†์„ฑ์— ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

    Set-Cookie: Secure; HttpOnly

    ์™œ ์œ„ํ—˜ํ•ฉ๋‹ˆ๊นŒ?: ์‚ฌ์ดํŠธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋Ÿฌํ•œ ์†์„ฑ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ณต๊ฒฉ์ž๊ฐ€ ์ฟ ํ‚ค์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€๋กœ์ฑ„์„œ ์•…์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ์— ์ฟ ํ‚ค๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์šฉ์ž ์„ธ์…˜์„ ๊ฐ€๋กœ์ฑ„๊ณ  ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์‚ฌ์ดํŠธ์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

    ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฒƒ: ์ผ๋ฐ˜์ ์œผ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์†์„ฑ์ด ์ž๋™์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ์›น ์„œ๋ฒ„ ๊ตฌ์„ฑ์„ ํ™•์ธํ•˜๊ณ  ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค: Set-Cookie HttpOnly; ์•ˆ์ „ํ•œ.

    ์ด ๊ฒฝ์šฐ "HTTPOnly" ์†์„ฑ์€ ์ฟ ํ‚ค๋ฅผ ๊ท€ํ•˜์˜ JavaScript์— ๋ณด์ด์ง€ ์•Š๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.  

  3. ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ์ทจ์•ฝ์ .

    ์Šค์บ๋„ˆ๋Š” ์ž ์žฌ์ ์œผ๋กœ ๊ธฐ๋ฐ€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๊ณต๊ฐœ์ ์œผ๋กœ ์•ก์„ธ์Šค ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์ด๋‚˜ ์›น ์‚ฌ์ดํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์ทจ์•ฝ์ ์„ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐœ๋ณ„ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ํŒŒ์ผ์ด๋‚˜ ์ „์ฒด ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํƒ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์€ ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์ด ์ž˜๋ชป ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์™œ ์œ„ํ—˜ํ•ฉ๋‹ˆ๊นŒ?: ํŒŒ์ผ ์‹œ์Šคํ…œ์ด "๋Œ์ถœ"๋˜๋ฉด ๊ณต๊ฒฉ์ž๋Š” ์šด์˜ ์ฒด์ œ ์ธํ„ฐํŽ˜์ด์Šค์— ๋น ์ ธ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ €์žฅ๋œ ํด๋”๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ์ง€ ๋งˆ์„ธ์š”!). ๋˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹œ๋ฅผ ํ›”์น˜๊ณ  ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž…ํ•˜์—ฌ ์‹œ์Šคํ…œ์—์„œ ๊ถŒํ•œ์„ ๋†’์ด๊ณ  ์ธํ”„๋ผ๋กœ ๋” ๊นŠ์ด ๋“ค์–ด๊ฐ€๋ ค๊ณ  ์‹œ๋„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.  

    ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฒƒ: ์ ‘๊ทผ๊ถŒํ•œ์„ ์žŠ์ง€ ๋ง๊ณ  ํ”Œ๋žซํผ, ์›น ์„œ๋ฒ„, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜์—ฌ ์›น ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ "ํƒˆ์ถœ"ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •ํ•˜์„ธ์š”.

  4. ์ž๋™ ์ฑ„์šฐ๊ธฐ๊ฐ€ ํ™œ์„ฑํ™”๋œ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ์–‘์‹์ž…๋‹ˆ๋‹ค.

    ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ์—์„œ ์–‘์‹์„ ์ž์ฃผ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. 

    ์›น์‚ฌ์ดํŠธ์˜ ์–‘์‹์—๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋‚˜ ์‹ ์šฉ์นด๋“œ ๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ํ•„๋“œ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•„๋“œ์˜ ๊ฒฝ์šฐ ์‚ฌ์ดํŠธ ์ž์ฒด์—์„œ ์–‘์‹ ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. 

    ์™œ ์œ„ํ—˜ํ•ฉ๋‹ˆ๊นŒ?: ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์— ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋‚˜์ค‘์— ๊ณต๊ฒฉ์ž๊ฐ€ ํ”ผ์‹ฑ ๋“ฑ์„ ํ†ตํ•ด ํ•ด๋‹น ์ •๋ณด๋ฅผ ๊ฐ€๋กœ์ฑŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ์งˆ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด๋ฅผ ์žŠ์–ด๋ฒ„๋ฆฐ ์›น ๊ฐœ๋ฐœ์ž๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์„ค์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

    ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฒƒ: ์ด ๊ฒฝ์šฐ์—๋Š” ํŽธ์˜์„ฑ๊ณผ ๋ณด์•ˆ์ด๋ผ๋Š” ๊ณ ์ „์ ์ธ ๊ฐˆ๋“ฑ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ณ ๋ คํ•œ๋‹ค๋ฉด ์˜์‹์ ์œผ๋กœ ์ž๋™ ์™„์„ฑ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋”ฐ๋ผ์•ผ ํ•  ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์›น ์ปจํ…์ธ  ์ ‘๊ทผ์„ฑ ์ง€์นจ โ€“ ์žฅ์• ๊ฐ€ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ์ฝ˜ํ…์ธ  ์ ‘๊ทผ์„ฑ์— ๋Œ€ํ•œ ๊ถŒ์žฅ ์‚ฌํ•ญ. 

    ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” autocompete="off" ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™ ์™„์„ฑ์„ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

     <body>
        <form action="/ko/form/submit" method="get" autocomplete="off">
          <div>
            <input type="text" placeholder="First Name">
          </div>
          <div>
            <input type="text" id="lname" placeholder="Last Name" autocomplete="on">
          </div>
          <div>
            <input type="number" placeholder="Credit card number">
          </div>
          <input type="submit">
        </form>
      </body>

    ํ•˜์ง€๋งŒ Chrome์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” JavaScript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์šฐํšŒ๋˜๋ฉฐ ๋ ˆ์‹œํ”ผ์˜ ๋ณ€ํ˜•์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—

  5. X-Frame-Options ํ—ค๋”๋Š” ์‚ฌ์ดํŠธ ์ฝ”๋“œ์— ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 

    ์ด ํ—ค๋”๋Š” ํ”„๋ ˆ์ž„, iframe, ์‚ฝ์ž… ๋˜๋Š” ๊ฐœ์ฒด ํƒœ๊ทธ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ๋„์›€์„ ๋ฐ›์œผ๋ฉด ์‚ฌ์ดํŠธ๋ฅผ ํ”„๋ ˆ์ž„ ์•ˆ์— ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์„ ์™„์ „ํžˆ ๊ธˆ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด X-Frame-Options: ๊ฑฐ๋ถ€ ๊ฐ’์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” X-Frame-Options: sameorigin์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด iframe์— ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์€ ํ•ด๋‹น ๋„๋ฉ”์ธ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    ์™œ ์œ„ํ—˜ํ•ฉ๋‹ˆ๊นŒ?: ์ด๋Ÿฌํ•œ ํ—ค๋”๊ฐ€ ์—†์œผ๋ฉด ์•…์„ฑ ์‚ฌ์ดํŠธ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ–‰์œ„๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ์žฌํ‚น. ์ด ๊ณต๊ฒฉ์„ ์œ„ํ•ด ๊ณต๊ฒฉ์ž๋Š” ๋ฒ„ํŠผ ์œ„์— ํˆฌ๋ช…ํ•œ ํ”„๋ ˆ์ž„์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ์ž๋ฅผ ์†์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ๊ธฐ๊พผ์€ ์›น์‚ฌ์ดํŠธ์˜ ์†Œ์…œ ๋„คํŠธ์›Œํ‚น ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์ด ์ด ์‚ฌ์ดํŠธ์˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ํด๋ฆญ์ด ์ฐจ๋‹จ๋˜๊ณ  ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ํ™œ์„ฑ ์„ธ์…˜์ด ์žˆ๋Š” ์†Œ์…œ ๋„คํŠธ์›Œํฌ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์ŠคํŒธ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ๊ตฌ๋…์ž์™€ ์ข‹์•„์š”๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. 

    ์ด ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ณต๊ฒฉ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„ํŠผ์„ ์•…์„ฑ ์‚ฌ์ดํŠธ์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Š” ๊ท€ํ•˜์˜ ์ถ”์ฒœ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ด€์‹ฌ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.  

    ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฒƒ: ์›น ์„œ๋ฒ„๋‚˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์— ์ถฉ๋Œํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ง„ X-Frame-Options๋ฅผ ์„ค์ •ํ•  ๊ฒฝ์šฐ ์ทจ์•ฝ์ ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์„œ๋ฒ„์™€ ๋ฐธ๋Ÿฐ์„œ๋Š” ๋ฐฑ์—”๋“œ ์ฝ”๋“œ์— ๋น„ํ•ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๊ธฐ ๋•Œ๋ฌธ์— ํ—ค๋”๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.  

    X-Frame-Options ํ—ค๋”์˜ ๊ฑฐ๋ถ€ ๋ฐ ๋™์ผ ์ถœ์ฒ˜ ๊ฐ’์€ Yandex ์›น ๋ทฐ์–ด์˜ ์ž‘๋™์„ ๋ฐฉํ•ดํ•ฉ๋‹ˆ๋‹ค. ์›น๋ทฐ์–ด์—์„œ iframe ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•˜๋ ค๋ฉด ์„ค์ •์—์„œ ๋ณ„๋„์˜ ๊ทœ์น™์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด nginx์˜ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    http{
    ...
     map $http_referer $frame_options {
     "~webvisor.com" "ALLOW-FROM http://webvisor.com";
     default "SAMEORIGIN";
     }
     add_header X-Frame-Options $frame_options;
    ...
    }
    
    

  6. PRSSI(๊ฒฝ๋กœ ๊ธฐ์ค€ ์Šคํƒ€์ผ์‹œํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ) ์ทจ์•ฝ์ .  

    ์ด๋Š” ์‚ฌ์ดํŠธ ์Šคํƒ€์ผ์˜ ์ทจ์•ฝ์ ์ž…๋‹ˆ๋‹ค. ์Šคํƒ€์ผ ํŒŒ์ผ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด href="/ko/somefolder/styles.css/"์™€ ๊ฐ™์€ ์ƒ๋Œ€ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ์•…์„ฑ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์œผ๋ฉด ์ด๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๋Š” ํ•ด๋‹น URL์— ์ƒ๋Œ€ ๋งํฌ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ  ์Šคํƒ€์ผ ํ˜ธ์ถœ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ€์ผ์„ ๊ฐ€์žฅํ•˜์—ฌ ์•…์˜์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” badsite.ru/โ€ฆ/somefolder/styles.css/์™€ ๊ฐ™์€ ์š”์ฒญ์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

    ์™œ ์œ„ํ—˜ํ•ฉ๋‹ˆ๊นŒ?: ์‚ฌ๊ธฐ๊พผ์ด ๋˜ ๋‹ค๋ฅธ ๋ณด์•ˆ ํ—ˆ์ ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ด ์ทจ์•ฝ์ ์„ ์•…์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ฟ ํ‚ค๋‚˜ ํ† ํฐ์—์„œ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ํ›”์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฒƒ: X-Content-Type-Options ํ—ค๋”๋ฅผ nosniff๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €๋Š” ์Šคํƒ€์ผ์— ๋Œ€ํ•œ ์ฝ˜ํ…์ธ  ์œ ํ˜•์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์œ ํ˜•์ด text/css๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

์‹ฌ๊ฐํ•œ ์ทจ์•ฝ์ 

  1. ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ํŽ˜์ด์ง€๊ฐ€ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ฑ„๋„์„ ํ†ตํ•ด ์„œ๋ฒ„์—์„œ ์ „์†ก๋ฉ๋‹ˆ๋‹ค(๋น„๋ฐ€๋ฒˆํ˜ธ ํ•„๋“œ๊ฐ€ ํฌํ•จ๋œ HTML ์–‘์‹์€ HTTP๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋จ).

    ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ์ฑ„๋„์„ ํ†ตํ•œ ์„œ๋ฒ„์˜ ์‘๋‹ต์€ "์ค‘๊ฐ„์ž" ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๊ฐ€ ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์ด๋™ํ•˜๋Š” ๋™์•ˆ ๊ณต๊ฒฉ์ž๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€๋กœ์ฑ„์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์— ๋ผ์–ด๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

    ์™œ ์œ„ํ—˜ํ•ฉ๋‹ˆ๊นŒ?: ์‚ฌ๊ธฐ๊พผ์€ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ธฐ๋ฐ€ ๋ฐ์ดํ„ฐ ์–‘์‹์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ์–‘์‹์€ ๊ณต๊ฒฉ์ž์˜ ์„œ๋ฒ„๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค. 

    ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฒƒ: ์ผ๋ถ€ ์‚ฌ์ดํŠธ์—์„œ๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ๋Œ€์‹  ์ด๋ฉ”์ผ/์ „ํ™”๋กœ ์ผํšŒ์šฉ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ทจ์•ฝ์ ์€ ๊ทธ๋‹ค์ง€ ์‹ฌ๊ฐํ•˜์ง€ ์•Š์ง€๋งŒ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์‚ฌ์šฉ์ž์˜ ์‚ถ์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  2. ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ฑ„๋„์„ ํ†ตํ•ด ๋กœ๊ทธ์ธ ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํฌํ•จ๋œ ์–‘์‹ ๋ณด๋‚ด๊ธฐ(๋กœ๊ทธ์ธ ์–‘์‹์€ HTTPS๋ฅผ ํ†ตํ•ด ์ œ์ถœ๋˜์ง€ ์•Š์Œ)

    ์ด ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํฌํ•จ๋œ ์–‘์‹์ด ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ์ฑ„๋„์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์„œ๋ฒ„๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

    ์™œ ์œ„ํ—˜ํ•ฉ๋‹ˆ๊นŒ?: ์ด์ „ ์‚ฌ๋ก€์™€ ๋‹ฌ๋ฆฌ ์ด๋ฏธ ์‹ฌ๊ฐํ•œ ์ทจ์•ฝ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋กœ์ฑ„๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋กœ์ฑ„๊ธฐ๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. 

  3. ์•Œ๋ ค์ง„ ์ทจ์•ฝ์ ์ด ์žˆ๋Š” JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ.

    ์Šค์บ” ์ค‘์— ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ๋ฒ„์ „์ด ํฌํ•จ๋œ jQuery์˜€์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ฒ„์ „์—๋Š” ์ ์–ด๋„ ํ•˜๋‚˜ ์ด์ƒ์˜ ์•Œ๋ ค์ง„ ์ทจ์•ฝ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ทจ์•ฝ์ ์˜ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ์˜ํ–ฅ์€ ๋งค์šฐ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์™œ ์œ„ํ—˜ํ•ฉ๋‹ˆ๊นŒ?: ์•Œ๋ ค์ง„ ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ ์ต์Šคํ”Œ๋กœ์ž‡์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ:

    ์›น์‚ฌ์ดํŠธ ๋ณด์•ˆ์˜ ์น˜๋ช…์ ์ธ ์ฃ„: ์˜ฌํ•ด ์ทจ์•ฝ์  ์Šค์บ๋„ˆ ํ†ต๊ณ„๋ฅผ ํ†ตํ•ด ๋ฐฐ์šด ๊ฒƒ

    ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฒƒ: ์ •๊ธฐ์ ์œผ๋กœ ์ฃผ๊ธฐ(์•Œ๋ ค์ง„ ์ทจ์•ฝ์  ๊ฒ€์ƒ‰ - ์ˆ˜์ • - ํ™•์ธ)๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์˜ค๋ž˜๋œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ง€์›ํ•˜๊ฑฐ๋‚˜ ๋น„์šฉ์„ ์ ˆ์•ฝํ•˜๊ธฐ ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ ๋ ˆ๊ฑฐ์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์•Œ๋ ค์ง„ ์ทจ์•ฝ์ ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ฐพ์œผ์‹ญ์‹œ์˜ค. 

  4. XSS(๊ต์ฐจ ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…). 
    XSS(๊ต์ฐจ ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…) ๋˜๋Š” ๊ต์ฐจ ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ๊ณต๊ฒฉ์œผ๋กœ, ์ด๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•…์„ฑ ์ฝ”๋“œ๊ฐ€ ์œ ์ž…๋ฉ๋‹ˆ๋‹ค. Qualys๊ฐ€ ์ด๋Ÿฌํ•œ ์ทจ์•ฝ์ ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ž ์žฌ์ ์ธ ๊ณต๊ฒฉ์ž๊ฐ€ ์•…์˜์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ž์‹ ์˜ js ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์ดํŠธ ์ฝ”๋“œ์— ๋„์ž…ํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ์ด๋ฏธ ๋„์ž…ํ–ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

    ์ €์žฅ๋œ XSS ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์„œ๋ฒ„์— ๋‚ด์žฅ๋˜์–ด ๊ณต๊ฒฉ๋ฐ›์€ ํŽ˜์ด์ง€๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ด๋ฆด ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค.

    ๋ฐ˜์‚ฌ๋œ XSS HTTP ์š”์ฒญ์— ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‚ฝ์ž…๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ HTTP ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๊ณ  ํŒจํ‚ค์ง•ํ•œ ํ›„ ์ฆ‰์‹œ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๊ฐ€ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€๋กœ์ฑ„์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด

    <script>/*+ั‡ั‚ะพ+ั‚ะพ+ะฟะปะพั…ะพะต+*/</script> 

    ๊ทธ๋Ÿฌ๋ฉด ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์•…์˜์ ์ธ ์š”์ฒญ์ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

    XSS์˜ ๋†€๋ผ์šด ์˜ˆ: CVC ์ž…๋ ฅ ํŽ˜์ด์ง€, ์นด๋“œ ๋งŒ๋ฃŒ ๋‚ ์งœ ๋“ฑ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” js ์Šค๋‹ˆํผ์ž…๋‹ˆ๋‹ค. 

    ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฒƒ: Content-Security-Policy ํ—ค๋”์—์„œ script-src ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์†Œ์Šค์—์„œ๋งŒ ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด script-src 'self'๋Š” ๋‹น์‚ฌ ์‚ฌ์ดํŠธ์˜ ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ๋งŒ ํ—ˆ์šฉ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. 
    ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์ธ๋ผ์ธ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. unsafe-inline ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ์ธ๋ผ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ์ธ๋ผ์ธ js/css ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ js ํŒŒ์ผ ํฌํ•จ์„ ๊ธˆ์ง€ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. script-src 'self'์™€ ํ•จ๊ป˜ ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

    Report-uri๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ฒƒ์„ ๊ธฐ๋กํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์ดํŠธ์— ๊ตฌํ˜„ํ•˜๋ ค๋Š” ์‹œ๋„๋ฅผ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.

  5. SQL ์ฃผ์ž….
    ์ด ์ทจ์•ฝ์ ์€ ์›น ์‚ฌ์ดํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ง์ ‘ ์•ก์„ธ์Šคํ•˜๋Š” ์›น ์‚ฌ์ดํŠธ์— SQL ์ฝ”๋“œ๋ฅผ ์ฃผ์ž…ํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฒ€์‚ฌ๋˜์ง€ ์•Š์œผ๋ฉด SQL ์ฃผ์ž…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•์„ฑ์„ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ์ฆ‰์‹œ ์ฟผ๋ฆฌ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›น ์‚ฌ์ดํŠธ์˜ ์–‘์‹์—์„œ ์ž…๋ ฅ์ด ๋ฐ์ดํ„ฐ ์œ ํ˜•๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 

    ์™œ ์œ„ํ—˜ํ•ฉ๋‹ˆ๊นŒ?: ๊ณต๊ฒฉ์ž๊ฐ€ ์ด ์–‘์‹์— SQL ์ฟผ๋ฆฌ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋ฐ€ ์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

    ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฒƒ: ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‚˜์˜ค๋Š” ๋‚ด์šฉ์„ ๋ฏฟ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ํด๋ผ์ด์–ธํŠธ ์ธก๊ณผ ์„œ๋ฒ„ ์ธก ๋ชจ๋‘์—์„œ ์ž์‹ ์„ ๋ณดํ˜ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

    ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋Š” JavaScript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„๋“œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. 

    ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์— ๋‚ด์žฅ๋œ ๊ธฐ๋Šฅ์€ ์„œ๋ฒ„์—์„œ ์˜์‹ฌ์Šค๋Ÿฌ์šด ๋ฌธ์ž๋ฅผ ํ”ผํ•˜๋Š” ๋ฐ๋„ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์„œ๋ฒ„์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

    ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์ด ์ •ํ™•ํžˆ ๋ฐœ์ƒํ•˜๋Š” ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. 

    ์ƒํ˜ธ ์ž‘์šฉ์€ ID ์š”์ฒญ(ID ๋ณ€๊ฒฝ), ์ƒˆ ์‚ฌ์šฉ์ž ์ƒ์„ฑ, ์ƒˆ ๋Œ“๊ธ€ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒˆ ํ•ญ๋ชฉ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ๋ฐ›์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. SQL ์ฃผ์ž…์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ญ์ œํ•˜๋”๋ผ๋„ SQL ์ฃผ์ž…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ๊ถŒ๊ณ 

๋ฐ”ํ€ด๋ฅผ ์žฌ๋ฐœ๋ช…ํ•˜์ง€ ๋ง๊ณ  ๊ฒ€์ฆ๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.. ์ผ๋ฐ˜์ ์œผ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. .NET - ASP.NET MVC ๋ฐ ASP.NET Core, Python - Django ๋˜๋Š” Flask, Ruby - Ruby on Rails, PHP - Symfony, Laravel, Yii, JavaScript - Node.JS-Express.js, Java - ์Šคํ”„๋ง MVC.

๊ณต๊ธ‰์—…์ฒด ์—…๋ฐ์ดํŠธ๋ฅผ ๋”ฐ๋ฅด๊ณ  ์ •๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”.. ๊ทธ๋“ค์€ ์ทจ์•ฝ์ ์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ต์Šคํ”Œ๋กœ์ž‡์„ ์ž‘์„ฑํ•˜์—ฌ ๊ณต๊ฐœ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉด ๋ชจ๋“  ์ผ์ด ๋‹ค์‹œ ์ผ์–ด๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ๊ณต๊ธ‰์—…์ฒด์˜ ์•ˆ์ •์ ์ธ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ตฌ๋…ํ•˜์„ธ์š”.

์ ‘๊ทผ๊ถŒํ•œ ํ™•์ธ. ์„œ๋ฒ„ ์ธก์—์„œ๋Š” ํ•ญ์ƒ ๊ท€ํ•˜์˜ ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ โ€‹โ€‹๋ฌธ์ž๊นŒ์ง€ ์‚ฌ์ดํŠธ๋ฅผ ํŒŒ๊ดดํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์นจํ•ดํ•˜๋ ค๋Š” ๊ฐ€์žฅ ๋ฏธ์›Œํ•˜๋Š” ์ ์ด ์ž‘์„ฑํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•˜์‹ญ์‹œ์˜ค. ๋”์šฑ์ด ๋•Œ๋กœ๋Š” ์ด๊ฒƒ์ด ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค.

ํด๋ก , ํ…Œ์ŠคํŠธ ์‚ฌ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ํ›„ ํ”„๋กœ๋•์…˜์— ์‚ฌ์šฉ. ์ด๋Š” ์ฒซ์งธ, ์ƒ์‚ฐ์ ์ธ ํ™˜๊ฒฝ์—์„œ ์‹ค์ˆ˜์™€ ์‹ค์ˆ˜๋ฅผ ํ”ผํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ƒ์‚ฐ์ ์ธ ํ™˜๊ฒฝ์€ ๋ˆ์„ ๊ฐ€์ ธ์˜ค๊ณ  ๋‹จ์ˆœํ•œ ์ƒ์‚ฐ ํ™˜๊ฒฝ์€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ถ”๊ฐ€, ์ˆ˜์ • ๋˜๋Š” ์ข…๋ฃŒํ•  ๋•Œ๋Š” ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•œ ๋‹ค์Œ ๋ฐœ๊ฒฌ๋œ ๊ธฐ๋Šฅ๊ณผ ์ทจ์•ฝ์ ์„ ํ™•์ธํ•œ ๋‹ค์Œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•  ๊ณ„ํš์„ ์„ธ์šฐ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. 

๋‹ค์Œ์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณดํ˜ธํ•˜์„ธ์š”. ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋ฐฉํ™”๋ฒฝ ์ทจ์•ฝ์  ์Šค์บ๋„ˆ์˜ ๋ณด๊ณ ์„œ๋ฅผ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.. ์˜ˆ๋ฅผ ๋“ค์–ด DataLine์€ Qualys์™€ FortiWeb์„ ์„œ๋น„์Šค ๋ฒˆ๋“ค๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€