正如标题所示,我想知道这段代码是否容易受到SQL注入攻击?如果是,有更好、更安全的方法实现同样的功能吗?
def add(table,*args):
statement="INSERT INTO %s VALUES %s" % (table,args)
cursor.execute(statement)
是的,可以使用类似这样的方法来防止它发生:
cursor.execute("INSERT INTO table VALUES ?", args)
table
或 args
,将某些东西放入您的SQL代码中,这并不安全。请参见python pages和引用的http://xkcd.com/327/。具体来说,Python页面引用如下:args="name; DELETE table"
使用cursor.execute将填入给定的值,因此参数可以按列出的方式进行,并且当您对其进行查询时,您将获得确切的结果。XKCD也以幽默的方式解释了这一点。