Cloudflare ์„œ๋ฒ„์—์„œ ์ฝ”๋“œ ์‹คํ–‰์„ ํ—ˆ์šฉํ•˜๋Š” cdnjs์˜ ์ทจ์•ฝ์ 

JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ „๋‹ฌ ์†๋„๋ฅผ ๋†’์ด๊ณ  CDN ์„œ๋ฒ„์—์„œ ์ž„์˜ ์ฝ”๋“œ ์‹คํ–‰์„ ํ—ˆ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋œ Cloudflare์˜ cdnjs ์ฝ˜ํ…์ธ  ์ „๋‹ฌ ๋„คํŠธ์›Œํฌ์—์„œ ์‹ฌ๊ฐํ•œ ์ทจ์•ฝ์ ์ด ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท์˜ ์ „์ฒด ์‚ฌ์ดํŠธ ์ค‘ ์•ฝ 12.7%๊ฐ€ ์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์ธํ”„๋ผ๊ฐ€ ์†์ƒ๋˜๋ฉด ์ด๋Ÿฌํ•œ ์‚ฌ์ดํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์ธํ•ด ๋ฌธ์ œ์˜ ์œ„ํ—˜์ด ๋”์šฑ ๊ฐ€์ค‘๋ฉ๋‹ˆ๋‹ค.

cdnjs ์„œ๋น„์Šค๋Š” Git ๋˜๋Š” NPM ์ €์žฅ์†Œ์—์„œ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•œ ํ›„ ๋ชจ๋“  ์‚ฌ์ดํŠธ์—์„œ Cloudflare ์ฝ˜ํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ๋ฅผ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•˜์—ฌ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ๋“œ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. GitHub์— ๊ฒŒ์‹œ๋œ cdnjs ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ฝ”๋“œ๋ฅผ ์—ฐ๊ตฌํ•  ๋•Œ tgz ์•„์นด์ด๋ธŒ์—์„œ NPM ํŒจํ‚ค์ง€์˜ ์••์ถ•์„ ํ’€๊ธฐ ์œ„ํ•ด Go ์–ธ์–ด์˜ ํ‘œ์ค€ ์•„์นด์ด๋ธŒ/tar ๋ชจ๋“ˆ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒฝ๋กœ๋ฅผ ์ •๊ทœํ™”ํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ ๋ชฉ๋ก์„ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. . ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ฃผ์–ด์ง„ ๋ชฉ๋ก์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ˜ํ…์ธ ์˜ ์••์ถ•์„ ํ’€ ๋•Œ "../../../../../../../tmp/test"์™€ ๊ฐ™์€ ํŒŒ์ผ ์•„์นด์ด๋ธŒ์— ์กด์žฌํ•˜๋ฉด ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ํ—ˆ์šฉํ•˜๋Š” ํ•œ ์‹œ์Šคํ…œ์˜ ์ž„์˜ ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ณต๊ฒฉ์ž๊ฐ€ ์ž์‹ ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ cdnjs์— ์ถ”๊ฐ€ํ•˜๊ณ  NPM ์ €์žฅ์†Œ ๊ฒฝ๋กœ์— "../" ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ์ด ํฌํ•จ๋œ ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ์•„์นด์ด๋ธŒ๋ฅผ ์—…๋กœ๋“œํ•˜๋„๋ก ์‹ ์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ œ์•ˆ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. cdnjs ์„œ๋ฒ„์—์„œ๋Š” "์ž๋™ ์—…๋ฐ์ดํŠธ" ์ž‘์—…์ด ์ฃผ๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋ฉฐ, ์ด ๋™์•ˆ ํ•ธ๋“ค๋Ÿฌ๋Š” ์ œ์•ˆ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ƒˆ ๋ฒ„์ „์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์ฝ˜ํ…์ธ ์˜ ์••์ถ•์„ ํ’‰๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ๊ฒฝ๋กœ๊ฐ€ "../"์ธ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ์Šคํฌ๋ฆฝํŠธ๋กœ ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ๊ณ  ์••์ถ• ํ’€๊ธฐ๊ฐ€ ์ˆ˜ํ–‰๋œ ์„œ๋ฒ„์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Git์—์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๊ฒฝ์šฐ, ์—…๋ฐ์ดํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ๊ฐ€ Git์—์„œ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•  ๋•Œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด Git์— ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ๋ชจ๋“  ํŒŒ์ผ ์ฝ๊ธฐ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HackerOne์—์„œ ํŒŒ์ผ ์ฝ๊ธฐ์— ๊ด€ํ•œ ๊ฐ€์„ค์„ ํ…Œ์ŠคํŠธํ•˜์—ฌ ์ƒ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด cdnjs ํ•ดํ‚น ์‹œ์—ฐ์œผ๋กœ ์‹คํ—˜์„ ์‹œ์ž‘ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. /proc/self/maps ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ธฐํ˜ธ ๋งํฌ test.js๊ฐ€ CDN์„ ํ†ตํ•ด ์ œ๊ณต๋˜๋Š” JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ Git ์ €์žฅ์†Œ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฒŒ์‹œํ•œ ํ›„ ์—…๋ฐ์ดํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ด ์ €์žฅ์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ง€์ •๋œ ํŒŒ์ผ์„ cdnjs์— ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค(test.js๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋กœ ์ƒ์„ฑ๋˜์—ˆ์œผ๋ฉฐ ์ด ํŒŒ์ผ์„ ์š”์ฒญํ•˜๋ฉด /proc/self/maps์˜ ๋‚ด์šฉ์ด ๋ฐ˜ํ™˜๋จ). ).

/proc/self/environ ํŒŒ์ผ์— ๋Œ€ํ•œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋Œ€์ฒดํ•˜์—ฌ ์—ฐ๊ตฌ ์ž‘์„ฑ์ž๋Š” ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜ GITHUB_REPO_API_KEY ๋ฐ WORKERS_KV_API_TOKEN์˜ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ณ€์ˆ˜๋Š” GitHub์˜ robocdnjs ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•œ API ํ‚ค๋ฅผ ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ณ€์ˆ˜๋Š” ํ† ํฐ์„ cdnjs์˜ KV ์ €์žฅ์†Œ์— ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ๋ฐ›์€ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ cdnjs๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์ธํ”„๋ผ๋ฅผ ์™„์ „ํžˆ ์†์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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