рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдмреНрд▓реИрдХрд╣реИрдЯ рд╣реИрдХрд░реНрд╕ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣рдорд▓реЛрдВ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд░реНрд╡рд░ рдбреЗрдЯрд╛ рд╕реЗ рд╕рдордЭреМрддрд╛ рдХрд░рдирд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдкрд░ рдХрдо рд╕реЗ рдХрдо рдЖрдЬ рд╣рдорд▓рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреНрд░рд╛рдИ рдбреЗрдлрд┐рдирд┐рд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХреЛрдИ рднреА рд╣рдорд▓рд╛ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░, рдбреЗрдЯрд╛ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди, рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдФрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддрдХрдиреАрдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдПрдХ рд╣реИрдХрд░ рдХреА рдУрд░ рд╕реЗ рдЙрдкрд╛рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдВрддрд░рд░рд╛рд╖реНрдЯреНрд░реАрдп рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЛ рдЧреНрд░рд╛рд╣рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬрд┐рдореНрдореЗрджрд╛рд░ рдФрд░ рдЧрд╣рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЖрдЬ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдорд▓рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЗрди рдЦрддрд░реЛрдВ рд╕реЗ рдХреИрд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред
2013 - 2017 рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖ 10 рдЦрддрд░реЗрдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЦреНрдп рдЦрддрд░реЛрдВ рдореЗрдВ, рдЗрдВрдЬреЗрдХреНрд╢рди, рддреНрд░реБрдЯрд┐ рдЯреНрд░рд┐рдЧрд░, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдмрд╛рдИрдкрд╛рд╕ рдФрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЧреЛрдкрдиреАрдп рдбреЗрдЯрд╛ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рд╣реИрдВред рдЬреНрдЮрд╛рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЦрддрд░рд╛ рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдирдП рдЦрддрд░реЗ рднреА рджрд┐рдЦрд╛рдИ рджрд┐рдП: рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдореЗрдХреЗрдирд┐рдЬреНрдо рдХреА рд╣реИрдХрд┐рдВрдЧ, рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬреЗрд╢рди рдФрд░ рдбреЗрдЯрд╛ рдХреА рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди, рдЕрдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддреГрдд рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧред
2001 рдореЗрдВ, рдорд╛рд░реНрдХ рдХрд░реНрдлреНрдпреВ рдФрд░ рдбреЗрдирд┐рд╕ рдЧреНрд░реЛрд╡реНрд╕ рдиреЗ OWASP (рдУрдкрди рд╡реЗрдм рдПрдкреНрд▓реАрдХреЗрд╢рди рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ) рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреАред рдпрд╣ рдЧреНрд░рд╛рд╣рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рднреЗрджреНрдпрддрд╛ рдХрд╛ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рдкрд░ рдЕрдиреБрднрд╡ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рдУрдкрдирд╕реЛрд░реНрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реБрд░рдХреНрд╖рд╛ рдЗрдВрдЬреАрдирд┐рдпрд░ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВред OWASP рд╕рдореБрджрд╛рдп рдкреЛрд░реНрдЯрд▓ рдкрд░ рднреЗрджреНрдпрддрд╛ рдЬрд╛рдирдХрд╛рд░реА, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕рд╛рдордЧреНрд░реА, рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдФрд░ рд╣рдорд▓реЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд╕рд╛рде рд▓реЗрдЦреЛрдВ рдХреА рднреАрдбрд╝ рд╕реЗ рднрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣рдорд▓реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдирдХреЗ рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЦрддрд░реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЦрддрд░реЗ рдЦрддрд░рдирд╛рдХ рд╣реИрдВ, рдЖрдкрдХреЛ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдСрдирд▓рд╛рдЗрди рд╕реЗрд╡рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдерд╛рдиреАрдп рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдСрдирд▓рд╛рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рднреА рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред

