1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【第8回】荒らし投稿を特定せよ!管理コンソールからの投稿IPアドレス照会&日替わりID逆引きシステム

1
Last updated at Posted at 2026-10-01

「『ID:YtOtP1GQ』という人物が全板を荒らしているが、この男の本当のIPアドレスは一体どこなんだ?」
令和に自作した2ちゃんねる風掲示板「つゔぁいちゃんねる(2ch.biz)」開発秘話の第8弾。今回は、匿名掲示板の象徴である「日替わりID」の不可逆性と戦い、管理者が荒らし投稿者を即座に特定・規制するための「IP照会&逆引き調査システム」の裏側を公開します。


💡 はじめに:2ちゃんねるの「日替わりID」という大発明

2ちゃんねるに書き込むと、名前の横に必ず表示される謎の文字列。

名無しさん@お腹いっぱい。 2026/08/18(火) 10:15:30.12 ID:YtOtP1GQ

この 「日替わりID」 は、ネットコミュニティの歴史における大発明でした。

  • 個人を特定できるIPアドレスは一般に晒さない(プライバシーの保護)
  • しかし、同じ日・同じ板の中では同じIDになる(「お前さっきと言ってること違うじゃん」という自作自演・なりすましの防止)
  • 日付が変わるとIDも一新される(過去の書き込みに縛られない匿名性の担保)

この日替わりIDは、通常以下のような 一方向ハッシュ関数 で生成されます。

ID = Base64( MD5( "日付(YYYYMMDD)" + "投稿者IPアドレス" + "サーバー秘密鍵" ) ) の先頭8文字

一方向ハッシュであるため、 第三者がこのIDから投稿者のIPアドレスを逆算することは数学的に絶対に不可能 です。


😱 管理者がぶつかる壁:「不可逆ハッシュ」だから管理人もIPが分からない!

しかし、この堅牢なハッシュ設計が、運営管理者にとっては思わぬブーメランとなって突き刺さりました。

悪質な荒らしユーザーが掲示板に現れ、卑猥な画像URLや誹謗中傷を連続投稿したとします。
画面には ID:YtOtP1GQ と表示されています。

「よし、この荒らしをIP規制(BAN)しよう!」
……と思っても、 ハッシュが不可逆であるため、管理者すらこのユーザーのIPアドレスが分からない のです。

一般ユーザーから「このIDの荒らしを早くアク禁にしてください!」と通報されても、IPアドレスが分からなければサーバーレベルでの遮断(IP BAN)が打てません。
このジレンマを解消するため、開発初期(2026年8月17日深夜)に 「管理専用IP記録&逆引き照会エンジン」 の実装に踏み切りました。


🏗️ データベース設計とAPIの「特権分離」

一般画面の安全性を100%維持しながら、管理者だけが真実のIPを確認できるよう、データベースとAPIレスポンスの境界を厳密に分離しました。

-- posts テーブルに ip_address カラムを正式追加
ALTER TABLE posts ADD COLUMN ip_address VARCHAR(45) NOT NULL DEFAULT '';
CREATE INDEX IF NOT EXISTS idx_posts_ip ON posts(ip_address);
CREATE INDEX IF NOT EXISTS idx_posts_created_at ON posts(created_at);

【超重要】APIレスポンスにおける情報漏洩の防止

最も恐ろしいのは、一般ユーザー向けのスレッド取得API(GET /API?action=get_thread)のJSONレスポンスに、誤って ip_address フィールドが混入してしまう事故です。

つゔぁいちゃんねるでは、SQLで SELECT * をすることを固く禁じ、一般公開APIでは必要なカラムのみを明示的に指定して抽出します。

