2009-03-16 7 views
2

私が今作業している特定のデータは、ユーザ生成されず、通常の検証ルーチン中に1インチ以内で消毒されますが、基本的なINSERT、SELECT、将来の参照のために、SQLインジェクション攻撃から身を守りながらSQLクエリを実行します。私はむしろ、パラメータ化されたクエリを使用して、「正しい」方法を実行する方法を学びたいと思います。Python標準ライブラリ(バージョン2.5など)では、パラメータ化されたMS-SQLクエリを実行できますか?

サニタイズはいつもいいですが、私は味方の知性を熟練したハッカーのものに合わせています。手動でエスケープすると、ブラックリストはホワイトリストほど堅牢ではないので、おそらく私は物事を見落としています。さらに明確にするために、(%s)表記を使用して、sqlstatementという名前の文字列を作成するためのパラメータとして渡すことを意味するわけではありません。私が知る必要がある魔法の言葉の一つは「束縛」だと思います。

私はまた、Python標準ライブラリ以外のものは避けたいと考えています。

問題のアプリケーションには、Microsoft SQL 2005が必要です(該当する場合)。私はActiveState Pythonとモジュールdbiとodbcを使用しています。これは他の誰かのデータベースなので、ストアドプロシージャはありません。

+0

これはdb_apiの質問ですか? MS-SQLのためにhttp://www.python.org/dev/peps/pep-0249/接続を使用してクエリを追加する方法を尋ねていますか? "それは可能ですか?"はいです。もっと知りたいですか? –

答えて

5

PEP 249 (DB API 2.0)は5つのパラメータを定義し、PyMSSQLはparamstyle == pyformatを使用します。しかし、文字列補間のように見えますが、は実際にはを束縛しています。

を結合間注差:

cur.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe') 

および補間(これはそれがが行われるべきではありません方法です):

cur.execute('SELECT * FROM persons WHERE salesrep=%s' % 'John Doe') 

も参照してくださいhttp://wiki.python.org/moin/DbApiFaq


" はPython標準 ライブラリの外には避けたいと考えています。

あなたはここで不運です。 Pythonに組み込まれている唯一のRDBMSドライバはSQLiteです。

2

pyodbc

を試してみてくださいしかし、あなたは本当に簡単(プラス強力な機能のトン)ものを持っているしたい場合は、

(ちなみにMSSQLのデフォルトの「ドライバ」としてpyodbc使用) sqlalchemyを見てみましょう
関連する問題