рд╕реБрд░рдХреНрд╖рд╛ рдХреНрд░рд┐рдм: REST



REST рдПрдХ рдЕрддреНрдпрдВрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреЗрдПрд╕рдПрди рдпрд╛ рдПрдХреНрд╕рдПрдордПрд▓ рдЖрдорддреМрд░ рдкрд░ рд╕рдВрд░рдЪрдирд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЬрдмрдХрд┐ рдЖрд░рдИрдПрд╕рдЯреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдЦреНрдд рдорд╛рдирдХ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рд▓рдЪреАрд▓рд╛рдкрди рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдереЛрдбрд╝рд╛ рдЕрд░рд╛рдЬрдХрддрд╛)ред

REST рдЖрдкрдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдореБрджреНрджреЗ рдкрд░ рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рдпрд╛ рдХрдИ рдкрд╛рдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдкреНрд░рд╢реНрди рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред OWASP рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдордиреЗ рдЖрдкрдХреЗ REST рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рддреИрдпрд╛рд░ рдХреА рд╣реИред

рдЙрди рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрдм рдпрд╣рд╛рдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рдо рдЕрдЬрдЧрд░ рдФрд░ Django рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдирд┐рдпрдо реж


HTTPS


рдмрд╕ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВред рдХреГрдкрдпрд╛ред рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдиреЗ рдХрд┐рд╕реА рдХреЛ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╣рдореЗрд╢рд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдЕрднреА рднреА HTTPS рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рддреБрд░рдВрдд рдареАрдХ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, рдФрд░ рд╣рд░ рдХреЛрдИ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдирд┐рдпрдо рез


рдкреНрд░рдорд╛рдгреАрдХрд░рдг


рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╕рд▓рд╛рд╣ рдкреНрд░рддреАрдд рд╣реЛрдЧреА, рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдИ рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдЖрд╡реЗрджрди рдореЗрдВ рд╣рдореЗрд╢рд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдЖрдк рдЕрдм рд╕реЛрдЪрддреЗ рд╣реЛрдВ рдХрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдХрдВрдкрдиреА рдХреЗ рднреАрддрд░ рд╣реА рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдХрд░реНрдордЪрд╛рд░реА рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрджрд┐ рдЖрдк рдкрддреНрд░рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдШрдЯрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЕрддреБрд▓рдиреАрдп рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдкрд╣реБрдБрдЪ рдЯреЛрдХрди рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ JWT (JSON рд╡реЗрдм рдЯреЛрдХрди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рди рдХреЗ рд╕рд╛рде рди рдХрд░реЗрдВ {"alg": "none"} рдЕрдЦрдВрдбрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП, рдЯреЛрдХрди рдореЗрдВ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдпрд╛ рдореИрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП! рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдореИрдХ рдореИрдЪ рдХреА рдкреАрдврд╝реА рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреБрдВрдЬреА (рдпрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ), рдЕрд░реНрдерд╛рдд рдпрджрд┐ рд╕рд░реНрд╡рд░ рдореИрдХ рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рддреЛ рдпрд╣ рдЙрд╕рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рднреА рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рди рдХреЗрд╡рд▓ рд╕рдВрджреЗрд╢ рдХреА рдЕрдЦрдВрдбрддрд╛, рдмрд▓реНрдХрд┐ рдкреНрд░реЗрд╖рдХ рдХреА рдкрд╣рдЪрд╛рди рдХреА рднреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИред

рдирд┐рдпрдо реи


HTTP рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ


рд╕рд░реНрд╡рд░ рдХреЛ рдЙрди рддрд░реАрдХреЛрдВ рдХреЛ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдЬреЛ рдЖрдк (GET, POST, PUT, рдЖрджрд┐) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ) рдФрд░ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдлрд┐рдЯ рди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВред рдЗрд╕рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдЙрддреНрдкрд╛рджрди рдкрд░ TRACE рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрд╣ рд╡рд┐рдзрд┐ XST рд╣рдорд▓реЗ (рдХреНрд░реЙрд╕-рд╕рд╛рдЗрдЯ рдЯреНрд░реЗрд╕рд┐рдВрдЧ) рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ XSS рд╣рдорд▓рд╛ рдФрд░ TRACE рдпрд╛ TRACK рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рд╣рдорд▓рд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХреБрдХреА рдЪреЛрд░реА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реАред рд╡реЗ HttpOnly рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИрдВ)ред рдмрд╛рд╣рд░ рд╕реЗ рдЙрдкрд▓рдмреНрдз рдЕрдкрдиреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдо рдЬрд╛рдирдХрд╛рд░реА, рдмреЗрд╣рддрд░ рд╣реИред

рдирд┐рдпрдо рей


рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд╣реБрдВрдЪ


рдХреНрдпрд╛ рдЖрдкрдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, DELETE? рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВ - рддреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ GET рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдкреНрд░рдмрдВрдзрдХ GET рдФрд░ POST рдЗрддреНрдпрд╛рджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рднреВрдорд┐рдХрд╛рдПрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдЬреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд╣реБрдВрдЪ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рдЧрднрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪреЗрдХ рдмреНрд▓реЙрдХ рд╣реЛрдЧрд╛:

if request.POST and user.is_manager: do_stuff() 

рдирд┐рдпрдо рек


рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ


рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЖрдкрдХреЛ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдПрдХ рд▓рд╛рдЦ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рднреЗрдЬрдиреЗ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рдзрд┐ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдФрд░ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред Django рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, django-ratelimit рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдк рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА, рд▓реЗрдХрд┐рди рдПрдХ рдЖрдИрдкреА рдкрддрд╛ред

рдирд┐рдпрдо рел


рдЗрдирдкреБрдЯ рдХреЛ рдорд╛рдиреНрдп / рдкрд╡рд┐рддреНрд░ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ


рдХрднреА рднреА рд╕рдВрдЪрд╛рд░рд┐рдд рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВ, рд╣рдореЗрд╢рд╛ рд╕рддреНрдпрд╛рдкрди / рд╕реНрд╡рдЪреНрдЫрддрд╛ рдХрд░реЗрдВ:

  • рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ (рдФрд░ рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ), рдЗрдирдкреБрдЯ рдХреА рд▓рдВрдмрд╛рдИ / рдкреНрд░рдХрд╛рд░ / рдкреНрд░рд╛рд░реВрдк рдкрд░ рдПрдХ рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рд╕реНрд╡рдпрдВ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВред рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ / рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓рдВрдмрд╛рдИ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рдпрд╛ рдЬреЛ рдкреНрд░рдХрд╛рд░ / рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВред
  • рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╕рднреА рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдгреЛрдВ рд╕реЗ рд╣рдореЗрд╢рд╛ рдмрдЪрдХрд░ рд░рд╣реЗрдВред
  • рдпрджрд┐ рдЖрдк рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рддреНрдпрд╛рдкрди рдФрд░ рд╕реНрд╡рдЪреНрдЫрддрд╛ рдЙрдкрдХрд░рдг рд╣реЛрддреЗ рд╣реИрдВ (рд▓реЛрдХрдкреНрд░рд┐рдп рд▓реЛрдЧреЛрдВ рд╕реЗ рджреВрд░ - Django (рдЕрдЬрдЧрд░) рдФрд░ Yii2 (php)), рдЗрд╕рд▓рд┐рдП рдЙрдирдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдкрд╣рд▓реВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЦреЛрдЬреЗрдВ рдЬреЛ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗ, рдпрд╛ рдРрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦреЗрдВред
  • рд╕рддреНрдпрд╛рдкрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВред рдпрджрд┐ рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реЛрдз рд▓рдЧрд╛рддрд╛рд░ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ - рдРрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред
  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рдкрд╛рд░реНрд╕рд░ (рдпрд╛ рдЗрд╕рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг) рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рд╣рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдирд╣реАрдВ рд╣реИред


рдирд┐рдпрдо рем


рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рди рджреЗрдВ


рдпрджрд┐ рдХрд┐рд╕реА рднреА рдЕрдиреБрд░реЛрдз рдХреЗ рдХрд╛рд░рдг рдЖрд╡реЗрджрди рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реИ, рдпрд╛ рдпрд╣ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рди рдХрд░реЗрдВ, рд╕рдмрд╕реЗ рд╕рд╛рд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд▓реМрдЯрд╛рдПрдВред рдХреБрдЫ рд╕рд░реНрд╡рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рдж рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрд░реНрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред

рдирд┐рдпрдо 7


рд╣рдореЗрд╢рд╛ рд▓реЙрдЧ рд░рдЦреЗрдВ


рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ (рдкреНрд░рдорд╛рдгреАрдХрд░рдг, рддреНрд░реБрдЯрд┐, рдЕрдиреБрд░реЛрдз, рдЖрджрд┐) рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╡рд┐рд╕реНрддреГрдд рд╣реЛрдиреЗ рджреЗрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЙрдирдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВред рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реЙрдЧ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдл рдХрд░реЗрдВред

рдирд┐рдпрдо 8


рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ - рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ!


рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ (рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ) рдХреЗ рд▓рд┐рдП, рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣реЗрдбрд░ рдХреЛ X-Content-Type-Options: nosniff рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рднреА рд╣реИ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЕрдиреНрдп рдХрдВрдЯреЗрдВрдЯ-рдЯрд╛рдЗрдк рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ (XSS рд╣рдорд▓реЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рдЙрдкрд╛рдп)ред

