ホームページ >バックエンド開発 >Python チュートリアル >SQLite で動的テーブルを安全に作成するには?
データベース管理では、柔軟性と効率が最も重要です。 SQLite を使用する場合、次の疑問が生じます: SQL インジェクション攻撃を受けやすい手法である文字列コンストラクターに頼らずに、変数テーブル名を使用できるでしょうか?
この場合、目標は、スターごとにテーブルを作成することです。星のシミュレーション。各テーブルにはスターの名前に従って名前を付ける必要があります。最初は、このアプローチには文字列コンストラクターの使用が含まれます:
cursor.execute("CREATE TABLE StarFrame"+self.name+" (etc etc)")
ただし、これは理想的ではありません。この問題に対処するには、パラメータの使用を検討できます。
cursor.execute("CREATE TABLE StarFrame(?) (etc etc)",self.name)
残念ながら、テーブルはパラメータ置換の対象にはなりません。したがって、このアプローチは実現可能ではありません。
代わりに、インジェクション攻撃から確実に保護するために、サニタイズ機能を使用できます。この関数は特殊文字をフィルターで除外し、テーブル名に英数字のみが含まれるようにします。
def scrub(table_name): return ''.join( chr for chr in table_name if chr.isalnum() ) table_name = scrub(self.name) cursor.execute(f"CREATE TABLE StarFrame{table_name} (etc etc)")
このアプローチにより、セキュリティの脅威から保護しながら動的テーブルを作成できます。潜在的なインジェクションベクトルを取り除くことでデータベースの整合性を維持し、悪意のある攻撃者によるアプリケーションの悪用を防ぎます。
以上がSQLite で動的テーブルを安全に作成するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。