рд▓реЗрдХрд┐рди рднрд▓реЗ рд╣реА рдкрд░реАрдХреНрд╖рдг рдЙрдкрдХрд░рдг рдиреЗ рдЖрдкрдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдордЬреЛрд░рд┐рдпреЛрдВ (рдЬреЛ рдХрд┐ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ рдерд╛, рдлрд┐рд░ рднреА рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рддрдВрддреНрд░, рдкрд╛рд╕рд╡рд░реНрдб рд╣реИрд╢рд┐рдВрдЧ рдкрд╛рд╕рд╡рд░реНрдб, рдЧреЛрдкрдиреАрдп рдбреЗрдЯрд╛ рдХрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди, рд╕рд╛рде рд╣реА рд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдоред рдФрд░ рд╕рдВрдкреВрд░реНрдг рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЦреЗрд▓рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдФрд░ рдиреЗрддреНрд░рд╣реАрди рд╕реНрд╡рдЪрд╛рд▓рди рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
Git
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Git рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рд╕реНрдпреЛрдВ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рднрдВрдбрд╛рд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ, рдХрдореАрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рджреМрд░рд╛рди, рдЧреЛрдкрдиреАрдп рдбреЗрдЯрд╛ рдХреЛ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрд╡реЗрджрди рдореЗрдВ рд╕реАрд╡рди рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЬ, рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рд╡реЙрд▓реНрдЯ, рдХреАрд╡рд┐рдЬрд╝, рдбреЙрдХрд░ рд╕реАрдХреНрд░реЗрдЯреНрд╕, рдПрдЬрд╝реНрдпреЛрд░ рдХреА рд╡реЙрд▓реНрдЯ рдФрд░ рдХрдИ рдЕрдиреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдИ рднрдВрдбрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЖрдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрди рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдиреНрдХреЛрдб рдФрд░ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИ рд╡рд╣ рд╣реИ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдмреНрд▓реИрдХрдмреЙрдХреНрд╕ рд╕рдорд╛рдзрд╛рдиред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓, рдЧрд┐рдЯ рдЖрджрд┐ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Git рдХреЗ рджреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИрдВ: git-crypt рдФрд░ git-secretред рдореИрдВ рджреВрд╕рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореБрдЭреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд╡рд░реНрдгрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рдерд╛ред рдЧрд┐рдЯ-рд╕реАрдХреНрд░реЗрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЗрд╕реЗ рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред .Gitattributes рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВред рдЕрдЧрд▓рд╛, рд░рд╣рд╕реНрдпреЛрдВ рдХреА рдкрд╣реБрдВрдЪ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ: рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ git-secret-hide
ред рдЖрдк git-secret-reveal.
рдорд╛рдзреНрдпрдо рд╕реЗ рдЫрд┐рдкреА рд╣реБрдИ рдлрд╝рд╛рдЗрд▓реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ git-secret-reveal.
brew install git-secret //
git secret init //
git secret tell your@gpg.email  //
git secret add <files...> //
git secret hide  //
git secret reveal  //
Webpack
рдЦрддрд░реЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рд╡реЗрдмрдкреИрдХ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ред XSS, XEE рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╣рдорд▓реЛрдВ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ CORS (рдХреНрд░реЙрд╕-рдСрд░рд┐рдЬрдирд▓ рд░рд┐рд╕реЛрд░реНрд╕ рд╢реЗрдпрд░рд┐рдВрдЧ) рдФрд░ CSP (рдХрдВрдЯреЗрдВрдЯ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдкреЙрд▓рд┐рд╕реА) рдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреБрдЫ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реНрд░реЛрдд рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдХреЙрд░реНрд╕ рдФрд░ рд╕реАрдПрд╕рдкреА рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рддреЛ рд╕рдлрд╛рд░реА рд╣рд░ рдХрджрдо рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛ред
рдХреЙрд░реНрд╕ рдФрд░ рд╕реАрдПрд╕рдкреА рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдмреИрдХ рдПрдВрдб рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЗрдбрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИред рджреВрд╕рд░рд╛ рдореЗрдЯрд╛ рдЯреИрдЧ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЛрдиреЛрдВ рдиреАрддрд┐рдпреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╡рд┐рдзрд┐ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрд▓рд╕реА рдмреИрдХ-рдПрдВрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣реИрдВ, рддреЛ рд╡реЗ рд╣рдореЗрд╢рд╛ рд╡реНрдпрд╕реНрдд рд░рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╕рдордп рдореЗрдЯрд╛ рдЯреИрдЧ рдХреЛ рддреБрд░рдВрдд рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Html-webpack-plugin, html-webpack-рдмрд╛рд╣рд░-рдПрд╕реЗрдЯреНрд╕-plugin, script-ext-html-webpack-plugin, csp-html-webpack-plugin рдФрд░ crypto рдЬреИрд╕реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рдВрд╕рд╛рдзрди рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, CSS рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдмрд╛рд╣рд░реА рдлреЛрдВрдЯ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ; рд╕реАрдбреАрдПрди рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрди рдФрд░ рдЗрд╕реА рддрд░рд╣), рддреЛ рдореИрдВ рд╡реЗрдмрдкреИрдХ-рд╕рдм-рд╕реЛрд░реНрд╕-рдЕрдЦрдВрдбрддрд╛-рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрди рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИрдВ, рдЙрдирдореЗрдВ рдХреЛрдИ рдЗрдВрдЬреЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ, рд╡реЗ рдкреВрд░реЗ рдФрд░ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдХрд┐рд╕реА рдиреЗ рд╕рдВрд╕рд╛рдзрди рдореЗрдВ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдбреЗрдЯрд╛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЦрддрд░реЛрдВ рд╕реЗ рдмрдЪрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдЙрд╕ рдХреНрд░рдо рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЖрджреЗрд╢ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
const SHA256 = (str) => CRYPTO.createHash('sha256').update( str, 'utf8').digest('base64'); const sha256Str = SHA256( '' + Date.now() ); [тАж] new HtmlWebpackPlugin({ filename: 'index.html', template: 'public/index.html' }), new ScriptExtHtmlWebpackPlugin({ custom: [{ test: /\.js$/, attribute: 'nonce', value: 'nonce-' + sha256Str }] }), new HtmlWebpackExcludeAssetsPlugin(), new CspHtmlWebpackPlugin({ 'base-uri': '\'self\'', 'object-src': '\'none\'', 'script-src': ['\'self\'', '\'unsafe-eval\'', '\'nonce-' + sha256Str + '\''], 'style-src': ['\'unsafe-inline\'', '\'self\''] }, { devAllowUnsafe: false, enabled: true, hashingMethod: 'sha256' }), new SriPlugin({ hashFuncNames: ['sha256', 'sha384'], enabled: true }), [тАж]
рдлрд┐рд░, рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рджреМрд░рд╛рди <hed>
http-equiv=content-security-policy
рдореЗрдЯрд╛ рдЯреИрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдирд┐рд░реНрджреЗрд╢ content
рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рдПрдВрдЧреЗ, рдЬреЛ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рди рд▓рд┐рдкрд┐рдпреЛрдВ рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
base-uri
рдпреВрдЖрд░рдПрд▓ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд╕реАрдПрд╕рдПрд╕, рдЪрд┐рддреНрд░ рдФрд░ рдЕрдзрд┐рдХ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдЖрдзрд╛рд░ URL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдорддреМрд░ рдкрд░ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП object-sr
рд╕реА рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП none
рд╕реЗрдЯ none
рдХрд░рддрд╛ рд╣реИред
script-src
рдирд┐рд░реНрджреЗрд╢ JS рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ nnce-<hshVlue>
рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рджрд░реНрдЬ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ SHA256 рдпрд╛ SHA512 рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
style-src
рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рд╣реИ: рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП CSS рд▓рд┐рдЦрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╣рдо style-src
unsafe-inline
рдФрд░ self
рдХрд╛ рдЙрдкрдпреЛрдЧ style-src
рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

