データセットの探索に多くの柔軟性を与えることになっている Web サービスを作成しています。さて、これを SQL で行うには、パラメーターを使用するよりも手動でクエリを作成する方が簡単だと思います (以下の「select」のように)。これにより、where sql クエリの生成がはるかに簡単になります (以下の where 変数のタプルを参照)。たとえば、次のようになります。はるかに安全ではありません。
私の質問は、これを安全なオプションにする方法はありますか? 言い換えれば、「手動で」作成されたクエリを安全に実行する方法はありますか?
私が考えているのは、実行中のクエリが「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()