大家知道吗?使用参数化查询(PreparedStatement)是一种有效防止 SQL 注入的方法。参数化查询将 SQL 语句的结构和用户输入分开处理,确保用户输入的数据不会改变 SQL 语句的结构。以下是改进后的代码示例:
import sqlite3 def login(username, password): conn = sqlite3.connect('example.db') cursor = conn.cursor() query = "SELECT * FROM users WHERE username=? AND password=?" cursor.execute(query, (username, password)) result = cursor.fetchone() conn.close() return result
在这段代码中,? 是一个占位符,表示用户输入的位置。cursor.execute(query, (username, password)) 会将 username 和 password 作为参数传递给数据库。这样,即使用户输入了恶意的 SQL 片段,这些片段也会被当作普通值处理,而不会改变查询的逻辑,从而有效防止 SQL 注入攻击。
好了,今天的文章分享就到这里了,希望对大家的学习和工作有所帮助~