0

我正在创建一个 Web 服务,它应该为探索数据集提供很大的灵活性。现在,为了在 SQL 中执行此操作,我发现手动创建查询比使用参数更容易(如下面的“选择”)。这将使 where sql 查询的生成更加容易(参见下面 where 变量的元组),例如,根据: http: //docs.python.org/library/sqlite3.html;更不安全。

我的问题是,有没有办法让它成为一个安全的选择?换句话说,是否有一种安全的方式来执行“手动”构建的查询?

我在想的是,如果我确保正在运行的查询以“SELECT”开头,那么应该保护我免受会改变数据的查询的影响。这是一个好主意吗?有没有更好的方法?或者参数化查询是避免 SQL 注入的唯一方法?

select = ['a','b']
where = [('a','=',1),('b','=',2)]
def retrieve(self,table,select,where='',groupBy=''):
   select = ','.join(select)
   sql = 'SELECT '+select+' FROM '+table
   self.cur.execute(sql)
   return self.cur.fetchall()
4

1 回答 1

4

不,这不是一个好主意。OWASP top 10(注入排在首位)是一个很好的信息来源和最佳实践。

作为旁注,您可能想要使用非常强大且广泛使用的SQL Alchemy 。它会给你(我猜)你正在寻找的所有灵活性。

于 2012-07-26T18:30:45.620 回答