0

データセットの探索に多くの柔軟性を与えることになっている 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()
4

1 に答える 1

4

いいえ、それは良い考えではありません。OWASPトップ10(インジェクションはそもそも)は、優れた情報源とベストプラクティスです。

ちなみに、非常に強力で広く使用されているSQLAlchemyを使用することをお勧めします。それはあなたが探しているすべての柔軟性をあなたに与えるでしょう(私は推測します)。

于 2012-07-26T18:30:45.620 に答える