рдирд┐рдпрдо реп


рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░ рдорд╛рдиреНрдп рдХрд░реЗрдВ


  1. рдпрджрд┐ рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА-рд╕рд╛рдордЧреНрд░реА рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдпрд╣ рдЧрд▓рдд рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рд╕рд░реНрд╡рд░ / рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЗрдВрдЬреЗрдХреНрд╢рди рдпрд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  2. рдпрд╣ рдЙрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рднреА рд╣реИ рдЬрд┐рдирдХреА рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░ рдЖрдк рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдпрд╣ рд╣реЗрдбрд░ рдЖрдо рддреМрд░ рдкрд░ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рд╕реЗ рдмрдЪреЗрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдВрдЯреЗрдВрдЯ-рдЯрд╛рдЗрдк рдлрдВрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░ / рдореБрджреНрджреЗ рд╣реИрдВ, рдпрджрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ (рдпрд╣ XXE рд╣рдорд▓реЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛)ред
  3. REST рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ, рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, json рдФрд░ xml) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЖрдо рдмрд╛рдд рд╣реИ, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЗрдбрд░ рдореЗрдВ рдкрд╕рдВрджреАрджрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╣реЗрдбрд░ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдХрдВрдЯреЗрдВрдЯ-рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╣реЗрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред рдЙрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рднреА рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╢реАрд░реНрд╖рд▓реЗрдЦ рдореЗрдВ рд╕реАрдзреЗ рд╕рдорд░реНрдерд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред

рдирд┐рдпрдо резреж


рдХреНрд░реЙрд╕-рдСрд░рд┐рдЬрд┐рдирд▓ рд░рд┐рд╕реЛрд░реНрд╕ рд╢реЗрдпрд░рд┐рдВрдЧ (рдХреЛрд░) рд╕реЗрдЯ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ


рдХреЛрд░ рдПрдХ рдорд╛рдирдХ рд╣реИ рдЬреЛ рдХреНрд░реЙрд╕-рдбреЛрдореЗрди рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди CORS рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдПрдХреНрд╕реЗрд╕ рдиреАрддрд┐ рдпрдерд╛рд╕рдВрднрд╡ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдФрд░ рд╕рдЦреНрдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдирд┐рдпрдо резрез


URL рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рди рдХрд░реЗрдВ


рд╕рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ (рдкрд╛рд╕рд╡рд░реНрдб, рдХреБрдВрдЬрд┐рдпрд╛рдБ, рдЯреЛрдХрди рдФрд░ рд▓реЙрдЧрд┐рди, рдЕрдзрд┐рдорд╛рдирддрдГ рднреА) рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдХреЗ рдЕрдВрджрд░ рдпрд╛ рд╢реАрд░реНрд╖рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ URL рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдкрдХреЛ GET рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╣реЗрдбрд░ рдореЗрдВ рд░рдЦреЗрдВред

рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИ:
рдЙрджрд╛рд╣рд░рдг .com / рдирд┐рдпрдВрддреНрд░рдХ / 123 / рдХрд╛рд░реНрд░рд╡рд╛рдИ? apiKey = a53f435643de32

рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдЙрджрд╛рд╣рд░рдг .com / рдирд┐рдпрдВрддреНрд░рдХ / 123 / рдХрд╛рд░реНрд░рд╡рд╛рдИ

рд╕реБрд░реНрдЦрд┐рдпреЛрдВ рдореЗрдВ:
рд╣реЛрд╕реНрдЯ: example.com
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдПрдЬреЗрдВрдЯ: рдореЛрдЬрд╝рд┐рд▓рд╛ ...
X-APIkey: a53f435643de32

рдирд┐рдпрдо резреи


CSRF рд╣рдорд▓реЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ


рдЖрдк рдпрд╣рд╛рдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣рдорд▓реЛрдВ рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдПрд╕рдЖрд░рдПрдл рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рддрд░реАрдХрд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдирд┐рдпрдо резрей


рдЕрдкрдиреЗ рдврд╛рдВрдЪреЗ рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░реЗрдВ


рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЖрд░рдИрдПрд╕рдЯреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдиреЗрддреНрд░рд╣реАрди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдХреНрд╕рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдкрдврд╝реЗрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рднрд╛рдЧред рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рди рдЫреЛрдбрд╝реЗрдВ! рдкреНрд░рддреНрдпреЗрдХ рдврд╛рдВрдЪреЗ рдХреА рдЕрдкрдиреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЬрд╛рдирдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

Source: https://habr.com/ru/post/hi453384/


All Articles