【发布时间】:2021-02-04 11:40:15
【问题描述】:
我正在编写一个 python 文件来查询,该文件容易受到 sql 注入的影响。
此处,在执行 python 文件时,对其进行约束和约束的表名和列名作为命令行参数给出。
这是pyhon文件:
import sqlite3
import sys
con = sqlite3.connect("univ1.db")
cur = con.cursor()
table = sys.argv[1]
column = sys.argv[2]
constraint = sys.argv[3]
cur.execute( """SELECT * FROM {} WHERE {} = '%s'""".format(table, column)% constraint)
rows = cur.fetchall()
for row in rows:
print(','.join([str(val) for val in row]))
此代码被认为容易受到 sql 注入的攻击,因此执行以下命令预计会从数据库中删除指定的表,同时打印建筑物为 blah 的教室的详细信息。
python3 query.py classroom building "blah'; DROP TABLE INSTRUCTOR; --'"
但是由于 cursor.execute 一次只能执行一个命令,因此程序终止并发出警告。
如何允许执行多个命令。另请注意,fetchall 函数应返回相关数据。
为什么要问这个?
这是作业的一部分,我应该在其中编写注入禁用和注入易受攻击的查询文件。
【问题讨论】:
-
通常我们会告诉人们如何编写不易易受 SQL 注入攻击的代码。由于许多人从这里复制代码而不阅读问题,我什至认为回答它很危险。
-
请回答。您可以在一段时间后删除它
标签: python sqlite sql-injection