ホームページ >データベース >mysql チュートリアル >パラメータ化された SQL ステートメントで SQLAlchemy の Connection.execute() を安全に使用するにはどうすればよいですか?

パラメータ化された SQL ステートメントで SQLAlchemy の Connection.execute() を安全に使用するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-03 12:35:39217ブラウズ

How Can I Securely Use SQLAlchemy's Connection.execute() with Parameterized SQL Statements?

パラメータ化された SQL ステートメントを使用した SQLAlchemy Connection.execute()

SQLAlchemy の connection.execute() メソッドを使用すると、開発者は SQL ステートメントを実行して、結果をマップの配列に変換します。パラメータ置換に文字列フォーマットを使用するのは一般的な方法ですが、セキュリティ上のリスクが生じ、柔軟性が制限されます。

コードのセキュリティを強化し、パラメータ化を有効にするには、sqlalchemy.sql.text() 関数を利用してパラメータ化されたテキストを作成できます。 SQL ステートメント。このアプローチにより、バインド パラメーターが正しく処理され、SQL インジェクション攻撃のリスクが軽減されます。

質問で提供されている __sql_to_data() 関数にパラメーター化を組み込むには、関数を次のように変更します。

def __sql_to_data(sql_text, parameters):
    result = []
    connection = engine.connect()
    try:
        rows = connection.execute(sql_text, parameters)
        for row in rows:
            result_row = {}
            for col in row.keys():
                result_row[str(col)] = str(row[col])
            result.append(result_row)
    finally:
        connection.close()
    return result

sql_text パラメータは、sqlalchemy.sql.text() を通じて解析された SQL ステートメントである必要があり、parameters パラメータは置換する値を含む辞書。

今度は、文字列フォーマットを使用してパラメータを挿入する代わりに、辞書をexecute() メソッドに渡すことができます。

return __sql_to_data(sql_get_profile, {'user_id': user_id})

このアプローチでは、 SQLAlchemy の connection.execute() メソッドでパラメータを渡す安全かつ柔軟な方法。

以上がパラメータ化された SQL ステートメントで SQLAlchemy の Connection.execute() を安全に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。