避免SQL注入的关键是使用参数化查询,而不是直接将用户输入的值拼接到SQL查询语句中。下面是一个使用参数化查询的示例代码:
import mysql.connector
def get_user(username):
db = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)
cursor = db.cursor()
query = "SELECT * FROM users WHERE username = %s"
cursor.execute(query, (username,))
result = cursor.fetchall()
db.close()
return result
在上面的代码中,我们使用了%s
作为占位符来代表查询中的值,而不是直接使用用户输入的username
。然后,我们使用cursor.execute()
方法来执行查询,并将username
作为参数传递给execute()
方法。
这样做的好处是,参数化查询会自动将用户输入的值进行转义,从而防止SQL注入攻击。这样无论用户输入什么样的值,都不会对查询语句造成任何影响。