SQLインジェクションとNoSQLインジェクション

🔥 Vibe プロンプト

「ログインAPIをSQLiテスト。脆弱なクエリとパラメータ化クエリを比較。MongoDB NoSQLiもテスト。」

import sqlite3

conn = sqlite3.connect(":memory:")
conn.execute("CREATE TABLE users (id INT, username TEXT, password TEXT)")
conn.execute("INSERT INTO users VALUES (1, 'admin', 'secret123')")

def vulnerable_login(username, password):
    query = f"SELECT * FROM users WHERE username='{username}' AND password='{password}'"
    return conn.execute(query).fetchone() is not None

print(f"SQLi成功: {vulnerable_login("admin'--", "任意")}")

# 安全: パラメータ化
safe = "SELECT * FROM users WHERE username=? AND password=?"
print(f"安全: {conn.execute(safe, ('admin'"'--", '任意')).fetchone()}")

# NoSQLi: {"password": {"$ne": ""}} で認証バイパス
# 対策: サーバーサイドでハッシュ化して比較

防止策

| 技術 | 方法 | |-----|------| | パラメータ化クエリ | WHERE id = %s | | ORM | SQLAlchemy, Prisma | | 入力検証 | 特殊文字を拒否 | | 最小権限 | DBユーザー = SELECTのみ |

ブラインドSQLi

' OR 1=1 --        # 常に真
' AND 1=2 --       # 常に偽
' AND SLEEP(5) --  # 時間ベース検出

重要なポイント

  • コアコンセプトをしっかり理解する
  • ハンズオンコード例で実践する
  • 実世界の問題に応用する
  • 演習で知識を強化する

さらに学ぶ

  • 公式ドキュメント
  • GitHubのオープンソースプロジェクト
  • コミュニティフォーラムとディスカッション
  • 関連コースとチュートリアル

完全なチュートリアルをロック解除

このチャプターは有料コンテンツです。プロジェクトに参加して、10以上の神レベルのPromptや実際のソースコード例を含む、5000字以上の深い分析をロック解除してください!