// 一般ユーザー向けレス取得
// ⚠️ ip_address は絶対に SELECT しない!
$stmt = $this->db->prepare("
    SELECT id, post_number, name, email, content, user_id_hash, created_at, is_deleted
    FROM posts 
    WHERE thread_id = :thread_id 
    ORDER BY post_number ASC
");

一方、管理者専用API(管理者セッショントークン検証を通過したリクエストのみ)でのみ、ip_address を含む完全なレコードを返却します。


🛠️ 管理コンソールの神機能:2大照会ツールの実装

管理画面には、荒らしを瞬時に退治するための2つの強力なツールを配備しました。

1. レス確認モーダルでのIP表示 & ワンクリックBAN

管理画面のスレ・レス管理タブから「レス確認/削除」を開くと、各レスのヘッダー右側に IP: 198.51.100.xx(※例示用IP)が表示されます。
その真横に赤色の 「🚫 IP規制」ボタン を配置しました。

// admin.js のワンクリックBAN処理
async function banPostIp(ipAddress, postContent) {
    const reason = prompt(`IP: ${ipAddress} を規制リストに追加しますか?\n理由を入力してください:`, `荒らし投稿「${postContent.slice(0, 15)}...」`);
    if (!reason) return;

    const res = await fetch('/api.php?action=admin_add_banned_ip', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ ip: ipAddress, reason, token: getAdminToken() })
    });
    const result = await res.json();
    if (result.success) {
        showToast(`IP: ${ipAddress} を規制リストに登録しました`, 'success');
    }
}

2. 🔍 投稿ID・IPアドレス逆引き照会ツール(新設)

「通報フォームに ID:xxxxxxx だけが書かれていて、どのスレにいるか分からない」という事態に対応する専用ツールです。

日替わりIDを入力して「照会」ボタンを押すと、サーバー側でその日の posts テーブルを横断スキャンし、以下のような捜査レポートを一瞬で出力します。

板名 スレッド名 レス番 投稿日時 本文抜粋 投稿元IPアドレス 操作
ニュース速報 〇〇について語る 14 11:20:15 ああああああ 203.0.113.45 [🚫 IP規制]
ニュー速VIP 暇だから雑談 89 11:22:40 マルチポストです 203.0.113.45 [🚫 IP規制]

このツールのおかげで、 「1つの板で荒らしていた人物が、実は裏で他の5つの板にもマルチポストしていた」 といった悪質な組織的荒らしの実態が白日の下に晒され、一網打尽に規制できるようになりました。


⚖️ 法的観点:プロバイダ責任制限法と開示請求への備え

IPアドレスの確実な記録は、単なる荒らし対策にとどまりません。
万が一、掲示板内で重大な脅迫予告や名誉毀損が発生し、警察や弁護士から 「発信者情報開示請求」 が届いた場合、プロバイダ責任制限法に基づき、管理者は投稿日時のタイムスタンプおよび投稿元IPアドレスを開示する法的義務が生じるケースがあります。

もし「日替わりIDしか記録していませんでした、元のIPは分かりません」では、管理者自身が責任を問われかねません。

  • 一般には絶対に秘密(ハッシュ化)
  • DBの深部には厳重に暗号化・隔離保管
  • 有事の際には管理者が速やかに特定・対処可能

この3つのバランスを完璧に満たすアーキテクチャが完成しました。


🎯 まとめと次回予告

第8回となる今回は、匿名掲示板の秩序を守る最強の調査機能 「投稿IP照会&日替わりID逆引きシステム」 について解説しました。

今回の学び・ポイント

  • 日替わりIDの光と影 :不可逆ハッシュは一般のプライバシーを守るが、管理者による追跡にはDB側でのIP隔離保持が必須。
  • 特権APIの分離 :一般公開クエリでは絶対にIPを取得させないホワイトリストカラム選択。
  • 横断照会ツール :IDからIPを割り出し、複数板にまたがる荒らし行動を可視化してワンクリックで遮断するUX。

管理体制が万全に整ったところで、掲示板のフロントエンドに大きな課題が立ちはだかります。
「ブラウザのURLを直接叩いてもスレッドが開かない!戻るボタンを押すとトップに戻ってしまう!」

次回、 【第9回】SPAなのにURL直リンク・ブラウザバックが完璧に動く!History APIルーティングの泥臭い戦い へと続きます!


🔗 関連リンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?