不幸的是,表不能成为参数替换的目标(我没有找到任何确定的来源,但是我已经在一些网络论坛上看到了)。
如果你担心注入(可能应该这样做),则可以编写一个在传递字符串之前清除字符串的函数。由于你仅在查找表名,因此仅接受字母数字,删除所有标点符号(例如)(][;,和空格)就应该是安全的。基本上,保持即可A-Z a-z 0-9。
def scrub(table_name): return ''.join( chr for chr in table_name if chr.isalnum() )scrub('); drop tables --') # returns 'droptables'


