11

sqlite DBにchar(80)値を設定するPythonのコードがあります。

文字列は、テキスト入力フィールドを介してユーザーから直接取得され、JSON構造のPOSTメソッドを使用してサーバーに返送されます。

サーバー側では、現在、SQLUPDATE操作を呼び出すメソッドに文字列を渡します。

それは動作しますが、私はそれがまったく安全ではないことを知っています。

とにかくクライアント側は安全ではないと思うので、サーバー側で保護する必要があります。SQLインジェクションに対してUPDATE操作を保護するにはどうすればよいですか?

SQLパーサーを混乱させないようにテキストを「引用」する関数が私が探しているものです。そのような関数が存在することを期待していますが、見つかりませんでした。

編集: これがcharフィールド名ラベルを設定する私の現在のコードです:

def setLabel( self, userId, refId, label ):
    self._db.cursor().execute( """
        UPDATE items SET label = ? WHERE userId IS ? AND refId IS ?""", ( label, userId, refId) )
    self._db.commit()
4

3 に答える 3

10

ドキュメントから:

con.execute("insert into person(firstname) values (?)", ("Joe",))

これは逃げる"Joe"ので、あなたが欲しいのは

con.execute("insert into person(firstname) values (?)", (firstname_from_client,))
于 2012-06-08T14:10:36.557 に答える
3

DB-API.execute()は、エスケープを処理するパラメーター置換をサポートしています。これについては、ドキュメントの上部に記載されています。上記のhttp://docs.python.org/library/sqlite3.htmlこれは絶対に行わないでください-安全ではありません。

于 2012-06-08T14:10:08.080 に答える
0

Noooo ...バインド変数を使用してください!それが彼らの目的です。これを見る

この手法の別の名前は、パラメーター化されたsqlです (「バインド変数」は、特にOracleで使用される名前である可能性があります)。

于 2012-06-08T14:06:20.810 に答える