import sqlite3
scary_data_from_user = "person"
create_sql="CREATE TABLE IF NOT EXISTS person ( name VARCHAR , age INTEGER );"
db = "sample.db"
ins_sql_works="INSERT INTO person (name, age) VALUES (?, ?);"
ins_sql_notworks="INSERT INTO ? (name, age) VALUES (?, ?);"
conn = sqlite3.connect(db)
cur = conn.cursor()
cur.execute(create_sql)
cur.execute(ins_sql_works,("omer",9999))
#WORKS without problem
if len(cur.execute("select sql from sqlite_master where type = 'table' and name = ?;", (scary_data_from_user,)).fetchall()) < 1:
raise RuntimeError("The user is trying to hack me! HELP! HELP!")
else:
# Note that there is no way for the query in the if statement to return any rows if the
# scary_data_from_user contains something malicious. This is perfectly safe to do here,
# given the if statement up above.
cur.execute(f"INSERT INTO {scary_data_from_user} (name, age) VALUES (?, ?);", ("omer", 9999))
conn.commit()
conn.close()
Comments