python - SQL注入攻击:SQL语句中的f-string
问题描述
根据sqlite3模块的文档:
你不应该使用 Python 的字符串操作来组装你的查询,因为这样做是不安全的;它使您的程序容易受到 SQL 注入攻击。
我有以下代码使用 Python 的字符串操作之一(f-string),但它并不是真正的查询。在这里使用 f-string 安全吗?
import sqlite3
db = 'example.db'
con = sqlite3.connect(db)
cur = con.cursor()
table = 'mytable'
cur.execute(f'DROP TABLE IF EXISTS {table}')
sqlite3 的文档还说:
相反,使用 DB-API 的参数替换。在要使用值的任何位置放置一个占位符,然后提供一个值元组作为游标的 execute() 方法的第二个参数。SQL 语句可以使用两种占位符之一:问号(qmark 样式)或命名占位符(命名样式)。
但是这些样式似乎在这里不起作用:
import sqlite3
db = 'example.db'
con = sqlite3.connect(db)
cur = con.cursor()
cur.execute(f'DROP TABLE IF EXISTS :table', {"table": "mytable"})
sqlite3.OperationalError: near ":table": syntax error
解决方案
推荐阅读
- sql-server - 是否可以防止在没有 WHERE 子句的情况下执行 UPDATE 或 DELETE 语句?
- sql-server - SQL根据加入和离开日期获取活跃用户
- cpan - 无法打开流:磁盘配额超出 Godaddy cpanel
- r - 无法在 draw_plot() 中缩放图例大小
- php - 设置 PHP 变量并同时获取 WooCommerce 选项?
- html - 在 angular6 中执行我的项目时,它只执行 index.html 页面,原因是什么?
- r - 数值向量:在 epsilon 内彼此相距很远的条目
- python-3.x - Sparqlwrapper:它不返回任何内容,但查询正在使用 dbpedia.org/sparql
- c# - 将对象从数组写入文本文件c#
- java - 如何从java控制台的输出中获取字符串并将其与预期值进行比较