sql >> データベース >  >> RDS >> PostgreSQL

psycopg2とSQLインジェクションのセキュリティ

    AsIs 自分が何をしているのかを本当に理解していない限り、安全ではありません。たとえば、ユニットテストに使用できます。

    SQLクエリを事前にフォーマットしない限り、パラメータを渡すことはそれほど安全ではありません。絶対にしないでください:

    sql_query = 'SELECT * FROM {}'.format(user_input)
    cur.execute(sql_query)
    

    user_input以降 ';DROP DATABASE;'の可能性があります たとえば。

    代わりに、次のことを行ってください:

    sql_query = 'SELECT * FROM %s'
    cur.execute(sql_query, (user_input,))
    

    pyscopg2 クエリをサニタイズします。また、ユーザーの入力を本当に信頼していない場合は、独自のロジックを使用してコード内のパラメーターを事前にサニタイズすることができます。

    psycopg2ごと のドキュメント

    また、どのテーブルをクエリする必要があるかをユーザーに教えてもらうことは決してありません。アプリのロジック(またはルート)がそれを教えてくれるはずです。

    AsIs()について 、 psycopg2による のドキュメント

    したがって、ユーザーの入力と一緒に使用しないでください。



    1. SQL:特定のアイテムのセットを含むすべてのバスケットを選択します

    2. 複数の列を注文するASC

    3. 'false'はmysqlの文字列と一致しますか?

    4. アプリケーションでは、JDBCドライバーにアクセスできます(例外java.lang.ClassNotFoundException:com.mysql.cj.jdbc.Driver)