我正在创建一个web服务,它应该在探索数据集时提供很大的灵活性。现在,为了在SQL中实现这一点,我发现手动创建查询比使用参数更容易(如下使用“select”)。这将使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()
不,这不是个好主意。OWASP top 10 (Injection is in the first place)是信息和最佳实践的良好来源。在
作为一个补充说明,您可能希望使用SQL Alchemy,它非常强大并且被广泛使用。它会给你(我想)所有你想要的灵活性。在
相关问题 更多 >
编程相关推荐