рд╕реБрд░рдХреНрд╖рд┐рдд рдЧреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 6 рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ

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

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рддрдереНрдп рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдИ рднреЗрджреНрдпрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛ред рдпрджрд┐ рдбреЗрд╡рд▓рдкрд░ рдХреБрдЫ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдРрд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рднреА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЖрд╡реЗрджрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЧреЛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк OWASP рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдХрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред



рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣рдо рдЖрдЬ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреИрдпрд╛рд░ рд╣реИ, OWASP рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЧреЛ рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 6 рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВред

1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ


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

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

 package main import (  "fmt"  "gopkg.in/go-playground/validator.v9" ) type User struct {  Email string `json:"email" validate:"required,email"`  Name string `json:"name" validate:"required"` } func main() {  v := validator.New()  a := User{    Email: "a",  }  err := v.Struct(a)  for _, e := range err.(validator.ValidationErrors) {    fmt.Println(e)  } } 

2. HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


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

рдЧреЛ рдореЗрдВ рдПрдХ html / рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрдХреЗрдЬ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ HTML рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЯреБрдХрдбрд╝реЛрдВ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдирддреАрдЬрддрди, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬреЛ рдЖрдХреНрд░рдордг рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдмрдЬрд╛рдп рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп <script>alert('You've Been Hacked!');</script> , рдЬреЛ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рд╣реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рд╛рджреЗ рдкрд╛рда рдХреЗ рд╕рд╛рде рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░реЗрдЧрд╛ред ред HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ HTTP рд╕рд░реНрд╡рд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 package main import (  "html/template"  "net/http" ) func handler(w http.ResponseWriter, r *http.Request) {  param1 := r.URL.Query().Get("param1")  tmpl := template.New("hello")  tmpl, _ = tmpl.Parse(`{{define "T"}}{{.}}{{end}}`)  tmpl.ExecuteTemplate(w, "T", param1) } func main() {  http.HandleFunc("/", handler)  http.ListenAndServe(":8080", nil) } 

рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдЧреЛ рдкрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдпрд╣ рдЧреЛрд░рд┐рд▓реНрд▓рд╛ рд╡реЗрдм рдЯреВрд▓рдХрд┐рдЯ рд╣реИ ред рдЗрд╕ рдЯреВрд▓рдХрд┐рдЯ рдореЗрдВ рд╡реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреА рдорджрдж рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреБрдХреАрдЬрд╝ рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЛ рд╕рд╛рдВрдХреЗрддрд┐рдХ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛ред рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ - nosurf ред рдпрд╣ рдПрдХ HTTP рдкреИрдХреЗрдЯ рд╣реИ рдЬреЛ CSRF рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

3. рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ SQL рдЗрдВрдЬреЗрдХреНрд╢рди рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦреЗрдВ


рдпрджрд┐ рдЖрдк рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдирдП рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж SQL рдЗрдВрдЬреЗрдХреНрд╢рди рд╣рдорд▓реЛрдВ (рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ SQL рдХреЛрдб рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЗрд╕реА рднреЗрджреНрдпрддрд╛ рдЕрднреА рднреА OWASP рд╢реАрд░реНрд╖ 10 рд░реИрдВрдХрд┐рдВрдЧ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рд╣реИред SQL рдЗрдВрдЬреЗрдХреНрд╢рди рд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рд╕реАрдорд┐рдд рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╣реЛрдВрдЧреЗред рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╛ html/template рдкреИрдХреЗрдЬ рд╕реЗ HTMLEscapeString рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

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

 customerName := r.URL.Query().Get("name") db.Exec("UPDATE creditcards SET name=? WHERE customerId=?", customerName, 233, 90) 

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрдВрдЬрди рдкреВрд░реНрд╡-рддреИрдпрд╛рд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рдХреНрд╡реЗрд░реА рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ? рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк db.Query() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред SQL рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк sqlmap рдЬреИрд╕реЗ рддреГрддреАрдп-рдкрдХреНрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

4. рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВ


рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ BASE64 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдХрд╣реЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдЫрд┐рдкреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕реЗ рдШреБрд╕рдкреИрдард┐рдпреЛрдВ рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдЬреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдЬрд╛рдирдХрд╛рд░реА рдЬреИрд╕реЗ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд╛рд╕рд╡рд░реНрдб, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╛рд╕рд╡рд░реНрдб, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ред

OWASP рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, рдкрд╕рдВрджреАрджрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ bcrypt , PDKDF2 , Argon2 , scrypt ред рдПрдХ рдкреИрдХреЗрдЬ рдЧреЛ рд╣реИ, рдХреНрд░рд┐рдкреНрдЯреЛ , рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣рд╛рдБ bcrypt рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ bcrypt рд╣реИ:

 package main import (  "database/sql"  "context"  "fmt"  "golang.org/x/crypto/bcrypt" ) func main() {  ctx := context.Background()  email := []byte("john.doe@somedomain.com")  password := []byte("47;u5:B(95m72;Xq")  hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)  if err != nil {    panic(err)  }  stmt, err := db.PrepareContext(ctx, "INSERT INTO accounts SET hash=?, email=?")  if err != nil {    panic(err)  }  result, err := stmt.ExecContext(ctx, hashedPassword, email)  if err != nil {    panic(err)  } } 

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

5. HTTPS рд▓рд╛рдЧреВ рдХрд░реЗрдВ


рдЗрди рджрд┐рдиреЛрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЙрди рд╕рд╛рдЗрдЯреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ HTTPS рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рд╕рд╛рде рдЦреБрд▓рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ Chrome HTTPS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ Chrome, рдкрддрд╛ рдмрд╛рд░ рдореЗрдВ рдПрдХ рд╕реВрдЪрдирд╛ рджрд┐рдЦрд╛рдПрдЧрд╛ред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдЧрдарди рдореЗрдВ, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐ рд▓рд╛рдЧреВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдирддреАрдЬрддрди, рдХрдиреЗрдХреНрд╢рди рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ 443 рдкреЛрд░реНрдЯ рдкрд░ рд╕реБрдирдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкрд╛рд╕ рдЙрдЪрд┐рдд рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, HTTP рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП HTTPS рдХреЗ рдордЬрдмреВрд░ рдЙрдкрдпреЛрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ рдЬреЛ HTTPS рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:

 package main import (  "crypto/tls"  "log"  "net/http" ) func main() {  mux := http.NewServeMux()  mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {    w.Header().Add("Strict-Transport-Security", "max-age=63072000; includeSubDomains")    w.Write([]byte("This is an example server.\n"))  })  cfg := &tls.Config{    MinVersion:        tls.VersionTLS12,    CurvePreferences:     []tls.CurveID{tls.CurveP521, tls.CurveP384, tls.CurveP256},    PreferServerCipherSuites: true,    CipherSuites: []uint16{      tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,      tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,      tls.TLS_RSA_WITH_AES_256_GCM_SHA384,      tls.TLS_RSA_WITH_AES_256_CBC_SHA,    },  }  srv := &http.Server{    Addr:     ":443",    Handler:   mux,    TLSConfig:  cfg,    TLSNextProto: make(map[string]func(*http.Server, *tls.Conn, http.Handler), 0),  }  log.Fatal(srv.ListenAndServeTLS("tls.crt", "tls.key")) } 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрд╡реЗрджрди рдкреЛрд░реНрдЯ 443 рдкрд░ рд╕реБрдирддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ HTTPS рдХреЗ рдЬрдмрд░рди рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд▓рд╛рдЗрди рд╣реИ:

 w.Header().Add("Strict-Transport-Security", "max-age=63072000; includeSubDomains") 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, TLS рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕рд░реНрд╡рд░ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖ рд╕рдХрддреА рд╣реИ:

 config := &tls.Config{ServerName: "yourSiteOrServiceName"} 

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

6. рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдФрд░ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред


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

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

рдпрд╣рд╛рдБ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЧреЛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЧреЛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддреА рдирд╣реАрдВ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 if err != nil {    //   } 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреЛ рдореЗрдВ рд▓реЙрдЧ рдирд╛рдордХ log рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

 package main import (  "log" ) func main() {  log.Print("Logging in Go!") } 

рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ logrus , glog , loggo ред рдпрд╣рд╛рдБ logrus рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

 package main import (  "os"  log "github.com/sirupsen/logrus" ) func main() {  file, err := os.OpenFile("info.log", os.O_CREATE|os.O_APPEND, 0644)  if err != nil {    log.Fatal(err)  }  defer file.Close()  log.SetOutput(file)  log.SetFormatter(&log.JSONFormatter{})  log.SetLevel(log.WarnLevel)  log.WithFields(log.Fields{    "animal": "walrus",    "size":  10,  }).Info("A group of walrus emerges from the ocean") } 

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

рдкрд░рд┐рдгрд╛рдо


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

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

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдЖрдк рдЧреЛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?

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


All Articles