在我的代码中,我尝试从数据库中删除一个表(delete_table函数)。就在这之后,我检查表是否已被删除(check_table_from_db函数)。当我这样做时,表被删除但check_table_from_db函数显示它没有。当我在两个不同的运行(两个不同的程序)中执行此过程时。结果是正确的。 以下是check_table_from_db的代码:
def check_table_from_db(table_name):
import MySQLdb as mdb
try:
exists = False
con = mdb.connect('localhost', 'user', '123', 'test')
cur = con.cursor()
s = "SHOW TABLES LIKE '%s'" % (table_name)
cur.execute(s)
exists = (cur.rowcount > 0)
except mdb.Error, e:
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)
finally:
if con:
cur.close()
con.close()
return exists
编辑: 由于已经要求发布delete_table函数,我需要解释一般目的是什么。 delete_table是一个模仿SQL注入攻击的函数。如果攻击成功,则会从数据库中删除一个表(我通过check_table_from_db检查)。它在网站的一个字段中注入代码。因此删除表的代码是:
attack_script = "');DROP TABLE test2;"
_resp = utilities.submit_form(utilities.get_absolute_url(fd.get('action'), main_url), {'uname':'test', 'password':'test', 'cpassword':'test', 'fname':'', 'lname':'', 'age':'', 'major':'', 'university':attack_script}, method=fd.get('method'))
通过submit_form函数,我填写网站中的表单并提交。提交后,我会检查表是否已删除。
答案 0 :(得分:0)
你忘了承诺:
con.commit()