script
рдЯреИрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ nnce-<hshVlue>
, integrity
рдФрд░ cross-origin
рд╕реЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╡реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдЦреАрдВрдЪреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд╕рд╛рдзрди CSP рдпрд╛ CORS рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд╕ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ CSS рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреБрдЫ рд▓рд┐рдЦреЗрдЧрд╛ рдЬреИрд╕реЗ: "рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЗрд╕ рд▓рд╛рдЗрди рдкрд░ рдЬрд╣рд╛рдБ рдЖрдк рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ред рджреЗрдЦреЛ, рддреБрдореНрд╣реЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ! тАЭ ред
MDN , OWASP рдФрд░ W3C рдкреНрд░рд▓реЗрдЦрди CSP рдФрд░ CORS рдиреАрддрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЛрдИ рднреА рдкреИрда рдкрд░реАрдХреНрд╖рдг рдЙрдкрдХрд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреЛрд░ рдФрд░ рд╕реАрдПрд╕рдкреА рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧрд╛ред рдХреЛрдИ рднреА рдврд╛рдВрдЪрд╛ рдпрд╛ рдЙрдкрдХрд░рдг рдЬреЛ рдХрд┐рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд╡рдд: рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдЧрд╛, рдЦрд╛рдорд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг
рд╣рдо OpenID рдХрдиреЗрдХреНрдЯ рдФрд░ рдХрд░реНрдмрд░реЛрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдмрд╛рд╣рд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп OpenID рдорд╛рдирдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд░реНрдмрд░реЛрд╕ рдЖрдВрддрд░рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдмреИрдВрдХ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд╕рдВрдЧрдарди рдХрд╛ рдПрдХ рдХрд░реНрдордЪрд╛рд░реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдорд╢реАрди рдкрд░ рдПрдХ рдмрд╛рд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рднреА рдлрд┐рд░ рд╕реЗ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА: рдХрд░реНрдордЪрд╛рд░реА рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рддреБрд░рдВрдд рдЗрд╕реЗ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рддрд╛ рд╣реИред рдХрд░рдмрд░реЛрд╕ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдХреЗ рд▓рд┐рдП рд╕реВрдХреНрд╖реНрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВ, рдФрд░ рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдпрджрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИ, рдФрд░ рдХреНрд░реЛрдо IE рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИ, рддреЛ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреЛ рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдХрдУрдПрд╕ рдПрдХреНрд╕ рдкрд░ рд╕рдлрд╛рд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЦреБрдж рд╣реА рдорд┐рд▓ рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╕рдлрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд╣рд░ рдЬрдЧрд╣ рд╡рд╣ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗ рдЬреИрд╕рд╛ рдЙрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореИрдВ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдлрд╛рд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЕрдЧрд░ рдореИрдВ рдореИрдХ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рд╕рдВрдмрдВрдзрд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдмрдврд╝рд╛рддрд╛ рд╣реВрдВред
рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рдкрд╛рд╕рдкреЛрд░реНрдЯ, рдЬреЗрдПрд╕ рдФрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╕-рд╕рддреНрд░ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдПрд╕рдбреАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк OpenID Connect рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕реЗрд╡рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИрдВ, рддреЛ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд▓реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреИрд╕реЗ рдХрд┐ Auth0 рдФрд░ рдЗрд╕реА рддрд░рд╣, рддрд╛рдХрд┐ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рдХрдВрдкрдиреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдорд╛рд╣рд┐рд░ рд╣реЛред
рдЬрдм рд╣рдо рдХреБрдЫ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ Node.js рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ Passport.js, рдПрдХреНрд╕рдкреНрд░реЗрд╕-рд╕реЗрд╢рди, рдЖрджрд┐ рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдШрдЯрдХ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдлрд╝реЙрд░реНрдо рдлрд╝реАрд▓реНрдб рдХреЗ рдСрдЯреЛ-рд╕рдорд╛рдкрди рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдлрд╝реЙрд░реНрдо рдкрд░ рд╕реНрд╡рдд: рдкреВрд░реНрдг рдмрдВрдж рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред
рдкрд╛рд╕рд╡рд░реНрдб рд╣реИрд╢рд┐рдВрдЧ
OWASP рд╡реЗрдмрд╕рд╛рдЗрдЯ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреА рд╣реИ рдХрд┐ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдкрд╛рд╕рд╡рд░реНрдб рд╣реИрд╢рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, Argon2, PBKDF2, ccrypt рдФрд░ bcrypt рдЬреИрд╕реЗ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдореЗрд░реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ, рдореИрдВ рдЖрд░реНрдЧрди 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ - рдпрд╣ рдЬреАрд╕реАрд╕реА, рдкреАрдЬреАрдкреА / рдЬреАрдкреАрдЬреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЬреАрд╕реАрд╕реА рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрд░реНрдЧрди 2 рдЙрдкрдпреЛрдЧ рдпреЛрдЬрдирд╛:
1. GCC >= 4.8 install $ brew install gcc
2. - $ npm install -g node-gyp
3. Argon2 $ npm install argon2
4. import * as ARGON from 'argon2'; ARGON.generateSalt().then( (salt: string) => { ARGON.hash('some-user-password', salt) .then((hash : string) => { console.log('Successfully created Argon2 hash:', hash);
, рдпрд╣рд╛рдБ', 4. import * as ARGON from 'argon2'; ARGON.generateSalt().then( (salt: string) => { ARGON.hash('some-user-password', salt) .then((hash : string) => { console.log('Successfully created Argon2 hash:', hash);
рдХрд╣рд╛рдирд┐рдпреЛ
рдСрдмрдлрд╕рдХреЗрд╢рди рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рдкрд╛рд░реНрд╕ рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдорд▓рд╛рд╡рд░ - рдФрд░ рди рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ - рдмрд╣реБрдд рдмрд╛рд░ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреБрдЫ рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ рдХреЛ рд╕реАрдЦ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдХрд╛рдо рдХреЗ рддрдВрддреНрд░ рдХреЛ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдФрд░ рдПрдХ рдЪреЛрд░реА рд╣рдорд▓реЗ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рддрдВрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╣реИрдХрд░реНрд╕ рдореБрд╕реАрдмрдд рдореЗрдВ рдирд╣реАрдВ рдкрдбрд╝рддреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡реЗ рд╕рдВрд╕рд╛рдзрди рдХреА рдЦреЛрдЬ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдФрд░ рд╣рдорд▓реЗ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗ рдбреЗрдЯрд╛ рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдкрд░рд┐рд╡рд╣рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдирд┐рд╣рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рддреЗ рд╣реИрдВред рд╣рдорд▓реЗ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдХрд┐рд╕реА рднреА UNIX рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рддрднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдиреЗ рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐рдпреЛрдВ рдХреЛ рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реЛ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП URL рдЬреЛ рдмрд╛рд╣рд░ рдЬрд╛рддреЗ рд╣реИрдВред
рддреЛ, рдЯреЛрд╣реА рдХреЗ рд▓рд┐рдП, рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ-рдУрдмрдлреНрдпреВрд╕реЗрдЯрд░ред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡реЗрдмрдкреИрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд╡реЗрдмрдкреИрдХ-рдСрдмреНрд╕рдлреНрдпреВрдХреНрдЯрд░ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡реЗрдмрдкреИрдХ рдХреЗ рд▓рд┐рдП рдСрдмрдлреНрдпреВрдЬрд╝рд░-рд▓реЛрдбрд░ рдмрдирд╛рдпрд╛ред рдЗрд╕ рдкреИрдХреЗрдЬ рдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрддрд░реЛрдВ рдХреА рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рд╣реИ: рдирд┐рдореНрди, рдордзреНрдпрдо рдФрд░ рдЙрдЪреНрдЪ, рд╡реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕ рдСрдмрдлреНрдпреВрдЬрд╝реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рд╡реЗрдмрдкреИрдХ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдорд┐рдирд┐рдлрд┐рдХреЗрд╢рди рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЦрд░рд╛рдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╕рд╛рде minification рдФрд░ obfuscation рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ obfuscator рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдСрдмреНрдлрд╝рд╕реБрд▓реЗрдЯрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдорд╛рддреНрд░рд╛ рдФрд░ рдЙрд╕рдХреЗ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдпрд╛ рддреЛ рдЖрдк рд╕реБрд░рдХреНрд╖рд╛, рд╕реНрдерд┐рд░рддрд╛ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдЧрддрд┐ рдореЗрдВ рдЦреЛ рдЬрд╛рддреЗ рд╣реИрдВ; рдпрд╛ рддреЛ рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдУ, рдХрд┐рд╕реА рднреА рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
рдзрдордХреА рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдирд┐рдЧрд░рд╛рдиреА
рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдХреБрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЦрддрд░рд╛ рд╣реИред Npm рдСрдбрд┐рдЯ, Snyk рдФрд░ LGTM рдЬреИрд╕реЗ рдЦрддрд░реЗ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдРрд╕реЗ рд╣рд╛рд▓рд╛рдд рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред рдПрдирдкреАрдПрдо рдСрдбрд┐рдЯ рдПрдХ рдорд╛рдирдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдПрдирдкреАрдПрдо рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдмреИрд╕рд╛рдЦреА рдХреЗ рд╕рд╛рде рдЖрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ Snyk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЕрдкрдирд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИред рдЬрдм рдЖрдк рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Snyk рдЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧреЛрдкрдиреАрдп рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ Snyk рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрд╛рд╣рд░реА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рдирд╣реАрдВ рд╣реИред рд╕рдЪ рд╣реИ, рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХреЗрд╡рд▓ 300 рдмрд╛рд░ рдореБрдлреНрдд рдореЗрдВ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реА-рдХрдореЗрдЯреА рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпреЗ 300 рдореБрдлреНрдд рдкреНрд░рдпрд╛рд╕ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдкреНрд░реА-рдкреБрд╢ рдпрд╛ рдкреНрд░реА-рдорд░реНрдЬ рд╣реБрдХ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рдордиреБрд╖реНрдп рдХрд┐рд╕реА рднреА рдкреНрд░рдгрд╛рд▓реА рдХреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреЗрджреНрдпрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдХреБрдЫ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрдм рдХреЗрд╡рд▓ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рд╣рдо рдЯреАрдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ "рд╢реБрднрдЪрд┐рдВрддрдХ" рджрд┐рдЦрд╛рдИ рджрд┐рдП рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдХрдВрдкрдиреА рдХреЛ "рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ" рдЫреЛрдбрд╝рдиреЗ рдФрд░ рдПрдХ рдирд┐рд╢рд╛рди рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛? рдпрд╣ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдореИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рд╕реЗ Snyk рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдФрд░ рдХрдВрд╕реЛрд▓ рд╕реЗ рд╕реНрдХреИрди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдХрд░реЗрдВ, рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдпрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- Npm i snyk тАФD рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ "snyk" рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж: package.json рдореЗрдВ рд╕рд╣реА, рдЪрд▓рд╛рдПрдБ:
./node_modules/.bin/snyk wizard --dev
- Package.json рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЬреЛрдбрд╝реЗрдВ:
{ ... "scripts": { ... "test": "npm run test:snyk && npm run test:jest", ... "test:snyk": "snyk test --dev", ... "prepare": "npm run prepare:snyk", "prepare:snyk": "snyk protect" }, "husky": { "hooks": { "commit-msg": "commitlint -E HUSKY_GIT_PARAMS", "pre-commit": "npm run test:snyk && npm run lint && npm run test:jest", "pre-push": [ "npm run test:snyk", "npm run lint", "npm run test:jest", "npm run build:production" ], ... } }, "snyk": true }
рдКрдкрд░, рд╣рдордиреЗ рд╕реБрд░рдХреНрд╖рд╛ рдЦрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЬрд╛рдВрдЪ рдХреЛ рджреЗрдЦрд╛ред рдЬреНрдЮрд╛рдд рдЦрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрд▓рдЬреАрдЯреАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рднреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ GitHub рдпрд╛ Bitbucket рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде рдХрд░реЗрдВ (рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдерд╛), рдФрд░ рдХреЛрдб рдХреЛ рд╣рд░ рдкреБрд╢ рдХреЗ рд╕рд╛рде рддреБрд░рдВрдд рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрд╡реЗрджрди рдХреА рдирд┐рдЧрд░рд╛рдиреА
рдлреНрд░рдВрдЯ-рдПрдВрдб рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ, рдЙрдкрдХрд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ, рд╣рд░ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рд╕рдВрддрд░реА, TrackJS рдФрд░ InsightOps рд╣реИрдВред рд╕рдВрддрд░реА рд╕рд░реНрд╡рд░ рдХреЛ рдЙрд╕рдХреЗ рднреМрддрд┐рдХ рд╕рд░реНрд╡рд░ рдкрд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рджреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╣рдордиреЗ рдПрдХ рдЕрд▓рдЧ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рдо URL рдкрд░ рдЧрдП рдФрд░ рд╡рд╣рд╛рдВ рдХреЗ рд╕рднреА рд▓реЙрдЧ рд╣рдЯрд╛ рджрд┐рдПред рдпрджрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХ рдХреЛрд╢рд┐рд╢ рдХреИрдЪ рдмреНрд▓реЙрдХ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░рд╛рд╡реЗрди рдкреИрдХреЗрдЬ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдВрдЯреНрд░реА рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдпрджрд┐ рдЖрдк рд╕рдВрддрд░реА рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯ URL рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдиреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдпрд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╕рдВрджреЗрд╢ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдЖрдкрдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореЗрд░реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╣реБрдЖред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ - рд╡рд┐рдЬреНрдЮрд╛рдкрди рдмреНрд▓реЙрдХрд░реНрд╕ рдФрд░ рдПрдВрдЯреАрд╡рд╛рдпрд░рд╕ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ - рд▓рдЧрд╛рддрд╛рд░ рдЗрд╕рдХрд╛ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ, рджрд░рд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реА рдереАред
рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рднреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдорд╛рдкрджрдВрдб рдФрд░ рд╕рдВрдХреЗрддрдХреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдирд┐рдЧрд░рд╛рдиреА рдХреА рдЬрд╛рдПрдЧреАред рд╣рдо рдЯреНрд░реИрдлрд╝рд┐рдХ рдкрд░, рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХреА рд╡рд╛рдкрд╕реА рдкрд░, рд╡рд┐рдЬреНрдЮрд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдбрд┐рдЧреНрд░реА рдкрд░, рдпрд╛рдиреЗрдХреНрд╕, рдЖрджрд┐ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдмреИрдирд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред (рд░реИрдореНрдмрд▓рд░ рдЧреНрд░реБрдк рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕)ред рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпреИрдВрдбреЗрдХреНрд╕ рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕реЗрд╡рд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдпрд╣ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдзреНрд╡рд╕реНрдд рд╣реЛ рд╕рдХрддреА рд╣реИред
рдпрджрд┐ рдЖрдк рддреГрддреАрдп-рдкрдХреНрд╖ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдВрдЪрд╛рд░ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдмрд╣реБрдд рдЬрд▓реНрджреА рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреАред рдХрд╣рд╛рдиреА рдореЗрд░реЗ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рд╣реИ: рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдпреИрдВрдбреЗрдХреНрд╕ рд╕реЗ, рд╡рд┐рдЬреНрдЮрд╛рдкрди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рддреЗрдЬреА рд╕реЗ рдЖрдирд╛ рдмрдВрдж рд╣реЛ рдЧрдИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЙрдирдореЗрдВ рддрдХрдиреАрдХреА рдЦрд░рд╛рдмреА рдереА рдФрд░ рдкреВрд░рд╛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдиреЗрдЯрд╡рд░реНрдХ рдХрд╕рдХрд░ рдиреАрдЪреЗ рдЪрд▓рд╛ рдЧрдпрд╛ред рдФрд░ рдпрд╣ рдпреИрдВрдбреЗрдХреНрд╕ рдирд╣реАрдВ рдерд╛ рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рдлреЛрди рдХрд┐рдпрд╛ рдФрд░ рдЙрдирд╕реЗ рдкреВрдЫрд╛ рдХрд┐ рдЙрдирдХреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ? рдХреБрдЫ рдЫреЛрдЯреЗ URL рд▓реЗрдВ, GET рдкреИрд░рд╛рдореАрдЯрд░ рд▓рд┐рдЦреЗрдВ рдФрд░ рдЗрд╕ URL рдкрд░ GET рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВред рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдореЗрдВ, рдЗрд╕ URL рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓реЙрдЧ рдХреЛ рд▓рд┐рдЦреЗрдВ рдФрд░ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдХреЛ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдмрдврд╝рд╛рдПрдБред рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред
рд╡рд╣ рд╕рдм рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЦрддрд░реЛрдВ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рд▓рд┐рдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рд╣рд░ рдХреЛрдИ рдЬреЛ рдЕрдВрдд рддрдХ рдкрдврд╝рд╛ рд╣реИ - рдореИрдВ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ)))
рд╡рд┐рд╖рдп рдкрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрддреЛрдВ рдХреА рд╕реВрдЪреА:
www.owasp.org/index.php/Main_Page
tproger.ru/translations/webapp-security
рдПрд╕ рд╣реЙрдХреНрд╕ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рддреЗрдЬрд╝ рд╕рд┐рдВрдЧрд▓ рдкреЗрдЬ рдПрдкреНрд▓реАрдХреЗрд╢рди: рд╕реБрд░рдХреНрд╖рд╛
рд╕реАрдХреЙрд░реНрдб, рд░реЙрдмрд░реНрдЯ рд╕реАред рд╕реАрдИрдЖрд░рдЯреА рд╕реА рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдбрд┐рдВрдЧ рдорд╛рдирдХ / рд░реЙрдмрд░реНрдЯ рд╕реАред рд╕реАрдХреЙрд░реНрдбред - 2008
рдЪреЗрддрди рдХрд░рдВрдбреЗред рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдиреЛрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди - 2017
рд╕реНрдЯреАрд╡рди рдкрд╛рдорд░ред рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ, рд╢реЛрд╖рдг, рд░реЛрдХрдерд╛рдо - 2011
рд░реЙрдмрд░реНрдЯ рд╢рд┐рдореЛрдВрд╕реНрдХреА, рд╕реАрди-рдлрд┐рд▓рд┐рдк рдУрд░реАрдЖрдиреЛред рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд╣рдорд▓реЛрдВ рдФрд░ рд░рдХреНрд╖рд╛ - 2012
рдорд╛рд░реНрдХрд╕ рдкрд┐рдВрдЯреЛ, рдбреИрдлрд┐рдб рд╕реНрдЯреБрдЯрд░реНрдбред рд╡реЗрдм рдПрдкреНрд▓реАрдХреЗрд╢рди рд╣реИрдХрд░ рдХреА рд╣реИрдВрдбрдмреБрдХ: рдлрд╛рдЗрдВрдбрд┐рдВрдЧ рдПрдВрдб рдПрдХреНрд╕рдкреНрд▓реЙрдЗрдЯрд┐рдВрдЧ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдлреНрд▓реИрд╡реНрд╕, 2 рдбреА рд╕рдВрд╕реНрдХрд░рдг - 2011
рдХрд╛рд░реНрд▓ рджреВрдирд╛ред рдЖрдкрдХрд╛ Node.js рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ - 2015 рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░реЗрдВ