nginx 1.19.3 ๋ฐ njs 0.4.4 ์ถœ์‹œ

ํ˜•์„ฑ๋œ ์—…์ŠคํŠธ๋ฆผ ๋ฆด๋ฆฌ์Šค nginx 1.19.3, ๊ทธ ์•ˆ์—์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์˜ ๊ฐœ๋ฐœ์ด ๊ณ„์†๋ฉ๋‹ˆ๋‹ค(๋ณ‘๋ ฌ๋กœ ์•ˆ์ •์ ์ธ ์ง€์› ์ง€์›). ์ง€์  1.18 ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜ ๋ฐ ์ทจ์•ฝ์  ์ œ๊ฑฐ์™€ ๊ด€๋ จ๋œ ๋ณ€๊ฒฝ๋งŒ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

์ฃผ์š” ๋ณ€๊ฒฝ:

  • ๋ชจ๋“ˆ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ngx_stream_set_module, ๋ณ€์ˆ˜์— ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์„œ๋ฒ„ {
    12345๋ฅผ ๋“ค์–ด;
    $true 1์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    }

  • ์ง€์‹œ๋ฌธ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ก์‹œ_์ฟ ํ‚ค_ํ”Œ๋ž˜๊ทธ ํ”„๋ก์‹œ ์—ฐ๊ฒฐ์—์„œ ์ฟ ํ‚ค์— ๋Œ€ํ•œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฟ ํ‚ค "one"์— "httponly" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ์ฟ ํ‚ค์— "nosecure" ๋ฐ "samesite=strict" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    Proxy_cookie_flags ํ•˜๋‚˜๋Š” httponly์ž…๋‹ˆ๋‹ค.
    Proxy_cookie_flags ~ nosecure samesite=strict;

  • ์œ ์‚ฌํ•œ ์ง€์‹œ์–ด userid_flags ์ฟ ํ‚ค์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์€ ngx_http_userid ๋ชจ๋“ˆ์—๋„ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์‹œ์— ์ผ์–ด๋‚ฌ๋‹ค ๋ฌธ์ œ njs 0.4.4, nginx ์›น ์„œ๋ฒ„์šฉ JavaScript ์ธํ„ฐํ”„๋ฆฌํ„ฐ์ž…๋‹ˆ๋‹ค. njs ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ECMAScript ํ‘œ์ค€์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ๊ตฌ์„ฑ์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” nginx์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ ์ฒ˜๋ฆฌ, ๊ตฌ์„ฑ ์ƒ์„ฑ, ๋™์ ์œผ๋กœ ์‘๋‹ต ์ƒ์„ฑ, ์š”์ฒญ/์‘๋‹ต ์ˆ˜์ • ๋˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์Šคํ… ์‹ ์† ์ƒ์„ฑ์„ ์œ„ํ•œ ๊ณ ๊ธ‰ ๋…ผ๋ฆฌ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์—์„œ๋Š”:

  • ์ˆซ์ž์˜ ์‹œ๊ฐ์  ๊ตฌ๋ถ„์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: '1_000').
  • %TypedArray%.prototype์— ๋Œ€ํ•œ ๋ˆ„๋ฝ๋œ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„: Every(), filter(), find(), findIndex(), forEach(), include(), indexOf(), lastIndexOf(), map(), Reduce(), ReduceRight(), reverse(), some().
  • %TypedArray%: from(), of()์— ๋Œ€ํ•ด ๋ˆ„๋ฝ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • DataView ๊ฐ์ฒด๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

    : >> (new DataView(buf.buffer)).getUint16()
    : 32974

  • ๋ฒ„ํผ ๊ฐ์ฒด๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

    : >> var buf = Buffer.from([0x80,206,177,206,178])
    : ํ•œ์ •๋˜์ง€ ์•Š์€
    : >> buf.slice(1).toString()
    : 'ฮฑฮฒ'
    : >> buf.toString('base64')
    : 'gM6xzrI='

  • "crypto" ๋ฐ "fs" ๋ฉ”์„œ๋“œ์— Buffer ๊ฐœ์ฒด ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๊ณ  fs.readFile(), Hash.prototype.digest() ๋ฐ Hmac.prototype.digest()๊ฐ€ Buffer ๊ฐœ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋ณด์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ArrayBuffer ์ง€์›์ด TextDecoder.prototype.decode() ๋ฉ”์„œ๋“œ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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