рдЧреЛ рдХреЗ рд▓рд┐рдП 6 рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╕реБрд░рдХреНрд╖рд╛ рдЕрднреНрдпрд╛рд╕

рд▓реЗрдЦ рдХрд╛ рдПрдХ рдЕрдиреБрд╡рд╛рдж рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЧреЛрд▓рдВрдЧ рдбреЗрд╡рд▓рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред





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

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

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 рд╣реИред рдореБрдЦреНрдп рд╢реЛрд╖рдг рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдИ URL рдореЗрдВ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдореВрд▓реНрдп рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЛ рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЧреЛ рдХреЗ рдкрд╛рд╕ рдПрдХ html / рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреИрдХреЗрдЬ рд╣реИ, рдЬреЛ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдмрдЬрд╛рдп рдЗрдирдкреБрдЯ рдХреА рддрд░рд╣<script>alert(тАШ !тАЩ);</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 рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЕрднреА рднреА OWASP рд╢реАрд░реНрд╖ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рд╣реИ ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд┐рдВрджреБ рд╣реИрдВ рдЬрд┐рди рдкрд░ рдЖрдкрдХреЛ рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдЖрдкрдХреЛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рд╡рд╣ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рд╕реАрдорд┐рдд рдЕрдзрд┐рдХрд╛рд░ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдмрддрд╛рдпрд╛ рдерд╛, рдпрд╛ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдгреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдФрд░ HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрдХреЗрдЬ рд╕реЗ HTMLEscapeString рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ред

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

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


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

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

4. рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВ


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

OWASP рдХрдИ рд╣реИ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреНрдпрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░ bcrypt, PDKDF2, Argon2рдпрд╛ scryptред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рдЧреЛ рдкреИрдХреЗрдЬ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - рдХреНрд░рд┐рдкреНрдЯреЛ ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ 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 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╕рд╛рдЗрдЯ HTTPS рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рддреЛ рдХреНрд░реЛрдо рдЖрдкрдХреЛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛рдПрдЧрд╛ред рд╕реВрдЪрдирд╛ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рднрд╛рдЧ рдПрдХ рдиреАрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рдЧрдорди рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рдЯ рдХрдиреЗрдХреНрд╢рди рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЗрд╡рд▓ рдкреЛрд░реНрдЯ 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")


рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЯреАрдПрд▓рдПрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕рд░реНрд╡рд░ рдХрд╛ рдирд╛рдо рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
config := &tls.Config{ServerName: "yourSiteOrServiceName"}


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

6. рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд▓реЙрдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред


рдЕрдВрддрд┐рдо, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо, рддреНрд░реБрдЯрд┐ рдФрд░ рдЕрдкрдиреЗ рдЧреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧред

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

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

if err != nil {
    //  
}


рдЧреЛ рднреА рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

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 рдХреА рдПрдХ рдкреБрд╕реНрддрдХ рд╣реИ ред рдЧреЛ рдореЗрдВ рдЪреМрдЦрдЯреЗ, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдЕрдиреНрдп рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рд╡рд╛рд▓реЗ рдПрдХ рднрдВрдбрд╛рд░ рднреА рд╣реИ ред

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


. тАФ , , , .NET, Node.js Java, Docker.

.

All Articles