nginx 1.19.3 рдЖрдгрд┐ njs 0.4.4 рдЪреЗ рдкреНрд░рдХрд╛рд╢рди

рддрдпрд╛рд░ рдЭрд╛рд▓реЗ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдкреНрд░рдХрд╛рд╢рди nginx 1.19.3, рдЬреНрдпрд╛рдордзреНрдпреЗ рдирд╡реАрди рдХреНрд╖рдорддрд╛рдВрдЪрд╛ рд╡рд┐рдХрд╛рд╕ рдЪрд╛рд▓реВ рд░рд╛рд╣рддреЛ (рд╕рдорд╛рдВрддрд░ рд╕рдорд░реНрдерд┐рдд рд╕реНрдерд┐рд░ рд╢рд╛рдЦрд╛ 1.18 рдХреЗрд╡рд│ рдЧрдВрднреАрд░ рддреНрд░реБрдЯреА рдЖрдгрд┐ рднреЗрджреНрдпрддрд╛ рджреВрд░ рдХрд░рдгреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдмрджрд▓ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд).

рдореБрдЦреНрдп рдмрджрд▓ рдХрд░рд╛:

  • рдореЙрдбреНрдпреВрд▓ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ ngx_stream_set_module, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рд▓рд╛ рдореВрд▓реНрдп рдирд┐рдпреБрдХреНрдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ

    рд╕рд░реНрд╡реНрд╣рд░ {
    12345 рдРрдХрд╛;
    $true 1 рд╕реЗрдЯ рдХрд░рд╛;
    }

  • рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд▓реЗ proxy_cookie_flags рдкреНрд░реЙрдХреНрд╕реА рдХрдиреЗрдХреНрд╢рдирдордзреНрдпреЗ рдХреБрдХреАрдЬрд╕рд╛рдареА рдзреНрд╡рдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдХреБрдХреА тАЬрдПрдХтАЭ рдордзреНрдпреЗ тАЬhttponlyтАЭ рдзреНрд╡рдЬ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдЗрддрд░ рд╕рд░реНрд╡ рдХреБрдХреАрдЬрд╕рд╛рдареА тАЬnosecureтАЭ рдЖрдгрд┐ тАЬsamesite=strictтАЭ рдзреНрд╡рдЬ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рдмрд╛рдВрдзрдХрд╛рдо рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛:

    proxy_cookie_flags рдлрдХреНрдд рдПрдХ;
    proxy_cookie_flags ~ nosecure samesite=strict;

  • рддрддреНрд╕рдо рдирд┐рд░реНрджреЗрд╢ userid_flags рдХреБрдХреАрдордзреНрдпреЗ рдзреНрд╡рдЬ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА ngx_http_userid рдореЙрдбреНрдпреВрд▓рд╕рд╛рдареА рджреЗрдЦреАрд▓ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЖрд╣реЗ.

рдПрдХрд╛рдЪрд╡реЗрд│реА рдЬрд╛рдЧрд╛ рдШреЗрддрд▓реА рд░реАрд▓рд┐рдЭ рдПрдирдЬреЗрдПрд╕ 0.4.4, nginx рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░рд╕рд╛рдареА JavaScript рджреБрднрд╛рд╖реА. njs рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░ ECMAScript рдорд╛рдирдХреЗ рд▓рд╛рдЧреВ рдХрд░рддреЛ рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреАрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рдкрд░реВрди рд╡рд┐рдирдВрддреНрдпрд╛рдВрдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рдЪреА nginx рдХреНрд╖рдорддрд╛ рд╡рд╛рдврд╡рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ. рд╡рд┐рдирдВрддреНрдпрд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЧрддрд┐рдорд╛рдирдкрдгреЗ рдкреНрд░рддрд┐рд╕рд╛рдж рдирд┐рд░реНрдорд╛рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд┐рдирдВрддреА/рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдд рдмрджрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд┐рдВрд╡рд╛ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрдордзреАрд▓ рд╕рдорд╕реНрдпрд╛рдВрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрдЯрдХрди рд╕реНрдЯрдм рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рдЧрдд рддрд░реНрдХрд╢рд╛рд╕реНрддреНрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рдирд╡реАрди рдЖрд╡реГрддреНрддреАрдордзреНрдпреЗ:

  • рд╕рдВрдЦреНрдпрд╛рдВрдордзреАрд▓ рдЕрдВрдХрд╛рдВрдЪреНрдпрд╛ рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓ рдкреГрдердХреНрдХрд░рдгрд╛рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, тАЬ1_000тАЭ).
  • %TypedArray%.prototype рд╕рд╛рдареА рдЧрд╣рд╛рд│ рдкрджреНрдзрддреА рд▓рд╛рдЧреВ рдХреЗрд▓реНрдпрд╛: every(), filter(), find(), findIndex(), forEach(), includes(), indexOf(), lastIndexOf(), map(), reduce(), рд░рд┐рдбреНрдпреВрд░рд╛рдЗрдЯ(), рд░рд┐рд╡реНрд╣рд░реНрд╕(), рдХрд╛рд╣реА().
  • %TypedArray% рд╕рд╛рдареА рдЧрд╣рд╛рд│ рдкрджреНрдзрддреА рд▓рд╛рдЧреВ рдХреЗрд▓реНрдпрд╛: from(), of().
  • DataView рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ.

    : >> (рдирд╡реАрди DataView(buf.buffer)).getUint16()
    : 32974

  • рдмрдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд╛рдЧреВ.

    : >> var buf = Buffer.from([0x80,206,177,206,178])
    : рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд
    : >> buf.slice(1).toString()
    : '╬▒╬▓'
    : >> buf.toString('base64')
    : 'gM6xzrI='

  • "рдХреНрд░рд┐рдкреНрдЯреЛ" рдЖрдгрд┐ "fs" рдкрджреНрдзрддреАрдВрдирд╛ рдмрдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдкреЛрд░реНрдЯ рдЬреЛрдбрд▓рд╛, рдЖрдгрд┐ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓реЗ рдХреА fs.readFile(), Hash.prototype.digest() рдЖрдгрд┐ Hmac.prototype.digest() рдиреЗ рдмрдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯрдЪреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░рдд рдХреЗрд▓реЗ рдЖрд╣реЗ.
  • ArrayBuffer рд╕рдорд░реНрдерди TextDecoder.prototype.decode() рдкрджреНрдзрддреАрдордзреНрдпреЗ рдЬреЛрдбрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ.

рд╕реНрддреНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