@vGrabko99
html, css, js, php, golang, mysql

Как безопасно работать с sql?

Привет. В интернете не нашел не чего по поводу защиты от sql инъекций в golang. Сейчас есть код
rows, err := DB.Query("SELECT * FROM dev_method WHERE name=?", ps.ByName("methods"))
	if err != nil {
		status.Code503(w, r)
	}
	defer rows.Close()
	bks := make([]*dev_method, 0)
	for rows.Next() {
		bk := new(dev_method)
		err := rows.Scan(&bk.id, &bk.id_menu, &bk.name, &bk.description)
		if err != nil {
			status.Code503(w, r)
		}
		bks = append(bks, bk)
	}
	if err = rows.Err(); err != nil {
		status.Code503(w, r)
	}


какие в нём есть уязвимости и если есть то как их исправить?
  • Вопрос задан
  • 1202 просмотра
Решения вопроса 2
Запрос тут вполне нормально формируется, с использованием плейсхолдеров. SQL-иньекции быть не может, ибо "?" заменяется на значение через эскейпинг.
Ответ написан
Комментировать
@kshvakov
это напрямую зависит от используемого драйвера, go database/sql за это не отвечает https://golang.org/src/database/sql/sql.go?s=25224...

можно сделать "драйвер" который какраз "заменяет значение через эскейпинг" и привет иньекция

судя по плейсхолдеру это у вас mysql, если используете go-sql-driver то все ок

https://github.com/go-sql-driver/mysql/blob/master...
https://github.com/go-sql-driver/mysql/blob/master...

он использует "подготовленный" запрос, на сервер "отдельно" уйдет запрос и отдельно данные, в запрос ничего драйвер не запихает
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы