Какие знаешь подходы для обеспечения безопасности API

«Какие знаешь подходы для обеспечения безопасности API» — вопрос из категории Безопасность, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

  1. Аутентификация и авторизация

    • Использование JWT, OAuth2.0, API-ключей.
    • Пример с JWT в Go:
      token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
          "user_id": 123,
          "exp":     time.Now().Add(time.Hour * 1).Unix(),
      })
      tokenString, _ := token.SignedString([]byte("secret"))
  2. HTTPS
    Обязательное шифрование трафика через TLS/SSL.

  3. Валидация входных данных

    • Проверка параметров запроса (например, с помощью validator).
    • Защита от SQL-инъекций через prepared statements.
  4. Ограничение запросов (Rate Limiting)

    • Использование middleware для контроля частоты запросов (например, github.com/ulule/limiter).
  5. CORS
    Настройка заголовков (Access-Control-Allow-Origin) для ограничения доменов.

  6. Защита от атак

    • CSRF-токены, заголовки X-Content-Type-Options, X-Frame-Options.
    • Регулярное обновление зависимостей.

Пример middleware для CORS:

func enableCORS(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Access-Control-Allow-Origin", "trusted-domain.com")
        next.ServeHTTP(w, r)
    })
}