Lors de l'utilisation de SQL dans Golang, il est parfois nécessaire d'échapper aux données d'entrée pour empêcher les attaques par injection SQL. Les attaques par injection SQL font référence à des pirates informatiques qui construisent des instructions SQL malveillantes pour effectuer des opérations non autorisées, telles que la suppression de bases de données, la falsification de données, etc. Afin d'empêcher cette attaque, nous devons échapper aux données saisies par l'utilisateur pour garantir que les données saisies ne contiennent aucun caractère illégal.
Golang fournit des fonctions intégrées qui peuvent être utilisées pour échapper aux instructions SQL. La fonction la plus couramment utilisée est la fonction db.QueryEscape()
. Cette fonction prend un argument de chaîne et renvoie une chaîne échappée. db.QueryEscape()
函数。这个函数接收一个字符串参数,并返回一个已经转义的字符串。
下面是一个使用db.QueryEscape()
函数的示例代码:
import "database/sql" import _ "github.com/go-sql-driver/mysql" func main() { db, err := sql.Open("mysql", "user:password@/dbname") if err != nil { panic(err.Error()) } defer db.Close() var name string inputName := "Robert'; DROP TABLE students;--" err = db.QueryRow("SELECT name FROM students WHERE name=?", db.QueryEscape(inputName)).Scan(&name) if err != nil { panic(err.Error()) } fmt.Printf("The name is %s\n", name) }
上面这个例子查询了students
表中名字为Robert'; DROP TABLE students;--
的学生,这个名字中包含了一个恶意的SQL语句,如果不对输入数据进行转义,将会执行DROP TABLE语句,删除整张表。但是,由于我们使用了db.QueryEscape()
函数进行了转义,所以就不会发生SQL注入攻击了。
除了db.QueryEscape()
函数之外,还有一些其他的转义函数,比如db.Query(fmt.Sprintf("SELECT name FROM students WHERE name='%s'", strings.Replace(inputName, "'", "''", -1)))
db.QueryEscape()
: rrreee
L'exemple ci-dessus interroge la tablestudents
avec le nom Robert' ; Étudiants DROP TABLE ; - Étudiants de
, ce nom contient une instruction SQL malveillante. Si les données d'entrée ne sont pas échappées, l'instruction DROP TABLE sera exécutée et la table entière sera supprimée. Cependant, puisque nous utilisons la fonction db.QueryEscape()
pour nous échapper, les attaques par injection SQL ne se produiront pas. 🎜🎜En plus de la fonction db.QueryEscape()
, il existe d'autres fonctions d'échappement, telles que db.Query(fmt.Sprintf("SELECT name FROM Students WHERE name='% s'", strings.Replace(inputName, "'", "''", -1)))
, vous pouvez également échapper aux instructions SQL. Cependant, cette méthode est lourde et sujette aux erreurs. 🎜🎜En bref, que vous utilisiez la fonction d'échappement intégrée ou que vous échappiez manuellement, assurez-vous que les données saisies sont en sécurité. Car si les données saisies présentent des failles de sécurité, même si l’évasion est utilisée, cela laissera des opportunités aux pirates. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!