Sobes.tech
Back to questions
Middle+
4

Что такое SQL-инъекция? Приведите пример уязвимого запроса и способы защиты

Companies where asked
Ozon ФинтехOzon Финтех

Answer from AI

sobes.tech AI

SQL-инъекция — это уязвимость, при которой злоумышленник может внедрить вредоносный SQL-код в запрос к базе данных через пользовательский ввод. Это может привести к несанкционированному доступу, изменению или удалению данных.

Пример уязвимого запроса на Go:

username := r.FormValue("username")
query := fmt.Sprintf("SELECT * FROM users WHERE username = '%s'", username)
rows, err := db.Query(query)

Если пользователь введет username как ' OR '1'='1, запрос станет:

SELECT * FROM users WHERE username = '' OR '1'='1'

что вернет все записи.

Способы защиты:

  • Использование подготовленных выражений (prepared statements) с параметризацией:
stmt, err := db.Prepare("SELECT * FROM users WHERE username = ?")
rows, err := stmt.Query(username)
  • Валидация и экранирование пользовательского ввода.
  • Использование ORM, которые автоматически защищают от инъекций.
  • Ограничение прав доступа к базе данных.

Таким образом, основная защита — это параметризация запросов, которая отделяет код SQL от данных.