python 使用格式化字符串 f-string查询sql的注入风险

f-string查询(用户的输入会被当成sql语句的一部分执行)

query = f"SELECT code_content FROM sms_code_records WHERE email = '{username}' ORDER BY send_time DESC LIMIT 1"

用户输入user@example.com'; DROP TABLE sms_code_records; --
执行sql:

SELECT code_content FROM sms_code_records WHERE email = 'user@example.com'; DROP TABLE sms_code_records; --' ORDER BY send_time DESC LIMIT 1

DROP TABLE sms_code_records; --会删除整个 sms_code_records 表,这显然是一个严重的安全问题。

解决方案:参数化查询

query = "SELECT code_content FROM sms_code_records WHERE email = %s ORDER BY send_time DESC LIMIT 1"
cursor.execute(query, (username,))

username=user@example.com'; DROP TABLE sms_code_records; --

执行sql

SELECT code_content FROM sms_code_records WHERE email = 'user@example.com''; DROP TABLE sms_code_records; --' ORDER BY send_time DESC LIMIT 1

DROP TABLE 部分不会被当作 SQL 语句执行,而是作为字符串的一部分被正确处理。

posted @ 2025-07-16 09:24  吐司波妞  阅读(15)  评论(0)    收藏  举报