<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>公開ファイル - 総合デジタルマーケティング企業 エスライン・テクノロジーズ</title>
	<atom:link href="https://slt-inc.jp/tag/exposed-files/feed/" rel="self" type="application/rss+xml" />
	<link>https://slt-inc.jp</link>
	<description>Go Beyond with SLT - インターネット集客で事業者と顧客を繋ぐ</description>
	<lastBuildDate>Mon, 12 Oct 2026 08:04:36 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://slt-inc.jp/wp-content/uploads/2025/03/cropped-エスライン_テクノロジーズ_-_新ロゴ2025-removebg-32x32.png</url>
	<title>公開ファイル - 総合デジタルマーケティング企業 エスライン・テクノロジーズ</title>
	<link>https://slt-inc.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>.gitや.envが公開されていないか確認する方法と、見つかった時の対処</title>
		<link>https://slt-inc.jp/article/git-env-file-exposure/</link>
		
		<dc:creator><![CDATA[slt]]></dc:creator>
		<pubDate>Fri, 02 Oct 2026 07:35:00 +0000</pubDate>
				<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[記事]]></category>
		<category><![CDATA[Webサイトセキュリティ]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[セキュリティチェック]]></category>
		<category><![CDATA[セキュリティ対策]]></category>
		<category><![CDATA[公開ファイル]]></category>
		<guid isPermaLink="false">https://slt-inc.jp/security/git-env-file-exposure/</guid>

					<description><![CDATA[<p>&#x516C;&#x958B;&#x30C7;&#x30A3;&#x30EC;&#x30AF;&#x30C8;&#x30EA;&#x306B;&#x6B8B;&#x3063;&#x305F;.git&#x3084;.env&#x306F;&#x3001;URL&#x3092;&#x77E5;&#x308B;&#x8AB0;&#x3067;&#x3082;&#x8AAD;&#x3081;&#x307E;&#x3059;&#x3002;&#x81EA;&#x793E;&#x30B5;&#x30A4;&#x30C8;&#x3067;&#x306E;&#x78BA;&#x304B;&#x3081;&#x65B9;&#x3068;&#x5FDC;&#x7B54;&#x30B3;&#x30FC;&#x30C9;&#x306E;&#x8AAD;&#x307F;&#x65B9;&#x3001;&#x898B;&#x3064;&#x304B;&#x3063;&#x305F;&#x6642;&#x306E;&#x512A;&#x5148;&#x9806;&#x4F4D;&#x3064;&#x304D;&#x306E;&#x5BFE;&#x51E6;&#x3001;Apache&#x3001;Nginx&#x3001;WordPress&#x306E;&#x518D;&#x767A;&#x9632;&#x6B62;&#x306E;&#x8A2D;&#x5B9A;&#x3092;&#x307E;&#x3068;&#x3081;&#x305F;&#x8A18;&#x4E8B;&#x3067;&#x3059;&#x3002;</p>
<p>The post <a href="https://slt-inc.jp/article/git-env-file-exposure/">.gitや.envが公開されていないか確認する方法と、見つかった時の対処</a> first appeared on <a href="https://slt-inc.jp">総合デジタルマーケティング企業 エスライン・テクノロジーズ</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="slt-art">
<div class="slt-meta">最終確認日: 2026年10月12日 / 編集: エスライン・テクノロジーズ株式会社 Webサイトセキュリティ編集チーム</div>
<div class="slt-lead"><p class="slt-lead-label">この記事の結論</p><p>自社サイトの <code>/.git/HEAD</code> と <code>/.env</code> を <code>curl -I</code> で確かめ、404か403ならその場所からは読めず、200なら中身を見て公開の有無を判断します。公開が見つかったら、公開を止める、中の鍵とパスワードをすべて作り直す、ログで読まれたかを調べる、の順に進めます。遮断の設定やGit履歴の削除だけでは、すでに読まれた値は使えるまま残るからです。</p></div>

<h2>最初に確認する2つのURLと、合否の目安</h2>
<p>最初に確かめるのは、自社サイトの <code>/.git/HEAD</code> と <code>/.env</code> です。<code>.git/HEAD</code> はGitの管理フォルダに必ずある1行のファイルで、.gitフォルダが外から見えるかの目印になります。<code>example.com</code> を自社のドメインに置き換え、ターミナルで次のコマンドを実行します。</p>
<pre class="slt-code"><code>curl -I https://example.com/.git/HEAD
curl -I https://example.com/.env

# 出力の例(1行目の数字が応答コード)
HTTP/2 404
content-type: text/html</code></pre>
<p>結果は、1行目の数字で次のように読みます。</p>
<ul>
<li><strong>404か403</strong>: その場所からは読めません。別の場所と入口は、後の章で確かめます。</li>
<li><strong>200</strong>: ブラウザで同じURLを開いて中身を見ます。<code>ref: refs/heads/main</code> のような1行や、<code>APP_KEY=</code> などの行が並べば公開中です。</li>
<li><strong>301や302</strong>: 別のURLへの転送です。<code>curl -IL</code> で転送先までたどり、最後の数字で判断します。</li>
</ul>
<div class="slt-callout is-note"><p class="slt-callout-title">補足</p><p>Windows PowerShell 5.1では、<code>curl</code> が別のコマンド(Invoke-WebRequest)の別名です。<code>curl.exe -I https://example.com/.env</code> のように拡張子まで入力すると、curl本体が動きます。</p></div>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>確かめてよいのは、自社が管理するサイトだけです。他人のサイトで同じURLを試すことの問題は、「他人のサイトを調べてはいけない理由」の章で説明します。</p></div>

<h2>.gitと.envが公開される3つの経路</h2>
<p>.gitや.envがURLで読めるのは、Webサーバーが外に配る「公開ディレクトリ」(ドキュメントルート)の中に置かれているからです。公開ディレクトリの外にあるファイルには、URLでは届きません。中に入り込む経路は、主に次の3つです。</p>
<ol>
<li><strong>プロジェクトの直下を公開している</strong>: 本来は <code>public</code> などの下位フォルダだけを公開する構成で、プロジェクト全体を公開している状態です。Laravelの公式文書も、プロジェクトの直下から配信すると多くの機密設定ファイルが公開されると注意しています。</li>
<li><strong>公開ディレクトリでGitを使う</strong>: 公開ディレクトリの中で <code>git clone</code> や <code>git pull</code> を実行して運用すると、.gitフォルダがそのまま残ります。FTPでプロジェクトのフォルダごとアップロードした時や、WordPressのテーマを開発フォルダのまま置いた時も同じです。</li>
<li><strong>バックアップと作業ファイルを残す</strong>: 移行作業で作ったzipやデータベースのダンプ、サーバー上の編集で生まれた <code>wp-config.php.bak</code> などの控えが残るケースです。エディターが自動で作る、名前が <code>~</code> で終わるファイルや <code>.swp</code> も含みます。</li>
</ol>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 400"><title>公開ディレクトリに .git や .env が入り込む3つの経路</title><desc>左に3つの経路(プロジェクトの直下を公開、公開先でgit clone、バックアップを公開先に保存)、中央に公開ディレクトリ、右にブラウザ。公開ディレクトリの中の .git、.env、backup.zip には、ブラウザからURLで届く。</desc><defs><marker id="f1-a" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto"><path d="M0,0 L10,5 L0,10 z" fill="#10265A"/></marker><marker id="f1-r" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto"><path d="M0,0 L10,5 L0,10 z" fill="#D00A0A"/></marker></defs><rect x="0" y="0" width="800" height="400" fill="#FFFFFF"/><rect x="16" y="36" width="256" height="84" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="144" y="70" font-size="22" fill="#10265A" text-anchor="middle">①プロジェクトの</text><text x="144" y="100" font-size="22" fill="#10265A" text-anchor="middle">直下を公開</text><rect x="16" y="158" width="256" height="84" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="144" y="192" font-size="22" fill="#10265A" text-anchor="middle">②公開先で</text><text x="144" y="222" font-size="22" fill="#10265A" text-anchor="middle">git clone、pull</text><rect x="16" y="280" width="256" height="84" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="144" y="314" font-size="22" fill="#10265A" text-anchor="middle">③バックアップを</text><text x="144" y="344" font-size="22" fill="#10265A" text-anchor="middle">公開先に保存</text><line x1="274" y1="78" x2="322" y2="78" stroke="#10265A" stroke-width="3" marker-end="url(#f1-a)"/><line x1="274" y1="200" x2="322" y2="200" stroke="#10265A" stroke-width="3" marker-end="url(#f1-a)"/><line x1="274" y1="322" x2="322" y2="322" stroke="#10265A" stroke-width="3" marker-end="url(#f1-a)"/><rect x="332" y="20" width="256" height="360" rx="12" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="460" y="56" font-size="22" fill="#10265A" text-anchor="middle" font-weight="bold">公開ディレクトリ</text><text x="360" y="100" font-size="22" fill="#10265A">index.php</text><text x="360" y="136" font-size="22" fill="#10265A">css/</text><rect x="352" y="160" width="216" height="52" rx="8" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3"/><text x="372" y="194" font-size="22" fill="#10265A">.git/</text><rect x="352" y="228" width="216" height="52" rx="8" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3"/><text x="372" y="262" font-size="22" fill="#10265A">.env</text><rect x="352" y="296" width="216" height="52" rx="8" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3"/><text x="372" y="330" font-size="22" fill="#10265A">backup.zip</text><text x="704" y="196" font-size="22" fill="#10265A" text-anchor="middle">URLで読める</text><rect x="628" y="216" width="152" height="64" rx="10" fill="#FFFFFF" stroke="#10265A" stroke-width="3"/><text x="704" y="256" font-size="22" fill="#10265A" text-anchor="middle">ブラウザ</text><line x1="626" y1="236" x2="576" y2="192" stroke="#D00A0A" stroke-width="3" marker-end="url(#f1-r)"/><line x1="626" y1="248" x2="576" y2="254" stroke="#D00A0A" stroke-width="3" marker-end="url(#f1-r)"/><line x1="626" y1="260" x2="576" y2="318" stroke="#D00A0A" stroke-width="3" marker-end="url(#f1-r)"/></svg><figcaption>図1 公開ディレクトリに .git、.env、バックアップが入り込む3つの経路。中に入ったファイルは、index.php などのページと同じように、ブラウザからURLで読めます。</figcaption></figure>
<div class="slt-callout is-note"><p class="slt-callout-title">補足</p><p>フォルダの中身の一覧表示(<a href="https://slt-inc.jp/glossary/directory-listing/">ディレクトリリスティング</a>)を止めても、.gitフォルダは守れません。.gitの中のファイルは名前と場所がGitの仕組みで決まっているため、一覧が無くても、個々のURLを直接指定されると読まれます。</p></div>

<h2>公開されると何が読まれるか</h2>
<p>.gitフォルダが読めると、ソースコードと変更の履歴が外に出ます。.envが読めると、書かれた鍵とパスワードがそのまま外に出ます。どちらも、一度読まれた値は相手の手元に残り、後から取り消せません。</p>
<h3>.gitフォルダから読まれるもの</h3>
<ul>
<li>ソースコード一式と変更の履歴。今は消したファイルや、過去に一度コミットしたパスワードも履歴に残ります。</li>
<li><code>.git/config</code> に書かれた接続先のURL。Gitの公式文書のとおり、URLには <code>ユーザー名:パスワード@</code> の形で認証情報を書けます。トークン入りのURLで <code>clone</code> していると、その値も読まれます。</li>
<li>コミットした人の名前とメールアドレス、ブランチ名など、開発体制の手がかり。</li>
</ul>
<h3>.envから読まれるもの</h3>
<p>.envは、フレームワークやアプリが起動時に読み込む設定ファイルです。データベースの接続先とパスワード、決済、メール配信、クラウドのAPIキー、Laravelの <code>APP_KEY</code> のような暗号鍵が並ぶのが一般的です。.envが読まれた時点で、書かれていた値はすべて漏洩したものとして扱います。</p>
<p>.gitと.env以外にも、公開ディレクトリに残りやすいファイルがあります。主な例は次の表のとおりです。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>種類</th><th>ファイル名の例</th><th>読まれうる情報</th><th>よくある原因</th></tr></thead><tbody>
<tr><td>バージョン管理</td><td>.git/、.svn/</td><td>ソースコード、変更の履歴、接続先のURL</td><td>公開ディレクトリでのclone、フォルダごとの配置</td></tr>
<tr><td>環境設定</td><td>.env、.env.production、.env.bak</td><td>DBのパスワード、APIキー、暗号鍵</td><td>プロジェクトの直下を公開</td></tr>
<tr><td>設定ファイルの控え</td><td>wp-config.php.bak、config.php.old、~ や .swp で終わるファイル</td><td>DBのパスワード(PHPとして実行されず、文字のまま返る)</td><td>サーバー上での直接編集、エディターの自動保存</td></tr>
<tr><td>ダンプと圧縮ファイル</td><td>dump.sql、backup.zip、site.tar.gz</td><td>会員情報を含むデータベース、サイト一式</td><td>移行作業の残り、バックアップの保存先</td></tr>
<tr><td>ログと確認用ページ</td><td>wp-content/debug.log、phpinfo.php</td><td>内部のパス、SQL文、環境変数</td><td>デバッグ設定や確認用ファイルの消し忘れ</td></tr>
</tbody></table></div>
<div class="slt-callout is-note"><p class="slt-callout-title">補足</p><p>.envの値は、ファイル以外の形でも外に出ます。Viteは <code>VITE_</code>、Next.jsは <code>NEXT_PUBLIC_</code> で始まる変数を、ビルド時にブラウザ向けのJavaScriptへ埋め込む仕組みです。秘密の値にこの接頭辞を付けると、.envを守っていても値はブラウザから読めます。</p></div>

<h2>自分のサイトで公開を確認する手順と、見落としやすい場所</h2>
<p>確認は、ブラウザで中身を見る方法と、curlで応答コードを並べる方法を組み合わせます。見落としやすいのは、下位フォルダ、別のホスト名、HTTPの側、CDNの裏のサーバーです。</p>
<h3>ブラウザで中身を見る</h3>
<p>アドレス欄に <code>https://example.com/.git/HEAD</code> を入れて開きます。<code>ref: refs/heads/main</code> のような1行が出れば、.gitフォルダは公開中です。<code>.env</code> で <code>KEY=値</code> の行が並んだ場合も同じで、表示された値は画面共有やスクリーンショットで広げないようにします。</p>
<h3>curlで応答コードとサイズを並べる</h3>
<p>候補をまとめて確かめるなら、応答コードと受け取ったバイト数を1行ずつ並べます。サイズがすべて同じなら、同じエラーページかトップページが返っている目安です。macOSやLinuxのターミナル、WindowsならGit BashかWSLで動きます。</p>
<pre class="slt-code"><code>for p in /.git/HEAD /.git/config /.env /.env.production /wp-config.php.bak; do
  printf '%-22s ' "$p"
  curl -s -o /dev/null -w '%{http_code} %{size_download}B' "https://example.com$p"
  echo
done

# 出力の例
/.git/HEAD             404 153B
/.env                  404 153B</code></pre>
<h3>見落としやすい場所と入口</h3>
<p>トップの <code>/.git/HEAD</code> が404でも、別の場所や入口から読めることがあります。次の4つも確かめます。</p>
<ul>
<li><strong>下位フォルダ</strong>: <code>/blog/.git/HEAD</code> や <code>/wp-content/themes/テーマ名/.git/HEAD</code> など、Gitで管理していたフォルダの直下。</li>
<li><strong>別のホスト名</strong>: <code>www</code> の有無、<code>stg.</code> や <code>dev.</code> などの検証環境、使わなくなった旧ドメイン。</li>
<li><strong>HTTPとHTTPS</strong>: サーバーの設定が別々で、片方だけに拒否の設定が入っていることがあります。</li>
<li><strong>CDNの裏のサーバー</strong>: CDNや<a href="https://slt-inc.jp/glossary/waf/">WAF</a>で止めていても、元のサーバー(オリジン)にIPアドレスで届くと、その遮断を通りません。</li>
</ul>
<pre class="slt-code"><code># ホスト名と、HTTP、HTTPSの組み合わせを確かめる
for s in http https; do
  for h in example.com www.example.com; do
    printf '%-5s %-18s ' "$s" "$h"
    curl -s -o /dev/null -w '%{http_code}' "$s://$h/.env"; echo
  done
done

# CDNを通さず、オリジン(例: 203.0.113.10)へ直接確かめる
curl -sI --resolve example.com:443:203.0.113.10 https://example.com/.env | head -n 1</code></pre>
<p>候補を1つずつ試す手間を省くなら、自社の無料ツール「<a href="https://slt-inc.jp/service/security-checker/">Webサイトのセキュリティチェック</a>」も使えます。対象は、.git、.svn、.env、wp-config.phpの控え、SQLダンプ、バックアップの圧縮ファイルです。ページの取得(GET、HEAD、OPTIONS)だけで確かめ、診断できるのは自社または管理権限のあるサイトに限られます。</p>

<h2>200、403、404の読み方と、404でも安全と言い切れない理由</h2>
<p>応答コードは「その場所から読めるか」を示すだけで、安全の証明ではありません。200は中身を見るまで判断できず、404は確かめた経路の結果でしかないからです。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>応答</th><th>起きていること</th><th>読み方</th><th>次にやること</th></tr></thead><tbody>
<tr><td>200</td><td>ファイル、または別のページが返った</td><td>中身しだい。本物なら公開中</td><td>中身を見る。本物なら対処の手順へ</td></tr>
<tr><td>200(ソフト404)</td><td>存在しないURLにも、トップページなどを返す設定</td><td>ファイルは渡っていない</td><td>サイズと中身がトップページと同じか見る</td></tr>
<tr><td>301、302</td><td>別のURLへの転送</td><td>まだ判断できない</td><td><code>curl -IL</code> で最後の応答を見る</td></tr>
<tr><td>401</td><td>認証の内側にある</td><td>認証が外れると読める</td><td>公開ディレクトリの外へ移す</td></tr>
<tr><td>403</td><td>拒否された</td><td>読めないが、存在は推測されうる</td><td>拒否の範囲が十分か確かめる</td></tr>
<tr><td>404</td><td>その場所に無い、または隠している</td><td>この経路からは読めない</td><td>別の場所と入口も確かめる</td></tr>
</tbody></table></div>
<p>表の「ソフト404」はGoogleの用語で、存在しないページにも200を返す状態を指します。迷った時は、次の図の順にたどります。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 400"><title>応答コードから公開の有無を読む流れ</title><desc>curl -I で応答コードを見る。200なら中身を見て、本物なら公開中。403なら読めないが、存在は分かりうる。404ならこの経路は読めないが、他の入口も確かめる。</desc><defs><marker id="f2-a" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto"><path d="M0,0 L10,5 L0,10 z" fill="#10265A"/></marker></defs><rect x="0" y="0" width="800" height="400" fill="#FFFFFF"/><rect x="190" y="16" width="420" height="64" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="400" y="56" font-size="22" fill="#10265A" text-anchor="middle">curl -I で応答コードを見る</text><line x1="320" y1="82" x2="150" y2="134" stroke="#10265A" stroke-width="3" marker-end="url(#f2-a)"/><line x1="400" y1="82" x2="400" y2="134" stroke="#10265A" stroke-width="3" marker-end="url(#f2-a)"/><line x1="480" y1="82" x2="650" y2="134" stroke="#10265A" stroke-width="3" marker-end="url(#f2-a)"/><rect x="40" y="142" width="200" height="56" rx="10" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3"/><text x="140" y="180" font-size="26" fill="#10265A" text-anchor="middle" font-weight="bold">200</text><rect x="300" y="142" width="200" height="56" rx="10" fill="#FFFFFF" stroke="#10265A" stroke-width="3"/><text x="400" y="180" font-size="26" fill="#10265A" text-anchor="middle" font-weight="bold">403</text><rect x="560" y="142" width="200" height="56" rx="10" fill="#FFFFFF" stroke="#10265A" stroke-width="3"/><text x="660" y="180" font-size="26" fill="#10265A" text-anchor="middle" font-weight="bold">404</text><line x1="140" y1="200" x2="140" y2="244" stroke="#10265A" stroke-width="3" marker-end="url(#f2-a)"/><line x1="400" y1="200" x2="400" y2="244" stroke="#10265A" stroke-width="3" marker-end="url(#f2-a)"/><line x1="660" y1="200" x2="660" y2="244" stroke="#10265A" stroke-width="3" marker-end="url(#f2-a)"/><rect x="20" y="252" width="240" height="120" rx="10" fill="#EEF2F9" stroke="#D00A0A" stroke-width="3"/><text x="140" y="302" font-size="22" fill="#10265A" text-anchor="middle">中身を見る</text><text x="140" y="338" font-size="22" fill="#10265A" text-anchor="middle">本物なら公開中</text><rect x="280" y="252" width="240" height="120" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="400" y="302" font-size="22" fill="#10265A" text-anchor="middle">読めないが</text><text x="400" y="338" font-size="22" fill="#10265A" text-anchor="middle">存在は分かりうる</text><rect x="540" y="252" width="240" height="120" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="660" y="302" font-size="22" fill="#10265A" text-anchor="middle">この経路は読めない</text><text x="660" y="338" font-size="22" fill="#10265A" text-anchor="middle">他の入口も確かめる</text></svg><figcaption>図2 応答コードから公開の有無を読む流れ。200は中身を見て本物かを判断し、403は読めないものの存在は推測されうる状態、404は確かめた経路では読めない状態です。404でも、ほかの場所と入口を続けて確かめます。</figcaption></figure>
<h3>404でも安全と言い切れない4つの理由</h3>
<ol>
<li><strong>確かめた経路の結果でしかない</strong>: 前の章の下位フォルダ、別のホスト名、HTTP、オリジンは、それぞれ別に確かめる必要があります。</li>
<li><strong>過去の公開は分からない</strong>: 今日の404は、昨日まで読めなかった証明になりません。過去の公開は、アクセスログで確かめます。</li>
<li><strong>HEADとGETで応答が違う場合がある</strong>: HTTPの仕様(RFC 9110)は、HEADにGETと同じヘッダーを返すことを『SHOULD』(推奨)にとどめています。<code>curl -I</code> が404や405でも、<code>-I</code> を外したGETでも確かめます。</li>
<li><strong>拒否が一部のファイルにしか効いていない</strong>: 設定の書き方によっては、<code>/.env</code> は403でも <code>/.git/HEAD</code> は200のまま、という状態が起きます。実例は、後の章のApacheの表に載せています。</li>
</ol>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>robots.txtに <code>Disallow: /.git/</code> などを書いても、アクセスは防げません。robots.txtの標準(RFC 9309)は、この規則はアクセスを許可する仕組みではないと明記しています。書いたパスは、かえって公開されて見つけやすくなるとも書かれています。</p></div>

<h2>他人のサイトを調べてはいけない理由</h2>
<p>他人のサイトに .git や .env があるかを、管理者の許可なく確かめるのはやめてください。見つけた値を使えば法律に触れるおそれがあり、URLを試すこと自体も、相手のログには攻撃の下調べと同じ形で残ります。主な論点は次の3つです。</p>
<ul>
<li><strong>不正アクセス禁止法</strong>: <a href="https://www.npa.go.jp/bureau/cyber/pdf/1_kaisetsu.pdf">警察庁の解説</a>によると、「不正アクセス行為」には2つの類型があります。他人のIDやパスワードを無断で入力して利用制限を外す行為と、設定ミスなどの不備を突いて制限を免れる行為です。.envで見つけたパスワードでデータベースや管理画面に入れば、これに当たるおそれがあります。</li>
<li><strong>取得、保管、提供</strong>: 不正アクセスに使う目的で他人のIDやパスワードを取得、保管することや、正当な理由なく人に渡すことも禁じられています。同じ解説は、検索中にたまたま表示された場合は、取得の罪に当たらないとも説明しています。</li>
<li><strong>試し方と負荷</strong>: IPAなどが定める<a href="https://www.ipa.go.jp/security/guide/vuln/ug65p90000019by0-att/partnership_guideline.pdf">情報セキュリティ早期警戒パートナーシップガイドライン</a>は、URLの数字を積極的に多数変えて試す行為を例に挙げています。こうした行為は、制限を免れる目的とみなされる可能性があるという説明です。故意にサーバーの性能を落とす行為は、業務妨害罪に触れる可能性があるとも述べています。</li>
</ul>
<p>同ガイドラインは、IPAが届出を受け付けても、発見の方法についての法的な責任は免除されないと明記しています。善意の確認であっても、許可の無い調査は自分を守る根拠になりません。</p>
<div class="slt-callout is-note"><p class="slt-callout-title">補足</p><p>他社のサイトを調べてよいのは、管理者の許可を得て、範囲と期間を決めた<a href="https://slt-inc.jp/glossary/vulnerability-assessment/">脆弱性診断</a>や<a href="https://slt-inc.jp/glossary/penetration-test/">ペネトレーションテスト</a>として行う場合です。法的な評価は個別の事情で変わるため、迷う時は弁護士などの専門家に確かめてください。</p></div>

<h2>漏洩が見つかった時の対処: 優先順位つきの7手順</h2>
<p>公開を見つけたら、すでに読まれた前提で、公開の停止、鍵の作り直し、ログの調査の順に進めます。1と2を最優先で終え、調査と連絡はその後に回します。</p>
<ol class="slt-steps">
<li><strong>公開を止める</strong>ファイルやフォルダを公開ディレクトリの外へ移すか、後の章の拒否の設定を入れ、URLが404か403になったことを確かめます。消す前に、書かれていた値の一覧と、ファイルの更新日時を控えます。アクセスログは調査に使うので、消さずに残してください。</li>
<li><strong>鍵とパスワードを失効させ、作り直す</strong>書かれていた値は、使っていないものも含めてすべて対象です。.gitが公開されていた場合は、履歴の全期間に一度でもコミットされた値まで含めます。新しい値は、公開ディレクトリの外にある設定に入れてから切り替えます。</li>
<li><strong>アクセスログで読まれたかを調べる</strong>該当URLに、いつ、どのIPアドレスへ、何バイトを返したかを確かめます。コマンドの例は、この手順の下に載せています。</li>
<li><strong>不正利用の跡を調べる</strong>データベースへの見知らぬ接続や操作、管理画面の不明なアカウント、クラウドやAPIの請求額、メールの送信履歴を確かめます。</li>
<li><strong>Git履歴から取り除く</strong>リポジトリに秘密の値が入っていた場合は、履歴からも取り除きます。手順と注意点は次の章で説明します。</li>
<li><strong>関係者に連絡する</strong>社内の責任者、制作や保守の委託先、APIの提供元に、何が、いつから公開されていたかを伝えます。個人情報を扱うデータベースに入られたおそれがあれば、個人情報保護委員会への報告が必要かを確かめます。</li>
<li><strong>再発防止を入れ、もう一度確かめる</strong>後の章の配置と設定を入れたあと、最初の章のcurlで、すべての場所と入口が404か403になることを確かめます。</li>
</ol>
<div class="slt-callout is-point"><p class="slt-callout-title">ポイント</p><p>鍵の作り直しより先に公開を止めるのは、公開されたままのファイルに新しい値を書くと、新しい値も同じURLから読めてしまうからです。逆に、遮断だけで終えると、すでに読まれた古い値は使えるまま残ります。</p></div>
<p>手順2で作り直す主な値と、切り替える時の注意は次のとおりです。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>漏洩した値</th><th>作り直す場所</th><th>切り替える時の注意</th></tr></thead><tbody>
<tr><td>データベースのパスワード</td><td>DBサーバー、レンタルサーバーの管理画面</td><td>新しい値をアプリに設定してから古い値を無効にし、接続元の制限も見直す</td></tr>
<tr><td>APIキー、トークン(決済、メール配信、クラウド)</td><td>各サービスの管理画面</td><td>新しいキーへ切り替えてから古いキーを削除し、利用履歴を確かめる</td></tr>
<tr><td>Laravelの APP_KEY</td><td><code>php artisan key:generate</code></td><td>変えるとログイン中の全員がログアウトし、古い鍵で暗号化したデータは復号できなくなる</td></tr>
<tr><td>WordPressの認証用キーとソルト</td><td>wp-config.php の AUTH_KEY など</td><td>変えると既存のCookieが無効になり、全員が再ログインになる</td></tr>
<tr><td>.git/config 内のトークン</td><td>Gitホスティングの設定画面</td><td>トークンを失効させ、接続はSSHの鍵か、認証情報の保管機能に替える</td></tr>
</tbody></table></div>
<p>Laravelは、旧鍵を <code>APP_PREVIOUS_KEYS</code> に並べると、旧鍵で暗号化した値も復号できる仕組みを持っています。漏洩した鍵をここに残すと、その鍵で作られた値も受け付け続けるため、保存データを新しい鍵で暗号化し直したら外します。</p>
<p>手順3のログ確認では、該当URLへの要求のうち、200で返したものを抜き出します。ログの場所は、Nginxなら <code>/var/log/nginx/</code>、Apacheなら <code>/var/log/apache2/</code> や <code>/var/log/httpd/</code> が一般的です。レンタルサーバーでは、管理画面から取り出したログに同じ検索をかけます。</p>
<pre class="slt-code"><code># 200で返した .git と .env への要求(日時、IPアドレス、URL、返したバイト数)
zgrep -hE '/[.](git|env)' /var/log/nginx/access.log* |
  awk '$9 == 200 {print $4, $1, $7, $10}'

# IPアドレスごとの件数
zgrep -hE '/[.](git|env)' /var/log/nginx/access.log* |
  awk '$9 == 200 {print $1}' | sort | uniq -c | sort -rn</code></pre>
<p>標準のログ形式(combined)では、9番目の欄が応答コード、10番目が返したバイト数です。バイト数がトップページやエラーページと同じなら、ファイルの中身は渡っていない可能性が高いと読めます。見知らぬIPアドレスの国や組織は、自社の無料ツール「<a href="https://slt-inc.jp/service/ip-location-checker/">IPアドレスから位置を調べるツール</a>」でも調べられますが、結果は目安です。</p>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>CDNを使っている場合、オリジンで止めても、CDNのキャッシュに残ったファイルが配られ続けることがあります。該当URLのキャッシュを削除(パージ)し、CDN側のアクセスログも確かめてください。ログの保存期間より前の公開は確かめられないため、その期間の値は読まれたものとして扱います。</p></div>

<h2>Git履歴から消すだけでは足りない理由と、消す手順</h2>
<p>Git履歴から秘密の値を消しても、すでに複製されたものは消えません。公開されていた.gitを取得した人の手元、開発者のクローン、フォークには古い履歴が残ります。<a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository">GitHubの公式文書</a>も、秘密の値は最初に失効させるか作り直すべきだとしています。</p>
<p>そのうえで履歴から取り除くのは、古い値の再利用や、別の人による再公開を防ぐためです。GitHubが示す手順の要点は、新しいクローンで書き換えて、まとめて送り直すことです。</p>
<pre class="slt-code"><code># 1. 作業用に、新しくクローンする
git clone https://github.com/組織名/リポジトリ名.git
cd リポジトリ名

# 2. 全履歴から .env を取り除く(git-filter-repo 2.47以降)
git filter-repo --sensitive-data-removal --invert-paths --path .env

# 3. 書き換えた履歴を送る(共同作業者へ事前に知らせる)
git push --force --mirror origin

# 4. 今後は追跡しないよう .gitignore に加える
echo ".env" &gt;&gt; .gitignore
git add .gitignore
git commit -m "Ignore .env"
git push origin main</code></pre>
<p>書き換えのあと、古いクローンを持つ人はクローンし直します。GitHubの文書は、古い履歴から作ったブランチを、mergeではなくrebaseするよう求めています。GitHubの画面に残るキャッシュや、プルリクエストが参照する古いコミットの削除は、GitHubサポートへの依頼が必要です。</p>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>git-filter-repoは、新しいクローンでないと書き換えを拒みます。追跡をやめるコミットを先に作ると止まるため、上の順番を守ります。書き換えは共同作業者全員の作業に影響するため、実行する日時の事前の共有が必要です。</p></div>

<h2>再発防止の基本: 公開ディレクトリの外に置く</h2>
<p>根本の対策は、秘密の値と管理用のフォルダを、公開ディレクトリの外に置く配置にすることです。サーバーの拒否設定は、移行や設定の書き換えで消えることがあるため、2段目の守りと考えます。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 380"><title>危険な配置と安全な配置の違い</title><desc>左の危険な配置は、プロジェクトの直下(/var/www/site/)を公開しているため、.env、.git/、app/ にURLで届く。右の安全な配置は、public/ だけを公開しているため、.env、.git/、app/ にはURLで届かない。</desc><rect x="0" y="0" width="800" height="380" fill="#FFFFFF"/><text x="200" y="36" font-size="24" fill="#10265A" text-anchor="middle" font-weight="bold">危険な配置</text><rect x="20" y="56" width="360" height="304" rx="12" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3"/><text x="40" y="96" font-size="22" fill="#10265A">/var/www/site/</text><text x="40" y="128" font-size="22" fill="#10265A">(ここを公開)</text><text x="64" y="176" font-size="22" fill="#10265A">.env</text><text x="64" y="214" font-size="22" fill="#10265A">.git/</text><text x="64" y="252" font-size="22" fill="#10265A">app/</text><text x="64" y="290" font-size="22" fill="#10265A">public/</text><text x="200" y="338" font-size="22" fill="#10265A" text-anchor="middle">すべてURLで届く</text><text x="600" y="36" font-size="24" fill="#10265A" text-anchor="middle" font-weight="bold">安全な配置</text><rect x="420" y="56" width="360" height="304" rx="12" fill="#FFFFFF" stroke="#10265A" stroke-width="3"/><text x="440" y="96" font-size="22" fill="#10265A">/var/www/site/</text><text x="464" y="136" font-size="22" fill="#10265A">.env</text><text x="544" y="136" font-size="22" fill="#10265A">.git/</text><text x="634" y="136" font-size="22" fill="#10265A">app/</text><text x="464" y="172" font-size="22" fill="#10265A">URLで届かない</text><rect x="444" y="196" width="312" height="144" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="464" y="236" font-size="22" fill="#10265A">public/</text><text x="464" y="270" font-size="22" fill="#10265A">(ここだけを公開)</text><text x="488" y="312" font-size="22" fill="#10265A">index.php</text></svg><figcaption>図3 危険な配置と安全な配置。左はプロジェクトの直下を公開しているため、.env や .git/ にもURLで届きます。右は public/ だけを公開しているため、その外にある .env、.git/、app/ にはURLで届きません。</figcaption></figure>
<ul>
<li><strong>Laravelなど</strong>: 公開ディレクトリを <code>public</code> に設定し、<code>.env</code> や <code>.git</code> はその1つ上に置きます。</li>
<li><strong>WordPress</strong>: 公式の手引きのとおり、<code>wp-config.php</code> はインストール先の1つ上の階層へ移しても動きます。</li>
<li><strong>バックアップ</strong>: 圧縮ファイルやダンプは、公開ディレクトリの外か別の保管場所に置き、作業後に消すことを手順書に入れます。</li>
<li><strong>公開先を変えられないサーバー</strong>: サーバー会社の案内で、公開フォルダの外に置ける場所があるかを確かめます。</li>
</ul>

<h2>サーバー設定で拒否する: Apache、Nginx、WordPressの例</h2>
<p>配置を直すまでの応急処置と、置き忘れへの備えとして、ドットで始まるファイルとフォルダ、バックアップのような名前を拒否します。ここでの設定例と表の応答は、nginx 1.30.5とApache 2.4.69での動作確認に基づきます。</p>
<h3>Apache(.htaccess)</h3>
<p>公開ディレクトリの <code>.htaccess</code> の先頭に、次の2行を書きます。正規表現の <code>[.]</code> は、ドットそのものを表す書き方です。</p>
<pre class="slt-code"><code># ドットで始まるファイルとフォルダを 404 にする(.well-known は除く)
RedirectMatch 404 /[.](?!well-known/)
# バックアップや作業用のファイルを 404 にする
RedirectMatch 404 (?i)([.](bak|old|orig|save|swp|sql)|~)$</code></pre>
<p><code>.well-known</code> を除くのは、<a href="https://slt-inc.jp/glossary/ssl-tls-certificate/">SSL/TLS証明書</a>の自動更新(Let&#8217;s Encryptなど)や <code>security.txt</code> がこの場所を使うためです。除外を忘れると証明書の更新が失敗するので、更新の状況は「<a href="https://slt-inc.jp/article/ssl-tls-certificate-check/">SSL/TLS証明書のチェック方法</a>」の手順で確かめます。サイトでzipなどを配布していなければ、2行目に <code>zip</code> や <code>gz</code> を足せます。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>確かめたURL</th><th>上の2行</th><th>FilesMatchだけ</th><th>「.」の記号漏れ</th></tr></thead><tbody>
<tr><td>/.env</td><td>404</td><td>403</td><td>403</td></tr>
<tr><td>/.git/HEAD</td><td>404</td><td>200(読める)</td><td>403</td></tr>
<tr><td>/wp-config.php.bak</td><td>404</td><td>200(読める)</td><td>403</td></tr>
<tr><td>/.well-known/acme-challenge/(トークン)</td><td>200</td><td>200</td><td>403(更新が止まる)</td></tr>
<tr><td>/index.html</td><td>200</td><td>200</td><td>403(サイト全体が止まる)</td></tr>
</tbody></table></div>
<p>表の「FilesMatchだけ」は、<code>&lt;FilesMatch "^[.]"&gt;</code> と <code>Require all denied</code> の組み合わせです。<a href="https://httpd.apache.org/docs/2.4/mod/core.html#files">Apacheの公式文書</a>のとおり、FilesMatchはファイル名(パスの最後の部分)だけを見ます。そのため <code>/.git/HEAD</code> は <code>HEAD</code> という名前で判定され、拒否されません。</p>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>正規表現の <code>.</code> は「任意の1文字」です。ドットの前の記号が抜けた <code>^.(?!well-known)</code> のような書き方は、ほぼすべてのURLに当てはまり、表の右端の列のようにトップページまで止まります。Webページからコピーすると記号が消えることがあるため、この記事では <code>[.]</code> と書いています。</p></div>
<p>.htaccessは、サーバーが上書きを許している時だけ効く仕組みです。許可が無いとエラーも出ずに何も効かないため、書いた後は <code>/.env</code> が404になるかをcurlで確かめます。</p>
<p>一覧表示を止める <code>Options -Indexes</code> は、上書きの許可が無いと、書いただけでサイト全体が500エラーになります。追加したら、すぐにトップページを開いて確かめてください。</p>
<h3>Nginx</h3>
<p>Nginxは.htaccessを読まないため、サーバー設定の <code>server</code> ブロックに書きます。書いたら <code>nginx -t</code> で構文を確かめてから、設定を再読み込みします。</p>
<pre class="slt-code"><code># ほかの正規表現の location より前に書く
location ~ /[.](?!well-known/) {
    return 404;
}
location ~* ([.](bak|old|orig|save|swp|sql)|~)$ {
    return 404;
}

# ^~ を付けた location の中では上の規則が効かないため、中にも書く
location ^~ /assets/ {
    location ~ /[.] {
        return 404;
    }
}</code></pre>
<p><a href="https://nginx.org/en/docs/http/ngx_http_core_module.html#location">Nginxの公式文書</a>のとおり、正規表現のlocationは書いた順に調べられ、最初に当てはまったものが使われます。静的ファイル用の正規表現を先に書くと、<code>/.notes.txt</code> のようなファイルがそちらで配られます。また、<code>^~</code> を付けたlocationの下では正規表現が調べられないため、例の <code>/assets/.env</code> は中に拒否を書くまで200のままです。</p>
<h3>WordPress</h3>
<p>Apacheで動くWordPressでは、上の2行に <code>wp-config.php</code> の拒否を加えたものを、<code>.htaccess</code> の先頭に置く形が基本です。<a href="https://developer.wordpress.org/advanced-administration/security/hardening/">WordPressの公式の手引き</a>によると、<code># BEGIN WordPress</code> と <code># END WordPress</code> の間は、WordPressが書き換えることがあります。そのため、追加する行はこの範囲の外に書きます。</p>
<pre class="slt-code"><code># 既存の「# BEGIN WordPress」より上に、次の行を足す
RedirectMatch 404 /[.](?!well-known/)
RedirectMatch 404 (?i)([.](bak|old|orig|save|swp|sql)|~)$
&lt;Files "wp-config.php"&gt;
    Require all denied
&lt;/Files&gt;

# (この下に、WordPressが管理する「# BEGIN WordPress」から
#  「# END WordPress」までが続く。その間には書き足さない)</code></pre>
<p>あわせて、<code>wp-config.php</code> の <code>WP_DEBUG_LOG</code> の値も確認が必要です。<code>true</code> にすると、エラーは既定で <code>wp-content/debug.log</code> に書かれ、公開ディレクトリの中に残ります。本体やプラグインの更新状況も合わせて点検するなら、「<a href="https://slt-inc.jp/article/wordpress-vulnerability-check/">WordPressの脆弱性を確認する方法</a>」の手順が使えます。</p>
<p>サーバー設定を開く機会に、<a href="https://slt-inc.jp/glossary/security-headers/">セキュリティヘッダー</a>も一緒に見直すと、作業が1回で済みます。設定例は「<a href="https://slt-inc.jp/article/security-headers-setup/">セキュリティヘッダーの設定方法</a>」にまとめています。</p>

<h2>デプロイ手順と.gitignoreで、混入を防ぐ</h2>
<p>.gitや.envを公開先へ持ち込まない手順にすれば、拒否の設定に頼る場面が減ります。要点は、公開するファイルだけを、決まった手順で送ることです。</p>
<ul>
<li><strong>送るのはビルド後の成果物だけ</strong>: <code>dist</code> や <code>public</code> など、公開用のフォルダだけを送ります。<code>git archive</code> で作るアーカイブには、.gitフォルダが入りません。</li>
<li><strong>公開ディレクトリでcloneしない</strong>: Gitの操作は公開ディレクトリの外で行い、成果物だけを配置します。</li>
<li><strong>FTPでフォルダごと上げない</strong>: 送る前に、ドットで始まる隠しファイルを表示して、中身を確かめます。</li>
<li><strong>検証環境も同じ扱いにする</strong>: <code>stg.</code> などの検証環境は、<a href="https://slt-inc.jp/glossary/ip%e5%88%b6%e9%99%90/">IP制限</a>やBasic認証で関係者だけに絞ります。</li>
</ul>
<p>.gitignoreは、秘密の値をリポジトリに入れないための設定です。ただし<a href="https://git-scm.com/docs/gitignore">Gitの公式文書</a>のとおり、すでに追跡しているファイルには効かないため、<code>git rm --cached</code> で追跡を外してから使います。</p>
<pre class="slt-code"><code># .gitignore の例(.env.example だけは共有する)
.env
.env.*
!.env.example
*.log
*.sql
*.bak

# すでに追跡している .env を外す(手元のファイルは残る)
git rm --cached .env</code></pre>
<h3>デプロイ前に自動で止める</h3>
<p>人の注意に頼らず、公開用のフォルダに置いてはいけないファイルがあれば、デプロイを止める確認を手順に組み込みます。次の例は、見つかった時に終了コード1で止まるため、CIの1工程として使えます。</p>
<pre class="slt-code"><code># 公開するフォルダ(ここでは dist)に、置いてはいけないファイルが無いか確かめる
found=$(find dist -name '.git' -o -name '.env*' -o -name '*.sql' -o -name '*.bak')
if [ -n "$found" ]; then
  echo "公開してはいけないファイルがあります:"
  echo "$found"
  exit 1
fi</code></pre>
<p>コミットの段階では、OSSのGitleaksなど、パスワードやAPIキーの形の文字列を見つける道具を、コミット前の確認(pre-commit)に入れられます。GitHubの公開リポジトリでは、シークレットスキャンが無料で自動的に動く仕組みです。公開後は、同じURLを外から定期的に確かめる処理を<a href="https://slt-inc.jp/glossary/%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e7%9b%a3%e8%a6%96/">サーバー監視</a>の項目に加えると、設定の巻き戻りに気づけます。</p>
<h3>公開前と更新後のチェックリスト</h3>
<ul class="slt-check">
<li>公開ディレクトリが <code>public</code> などの公開用フォルダだけを指している</li>
<li><code>/.git/HEAD</code>、<code>/.env</code>、<code>/wp-config.php.bak</code> が、すべてのホスト名とHTTP、HTTPSで404か403になる</li>
<li>CDNを使う場合、オリジンへ直接確かめても同じ結果になる</li>
<li>拒否の設定を入れた後も、トップページと <code>/.well-known/</code> の下が表示される</li>
<li>公開ディレクトリに、zip、SQLダンプ、debug.log、phpinfoのページが残っていない</li>
<li>.gitignoreに .env が入り、<code>git ls-files</code> の一覧に .env が出てこない</li>
<li>デプロイの手順に、置いてはいけないファイルの確認が入っている</li>
</ul>
<p>サーバーの入れ替え、デプロイ方法の変更、制作会社の交代の後が、このリストを最初からやり直す時期です。公開ファイル以外の点検項目は、「<a href="https://slt-inc.jp/article/website-security-check-items/">Webサイトのセキュリティチェック項目30選</a>」にまとめています。無料の簡易チェックで分かる範囲と、専門の診断が要る場面の違いは、「<a href="https://slt-inc.jp/article/vulnerability-assessment-vs-simple-check/">簡易チェックと脆弱性診断の違い</a>」で説明しています。</p>

<h2>よくある質問</h2>
<div class="slt-faq"><h3>.env.exampleや.gitignoreが見えているのも問題ですか？</h3><p>直ちに鍵が漏れるわけではありませんが、公開する必要は無いため、拒否の対象に含めます。.env.exampleは値を空にした見本のはずなので、本物の値が入ったまま置かれていないかの確認が必要です。.gitignoreに秘密の値は入りませんが、使っている仕組みやファイル名の手がかりになります。</p></div>
<div class="slt-faq"><h3>取引先や他社のサイトで.envが見えてしまったら、どうすればよいですか？</h3><p>中身を保存、共有、利用せず、見つけたURLと日時だけを伝えます。伝え先は、運営者に問い合わせ窓口があればそこ、無ければIPAの脆弱性関連情報の届出窓口です。ほかのファイルを試して確かめることは、本文で説明した法的な問題につながるため行いません。</p></div>
<div class="slt-faq"><h3>GitHubの公開リポジトリに.envを上げてしまった時も、同じ対処ですか？</h3><p>同じで、最初に中の値を失効させて作り直します。公開リポジトリではGitHubのシークレットスキャンが自動で動きますが、検出されるのは既知の形式の値で、すべての秘密が対象になるわけではありません。履歴からの削除は、本文の手順のとおり新しいクローンで行います。</p></div>
<div class="slt-faq"><h3>個人情報を扱うデータベースのパスワードが漏れたら、報告の義務はありますか？</h3><p>不正な接続の跡があるなど、個人データが漏えいしたおそれがある場合は、個人情報保護委員会への報告と本人への通知が必要になることがあります。委員会の案内では、不正の目的によるおそれがある漏えい等は報告の対象で、速報は発覚から3〜5日以内、確報は60日以内です。2026年7月に公布された改正法で一部の緩和が予定されているため、<a href="https://www.ppc.go.jp/personalinfo/legal/leakAction/">個人情報保護委員会の案内</a>で最新の扱いを確かめてください。</p></div>
<div class="slt-faq"><h3>公開されていた期間が分からない時は、どこまで作り直せばよいですか？</h3><p>そのファイルが公開ディレクトリに置かれた日以降に、一度でも書かれていた値をすべて作り直します。置かれた日は、デプロイの記録やファイルの更新日時、Gitの履歴から推定します。.gitが公開されていた場合は、履歴に残る全期間の値が対象です。</p></div>
<div class="slt-faq"><h3>レンタルサーバーで、サーバーの設定を変えられない時はどうすればよいですか？</h3><p>まず、ファイル自体を公開フォルダの外へ移すか、不要なら削除します。.htaccessはApache系のサーバーで上書きが許可されている時だけ効き、Nginxのサーバーでは置いても読まれません。どちらか分からない時は、サーバー会社の管理画面やサポートで、アクセスを制限する機能の有無を確かめます。</p></div>
<div class="slt-faq"><h3>静的なサイトやWordPressだけのサイトでも、確認は必要ですか？</h3><p>必要です。静的なサイトでも、リポジトリの直下をそのまま公開する構成や、フォルダごとアップロードする運用では.gitが入ります。WordPressでは、テーマやプラグインの開発フォルダに残る.git、<code>wp-config.php</code> の控え、<code>debug.log</code> が見落とされやすい場所です。</p></div>

<div class="slt-related"><a class="slt-related-item" href="https://slt-inc.jp/article/website-security-check-items/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24854-security-checklist-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24854-security-checklist-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24854-security-checklist-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">Webサイトのセキュリティチェック項目30選｜確認方法つき一覧表</span></a><a class="slt-related-item" href="https://slt-inc.jp/article/vulnerability-assessment-vs-simple-check/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24878-assessment-difference-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24878-assessment-difference-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24878-assessment-difference-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">簡易チェックと脆弱性診断の違い｜無料ツールでできることと、専門業者が必要な場面</span></a><a class="slt-related-item" href="https://slt-inc.jp/article/wordpress-vulnerability-check/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24880-wordpress-vulnerability-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24880-wordpress-vulnerability-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24880-wordpress-vulnerability-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">WordPressの脆弱性を確認する方法｜本体、プラグインの更新と対処の手順</span></a><a class="slt-related-item" href="https://slt-inc.jp/article/security-headers-setup/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24853-security-headers-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24853-security-headers-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24853-security-headers-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">セキュリティヘッダーの設定方法｜HSTS、CSPの設定例つき</span></a></div>

<div class="slt-cta"><p class="slt-cta-title">公開ファイルの確認を、まとめて無料で</p><p>URLを入れるだけで、.git、.env、wp-config.phpの控え、SQLダンプなどが外から読めないかを、ページの取得だけで確かめます。登録は不要で、診断できるのは自社または管理権限のあるサイトです。結果の読み方や見つかった後の対処に迷う時は、<a href="https://slt-inc.jp/inquiry/">お問い合わせ</a>から診断と対策をご相談いただけます。</p><a class="slt-cta-btn" href="https://slt-inc.jp/service/security-checker/">無料でWebサイトをチェックする</a></div>
</div>
<script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": ".env.exampleや.gitignoreが見えているのも問題ですか？", "acceptedAnswer": {"@type": "Answer", "text": "直ちに鍵が漏れるわけではありませんが、公開する必要は無いため、拒否の対象に含めます。.env.exampleは値を空にした見本のはずなので、本物の値が入ったまま置かれていないかの確認が必要です。.gitignoreに秘密の値は入りませんが、使っている仕組みやファイル名の手がかりになります。"}}, {"@type": "Question", "name": "取引先や他社のサイトで.envが見えてしまったら、どうすればよいですか？", "acceptedAnswer": {"@type": "Answer", "text": "中身を保存、共有、利用せず、見つけたURLと日時だけを伝えます。伝え先は、運営者に問い合わせ窓口があればそこ、無ければIPAの脆弱性関連情報の届出窓口です。ほかのファイルを試して確かめることは、本文で説明した法的な問題につながるため行いません。"}}, {"@type": "Question", "name": "GitHubの公開リポジトリに.envを上げてしまった時も、同じ対処ですか？", "acceptedAnswer": {"@type": "Answer", "text": "同じで、最初に中の値を失効させて作り直します。公開リポジトリではGitHubのシークレットスキャンが自動で動きますが、検出されるのは既知の形式の値で、すべての秘密が対象になるわけではありません。履歴からの削除は、本文の手順のとおり新しいクローンで行います。"}}, {"@type": "Question", "name": "個人情報を扱うデータベースのパスワードが漏れたら、報告の義務はありますか？", "acceptedAnswer": {"@type": "Answer", "text": "不正な接続の跡があるなど、個人データが漏えいしたおそれがある場合は、個人情報保護委員会への報告と本人への通知が必要になることがあります。委員会の案内では、不正の目的によるおそれがある漏えい等は報告の対象で、速報は発覚から3〜5日以内、確報は60日以内です。2026年7月に公布された改正法で一部の緩和が予定されているため、個人情報保護委員会の案内で最新の扱いを確かめてください。"}}, {"@type": "Question", "name": "公開されていた期間が分からない時は、どこまで作り直せばよいですか？", "acceptedAnswer": {"@type": "Answer", "text": "そのファイルが公開ディレクトリに置かれた日以降に、一度でも書かれていた値をすべて作り直します。置かれた日は、デプロイの記録やファイルの更新日時、Gitの履歴から推定します。.gitが公開されていた場合は、履歴に残る全期間の値が対象です。"}}, {"@type": "Question", "name": "レンタルサーバーで、サーバーの設定を変えられない時はどうすればよいですか？", "acceptedAnswer": {"@type": "Answer", "text": "まず、ファイル自体を公開フォルダの外へ移すか、不要なら削除します。.htaccessはApache系のサーバーで上書きが許可されている時だけ効き、Nginxのサーバーでは置いても読まれません。どちらか分からない時は、サーバー会社の管理画面やサポートで、アクセスを制限する機能の有無を確かめます。"}}, {"@type": "Question", "name": "静的なサイトやWordPressだけのサイトでも、確認は必要ですか？", "acceptedAnswer": {"@type": "Answer", "text": "必要です。静的なサイトでも、リポジトリの直下をそのまま公開する構成や、フォルダごとアップロードする運用では.gitが入ります。WordPressでは、テーマやプラグインの開発フォルダに残る.git、wp-config.php の控え、debug.log が見落とされやすい場所です。"}}]}</script><p>The post <a href="https://slt-inc.jp/article/git-env-file-exposure/">.gitや.envが公開されていないか確認する方法と、見つかった時の対処</a> first appeared on <a href="https://slt-inc.jp">総合デジタルマーケティング企業 エスライン・テクノロジーズ</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Webサイトのセキュリティチェック項目30選｜確認方法つき一覧表</title>
		<link>https://slt-inc.jp/article/website-security-check-items/</link>
		
		<dc:creator><![CDATA[slt]]></dc:creator>
		<pubDate>Wed, 16 Sep 2026 01:24:00 +0000</pubDate>
				<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[記事]]></category>
		<category><![CDATA[SSL/TLS]]></category>
		<category><![CDATA[Webサイトセキュリティ]]></category>
		<category><![CDATA[セキュリティチェック]]></category>
		<category><![CDATA[セキュリティヘッダー]]></category>
		<category><![CDATA[セキュリティ対策]]></category>
		<category><![CDATA[公開ファイル]]></category>
		<category><![CDATA[無料ツール]]></category>
		<category><![CDATA[脆弱性]]></category>
		<category><![CDATA[脆弱性診断]]></category>
		<guid isPermaLink="false">https://slt-inc.jp/?p=24854</guid>

					<description><![CDATA[<p>Web&#x30B5;&#x30A4;&#x30C8;&#x306E;&#x30BB;&#x30AD;&#x30E5;&#x30EA;&#x30C6;&#x30A3;&#x30C1;&#x30A7;&#x30C3;&#x30AF;&#x3067;&#x78BA;&#x304B;&#x3081;&#x308B;30&#x9805;&#x76EE;&#x3092;&#x3001;&#x516C;&#x958B;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x3001;&#x901A;&#x4FE1;&#x3001;&#x30D8;&#x30C3;&#x30C0;&#x30FC;&#x3001;DNS&#x3001;&#x66F4;&#x65B0;&#x3001;&#x30ED;&#x30B0;&#x30A4;&#x30F3;&#x3001;&#x904B;&#x7528;&#x306E;7&#x5206;&#x985E;&#x3067;&#x4E00;&#x89A7;&#x306B;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;&#x5404;&#x9805;&#x76EE;&#x306E;&#x78BA;&#x8A8D;&#x65B9;&#x6CD5;&#x3001;&#x5408;&#x683C;&#x306E;&#x76EE;&#x5B89;&#x3001;&#x76F4;&#x3057;&#x65B9;&#x3068;&#x3001;&#x4ECA;&#x65E5;15&#x5206;&#x3067;&#x3067;&#x304D;&#x308B;&#x70B9;&#x691C;&#x306E;&#x624B;&#x9806;&#x3092;&#x793A;&#x3057;&#x307E;&#x3059;&#x3002;</p>
<p>The post <a href="https://slt-inc.jp/article/website-security-check-items/">Webサイトのセキュリティチェック項目30選｜確認方法つき一覧表</a> first appeared on <a href="https://slt-inc.jp">総合デジタルマーケティング企業 エスライン・テクノロジーズ</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="slt-art">
<div class="slt-meta">最終確認日: 2026年10月12日 / 編集: エスライン・テクノロジーズ株式会社 Webサイトセキュリティ編集チーム</div>
<div class="slt-lead"><p class="slt-lead-label">この記事の結論</p><p>Webサイトのセキュリティチェックは30項目あり、17項目は外からブラウザや無料ツールで、13項目は管理画面と契約書で確かめます。最初の15分で、公開ファイル、証明書の期限、更新、ログインの守り、バックアップを見てください。直す順番は、被害の大きさ、見つかりやすさ、直す手間の3つで決めます。</p></div>

<h2>セキュリティチェックの30項目は、外から17、管理画面と契約で13を確かめる</h2>
<p>セキュリティチェックの30項目は、確かめる場所で2つに分かれます。公開ファイル、通信、HTTPヘッダー、DNSの17項目は外から、更新、ログイン、運用の13項目は管理画面と契約書で確かめます。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 400"><title>セキュリティチェック30項目の範囲と確かめる道具</title><desc>上段は外から確かめる17項目で、ブラウザと無料ツールを使う。中段は管理画面と契約書で確かめる13項目。下段の点線は点検表の外にあるアプリの作りで、専門家の脆弱性診断が担う。</desc><rect x="20" y="16" width="580" height="112" rx="12" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="44" y="60" font-size="26" font-weight="bold" fill="#10265A">外から確かめる17項目(1〜17)</text><text x="44" y="102" font-size="22" fill="#10265A">公開ファイル、通信、ヘッダー、DNS</text><rect x="620" y="16" width="160" height="112" rx="12" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="700" y="62" font-size="22" text-anchor="middle" fill="#10265A">ブラウザ</text><text x="700" y="96" font-size="22" text-anchor="middle" fill="#10265A">無料ツール</text><rect x="20" y="144" width="580" height="112" rx="12" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="44" y="188" font-size="26" font-weight="bold" fill="#10265A">管理画面で確かめる13項目(18〜30)</text><text x="44" y="230" font-size="22" fill="#10265A">更新、ログイン、バックアップ、体制</text><rect x="620" y="144" width="160" height="112" rx="12" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="700" y="190" font-size="22" text-anchor="middle" fill="#10265A">管理画面</text><text x="700" y="224" font-size="22" text-anchor="middle" fill="#10265A">契約書</text><rect x="20" y="272" width="580" height="112" rx="12" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3" stroke-dasharray="12 8"/><text x="44" y="316" font-size="26" font-weight="bold" fill="#10265A">点検表の外にあるアプリの作り</text><text x="44" y="358" font-size="22" fill="#10265A">入力フォーム、会員機能、決済</text><rect x="620" y="272" width="160" height="112" rx="12" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3"/><text x="700" y="318" font-size="22" text-anchor="middle" fill="#10265A">専門家の</text><text x="700" y="352" font-size="22" text-anchor="middle" fill="#10265A">脆弱性診断</text></svg><figcaption>図1 30項目の範囲。上段の17項目は外から、中段の13項目は管理画面と契約書で確かめる。下段のアプリの作りは点検表の外にあり、専門家の脆弱性診断が担う</figcaption></figure>
<p>外から確かめられる設定は、攻撃者にも同じように見えています。証明書の期限切れや公開されたファイルは、URLを知っていれば誰でも気づけます。</p>
<p>管理画面の項目は外から見えないため、無料ツールでは確かめられません。IPAの『<a href="https://www.ipa.go.jp/security/vuln/websecurity/sitecheck.html">安全なウェブサイトの運用管理に向けての20ヶ条</a>』も、パスワード、アカウント、ログといった運用の条項を多く含みます。</p>
<div class="slt-callout is-note"><p class="slt-callout-title">この点検表で分からないこと</p><p>入力フォームや会員機能の作りに潜む問題、たとえばSQLインジェクションや<a href="https://slt-inc.jp/glossary/xss/">XSS</a>は、外からの観察と管理画面では確かめられません。個人情報や決済を扱うサイトは、専門家による<a href="https://slt-inc.jp/glossary/vulnerability-assessment/">脆弱性診断</a>を組み合わせます。</p></div>

<h2>今日15分でできる最初の点検</h2>
<p>最初の15分は、見つかったときの被害が大きい5点に絞ります。ブラウザとCMSの管理画面があれば、専門の道具は要りません。</p>
<ol class="slt-steps">
<li><strong>公開ファイルを開いてみる(2分)</strong>ブラウザで自社ドメインの /.git/HEAD と /.env を開きます。『見つかりません』や『Forbidden』と出れば合格です。設定値のような文字が表示されたら、ほかの作業より先に項目1の対処へ進みます。</li>
<li><strong>証明書の期限を見る(2分)</strong>アドレスバーの鍵アイコンから証明書を開き、有効期限を確かめます。残りが30日を切っていたら、自動更新が動いているかをサーバーの管理画面で見ます。</li>
<li><strong>更新とログインの守りを見る(5分)</strong>CMSの管理画面で、本体とプラグインに未適用の更新がないかを見ます。管理者アカウントで2段階認証が有効か、パスワードをほかのサービスと使い回していないかも確かめます。</li>
<li><strong>バックアップの最終日を見る(3分)</strong>サーバーの管理画面で、最後に取得した日と保存先を確かめます。更新を当てるのは、この確認の後です。</li>
<li><strong>外から見える設定をまとめて診断する(3分)</strong><a href="https://slt-inc.jp/service/security-checker/">無料のWebサイトセキュリティチェック</a>にURLを入れ、重大度が『緊急』と『高』の指摘だけを書き出します。登録は要らず、通常30秒から90秒で結果が出ます。</li>
</ol>
<p>ターミナルを使える場合は、次の2行で項目5、6、9、11〜13の応答をまとめて確かめられます。1行目のようにスキームを省くと、curlはhttpで接続します。</p>
<pre class="slt-code"><code>curl -I example.com
curl -I https://example.com/

例: 1行目の応答(この形なら項目6は合格)
HTTP/1.1 301 Moved Permanently
Location: https://example.com/

例: 2行目の応答で探すヘッダー
strict-transport-security: max-age=31536000
x-frame-options: SAMEORIGIN
x-content-type-options: nosniff</code></pre>
<div class="slt-callout is-warn"><p class="slt-callout-title">Windowsとボット対策の注意</p><p>Windows PowerShell 5.1の curl は、Invoke-WebRequestという別のコマンドの別名です。Windowsに標準で入っている curl.exe を使い、curl.exe -I と打ちます。CDNのボット対策でcurlだけが止められる場合は、開発者ツールのNetworkタブで応答ヘッダーを見ます。</p></div>

<h2>外から確かめる17項目(公開ファイル、通信、ヘッダー、DNS)</h2>
<p>外から確かめる17項目は、ログインせずに、ブラウザ、curl、無料ツールで確かめられます。表は、確認方法と合格の目安、放置の危険、直し方の順に並べています。</p>

<h3>公開してはいけないファイルとページ(項目1〜5)</h3>
<p>よく使われるファイル名は、URLを推測して機械的に試せます。OWASPの検査ガイド(WSTG-CONF-04)も、.bak などの古い写しがソースコードや認証情報を表示する危険を挙げています。確認は、自社のサイトだけに限ります。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>項目</th><th>確認方法と合格の目安</th><th>放置の危険</th><th>直し方</th></tr></thead><tbody>
<tr><td>1. 開発用のファイル</td><td>/.git/HEAD、/.env、JSのURLの末尾に .map を付けたURLを開く。403か404なら合格。『ref: refs/heads/』や『DB_PASSWORD=』が出たら不合格</td><td>ソースコードと変更履歴、DBのパスワード、APIキーを取られる</td><td>公開フォルダから外し、サーバー設定で拒否する(下の例)。読まれた鍵とパスワードは作り直す</td></tr>
<tr><td>2. バックアップとログ</td><td>公開フォルダに .zip、.sql、.bak、.old や、末尾が ~ のファイルがない。/wp-content/debug.log が開けなければ合格</td><td>顧客情報を含むDBや設定が丸ごと持ち出される。ログからは内部のパスやエラーが分かる</td><td>削除し、保存先を公開フォルダの外へ移す。デバッグログは公開されない場所に書き出す</td></tr>
<tr><td>3. 一覧表示と情報ページ</td><td>フォルダのURLで一覧表示(<a href="https://slt-inc.jp/glossary/directory-listing/">ディレクトリリスティング</a>)が出ず、/phpinfo.php や /phpmyadmin/ が開かなければ合格</td><td>ファイル名、構成、PHPの設定値を知られる。DB管理画面はパスワードの総当たりを受ける</td><td>Apacheは <code>Options -Indexes</code> で一覧を止める。phpinfoは消し、DB管理画面はサーバーの管理画面経由に限る</td></tr>
<tr><td>4. 不要なページとテスト環境</td><td>test. や dev. のサブドメイン、/old/ などの旧ページ、終わったキャンペーンを書き出し、社外から開けなければ合格</td><td>誰も更新しないCMSが残り、そこから侵入される。テスト環境に本番データの写しがあれば漏れる</td><td>不要なら消す。残すならBasic認証などで社外から隠し、公開の終了日に閉じる手順を決める</td></tr>
<tr><td>5. エラーと版の表示</td><td>存在しないURLを開いてもファイルのパスやSQL文が出ず、curl -I の Server と X-Powered-By に版番号がなければ合格</td><td>構成と版から、狙う脆弱性を絞り込まれる</td><td>PHPは <code>display_errors=Off</code> と <code>expose_php=Off</code>。nginxは <code>server_tokens off</code>、Apacheは <code>ServerTokens Prod</code></td></tr>
</tbody></table></div>
<pre class="slt-code"><code># Apache(.htaccess)の例: .git、.svn、.env を含むURLに404を返す
RedirectMatch 404 /\.(git|svn|env)

# nginxの例: 同じURLへのアクセスを拒否する(403を返す)
location ~ /\.(git|svn|env) {
    deny all;
}</code></pre>
<p>どちらの例も、証明書の自動更新が使う /.well-known/ には影響しません。見つかった後の手順は、<a href="https://slt-inc.jp/article/git-env-file-exposure/">.gitや.envが公開されていたときの確認と対処</a>で扱っています。</p>
<div class="slt-callout is-warn"><p class="slt-callout-title">版を隠しても脆弱性は残る</p><p>項目5で版の表示を消すと、狙いを絞られにくくなるだけです。古いソフトウェアの脆弱性そのものは消えないため、本当の対策は項目18〜21の更新です。</p></div>

<h3>通信の暗号化と証明書(項目6〜10)</h3>
<p>HTTPSは、入力内容を盗み見と書き換えから守る土台です。20ヶ条でも、通信の暗号化は独立した1条になっています。<a href="https://slt-inc.jp/glossary/ssl-tls-certificate/">SSL/TLS証明書</a>の詳しい見方は、<a href="https://slt-inc.jp/article/ssl-tls-certificate-check/">SSL/TLS証明書のチェック方法</a>で扱っています。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>項目</th><th>確認方法と合格の目安</th><th>放置の危険</th><th>直し方</th></tr></thead><tbody>
<tr><td>6. HTTPSへの転送</td><td><code>curl -I example.com</code> のようにhttpで開き、301か308とhttps://の転送先が出れば合格。wwwあり、なしの両方を見る</td><td>フォームの入力内容が暗号化されずに流れる。Chromeは『保護されていない通信』と表示する</td><td>サーバーで常時SSLを有効にし、すべてのURLをhttps://へ301で転送する</td></tr>
<tr><td>7. 証明書の期限と自動更新</td><td>鍵アイコンから証明書を開き、期限まで30日以上あり、名前にwwwあり、なしの両方が入り、自動更新が動いていれば合格</td><td>期限が切れた時点でブラウザが全画面の警告を出し、訪問者が先へ進めない</td><td>自動更新にし、期限の監視を別に置く。Let&#8217;s Encryptの期限通知メールは2025年6月4日に終了した</td></tr>
<tr><td>8. 古い通信方式の停止</td><td>診断ツールで、TLS 1.2と1.3にだけ応じ、TLS 1.0、1.1、SSL 3.0を拒めば合格</td><td>RFC 8996(TLS 1.0、1.1)とRFC 7568(SSL 3.0)が使用を禁じた方式での接続を許してしまう</td><td>Apacheは既定の <code>all -SSLv3</code> のままにせず、<code>SSLProtocol -all +TLSv1.2 +TLSv1.3</code> にする。共用サーバーは事業者の設定を確かめる</td></tr>
<tr><td>9. <a href="https://slt-inc.jp/glossary/hsts/">HSTS</a></td><td>curl -I https://example.com/ の応答を見る。Strict-Transport-Security の max-age が31536000(1年)以上なら合格</td><td>httpのリンクや初回の接続から、暗号化されない通信へ誘導される余地が残る</td><td>max-age=300 など短い値で始め、問題がなければ1年以上へ延ばす</td></tr>
<tr><td>10. <a href="https://slt-inc.jp/glossary/mixed-content/">混在コンテンツ</a></td><td>主要ページを開き、開発者ツール(F12)のConsoleに Mixed Content の警告が出なければ合格</td><td>httpで読むスクリプトやCSSはブラウザに止められ、表示や機能が崩れる</td><td>本文、テーマ、プラグインの参照をhttps://に直す。補助にCSPの upgrade-insecure-requests を使う</td></tr>
</tbody></table></div>
<div class="slt-callout is-note"><p class="slt-callout-title">証明書の有効期間は短くなっている</p><p>CA/Browser Forumの<a href="https://cabforum.org/working-groups/server/baseline-requirements/requirements/">基準(Baseline Requirements)</a>では、2026年3月15日以降に発行する証明書の最大有効期間が200日です。2027年3月15日からは100日、2029年3月15日からは47日に縮みます。更新の回数が増えるほど手作業は漏れやすいため、項目7は自動更新を前提にします。</p></div>

<h3>HTTPヘッダーとCookie(項目11〜14)</h3>
<p>セキュリティヘッダーは、ブラウザに備わった防御を有効にする設定です。確認はどれも、curl -I の応答を1回見れば済みます。書き方の例は、<a href="https://slt-inc.jp/article/security-headers-setup/">セキュリティヘッダーの設定方法</a>にまとめています。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>項目</th><th>確認方法と合格の目安</th><th>放置の危険</th><th>直し方</th></tr></thead><tbody>
<tr><td>11. <a href="https://slt-inc.jp/glossary/csp/">CSP</a></td><td>応答の Content-Security-Policy を見る。<code>frame-ancestors</code>、<code>object-src 'none'</code>、<code>base-uri 'self'</code> があれば第1段階は合格</td><td>XSSが起きたとき、外部スクリプトの読み込みや情報の送信を止められない</td><td>Content-Security-Policy-Report-Only で違反を集め、表示が崩れないと確かめてから適用する</td></tr>
<tr><td>12. 枠への埋め込みの禁止</td><td>X-Frame-Options: SAMEORIGIN(またはDENY)か、CSPの <code>frame-ancestors 'self'</code> があれば合格</td><td>透明に重ねたページでボタンを押させる<a href="https://slt-inc.jp/glossary/clickjacking/">クリックジャッキング</a>を受ける</td><td>応答ヘッダーを1行足す。meta要素に書いても効かない</td></tr>
<tr><td>13. 補助の3つのヘッダー</td><td>X-Content-Type-Options: nosniff がある。Referrer-Policy が unsafe-url でなく、Permissions-Policy で使わない機能を止めていれば合格</td><td>ファイルの種類の誤判定、URLに含まれる情報の外部送信、埋め込みによる不要な機能の利用を許す</td><td>1行ずつ足す。Referrer-Policyは未指定でも、仕様の既定値 strict-origin-when-cross-origin で動く</td></tr>
<tr><td>14. Cookieの属性</td><td>ログイン後、開発者ツールのApplicationタブでCookieを開く。ログイン状態を保つCookieに Secure、HttpOnly、SameSite=Lax以上があれば合格</td><td>XSSでCookieを盗まれ、なりすまされる。他サイトを経由した意図しない操作も受けやすい</td><td>CMSやアプリの設定で付ける。PHPなら session.cookie_secure など3つの設定を有効にする(既定はどれも無効)</td></tr>
</tbody></table></div>
<p>APIを公開しているサイトは、Access-Control-Allow-Origin が * や、受け取ったオリジンをそのまま返す設定になっていないかも確かめます。</p>

<h3>DNSとメール認証(項目15〜17)</h3>
<p>自社ドメインを名乗るなりすましメールは、サイトに触れずに顧客や取引先を狙います。IPAの<a href="https://www.ipa.go.jp/security/10threats/10threats2026.html">情報セキュリティ10大脅威2026</a>でも、ビジネスメール詐欺が組織向けの10位に入りました。メール認証は、受け取る側に本物かどうかを判断させる仕組みです。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>項目</th><th>確認方法と合格の目安</th><th>放置の危険</th><th>直し方</th></tr></thead><tbody>
<tr><td>15. SPFとDKIM</td><td>dig TXT 自社ドメイン で v=spf1 の行がちょうど1つ。自社から送ったメールのヘッダー(Authentication-Results)に spf=pass と dkim=pass があれば合格</td><td>なりすましを受信側が見分けにくい。Gmailは認証のないメールを、迷惑メールに分類したり拒否したりすることがある</td><td>送信に使う全サービスをSPFにまとめ、DNSの参照を10回以内に収める。各サービスでDKIMの署名を有効にする</td></tr>
<tr><td>16. DMARC</td><td>dig TXT _dmarc.自社ドメイン で v=DMARC1 があり、rua でレポートを受け取っていれば第1段階は合格</td><td>なりすましメールの扱いが受信側任せになり、悪用されても気づけない</td><td>p=none とレポートの受け取りから始め、正規のメールが合格すると確かめてから p=quarantine、p=reject へ進む</td></tr>
<tr><td>17. 参照先のないCNAME</td><td>DNSの管理画面でCNAMEを一覧にし、参照先のサービスをすべて今も契約していれば合格</td><td>解約したサービス側で第三者が同じ名前を取り、自社のサブドメインに偽のページを出す</td><td>不要なレコードを消す。サービスを解約するときは、先にDNSのレコードを消す</td></tr>
</tbody></table></div>
<pre class="slt-code"><code># Mac、Linux
dig TXT example.com +short
dig TXT _dmarc.example.com +short

# Windows(コマンドプロンプト、PowerShell)
nslookup -type=TXT example.com
nslookup -type=TXT _dmarc.example.com

例: 合格の形(SPFは1行だけ、DMARCはレポートの宛先あり)
"v=spf1 include:_spf.example.net ~all"
"v=DMARC1; p=none; rua=mailto:dmarc-report@example.com"</code></pre>
<p>Gmailの<a href="https://support.google.com/a/answer/81126?hl=ja">送信者のガイドライン</a>は、すべての送信者にSPFかDKIMを求め、1日5,000件以上を送る送信者にはSPF、DKIM、DMARCのすべてを求めています。コマンドを使わない場合は、ドメイン名を入れるだけの<a href="https://slt-inc.jp/service/dmarc-spf-dkim-diagnostic-tools/">DMARC、SPF、DKIMの無料診断ツール</a>でも設定の状況を確かめられます。</p>
<div class="slt-callout is-note"><p class="slt-callout-title">DMARCの仕様は2026年5月に改訂</p><p>DMARCの仕様は、2026年5月にRFC 9989として改訂され、RFC 7489を置き換えました。p=none、quarantine、reject の3段階の考え方は変わらず、項目16の進め方もそのまま使えます。</p></div>

<h2>管理画面と契約で確かめる13項目(更新、ログイン、運用)</h2>
<p>管理画面と契約で確かめる13項目は、外からは見えませんが、乗っ取りを防げるか、被害から戻れるかを決めます。CMS、サーバー、ドメインの管理画面と、制作会社やサーバー事業者との契約書を手元に置いて確かめます。</p>

<h3>ソフトウェアの更新(項目18〜21)</h3>
<p>公表された脆弱性には、<a href="https://slt-inc.jp/glossary/cve/">CVE</a>という共通の番号が付きます。攻撃者はその情報を使い、対策していないシステムを狙います。10大脅威2026でも、『システムの脆弱性を悪用した攻撃』が組織向けの4位でした。</p>
<p>WordPressでの具体的な手順は、<a href="https://slt-inc.jp/article/wordpress-vulnerability-check/">WordPressの脆弱性を確認する方法</a>で扱っています。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>項目</th><th>確認方法と合格の目安</th><th>放置の危険</th><th>直し方</th></tr></thead><tbody>
<tr><td>18. CMS本体</td><td>管理画面の更新画面で、未適用の更新がなく、自動更新が有効なら合格</td><td>修正済みの脆弱性が自社サイトにだけ残り、公表された情報をもとに攻撃される</td><td>バックアップ(項目26)を確かめてから更新する。WordPressは5.6以降に新しく入れたサイトなら、本体の自動更新が既定で有効</td></tr>
<tr><td>19. プラグインとテーマ</td><td>一覧で未適用の更新がなく、停止中のものが残っておらず、配布元で更新が長く止まったものがなければ合格</td><td>公表された脆弱性を狙われる。停止しただけのものはファイルが残り、更新も忘れられやすい</td><td>更新し、使わないものは削除する。配布や保守が止まったものは代わりを探す</td></tr>
<tr><td>20. PHPとWebサーバー</td><td>サーバーの管理画面か、WordPressの『サイトヘルス』の情報タブで版を見る。<a href="https://www.php.net/supported-versions.php">php.netのサポート期間</a>内なら合格</td><td>サポートが切れた版には、脆弱性の修正が出ない</td><td>検証環境で動作を確かめてから切り替える。PHP 8.2のセキュリティサポートは2026年12月31日まで</td></tr>
<tr><td>21. JSライブラリ</td><td>開発者ツールのConsoleで jQuery.fn.jquery と打ち、3.5.0以上か、未定義(jQueryを使っていない)なら合格</td><td>既知のXSSが残る。3.5.0未満にあるCVE-2020-11023は、2025年1月に米国CISAの悪用確認済みの一覧に載った</td><td>テーマやプラグインの更新で置き換える。CDNから読む場合は integrity 属性(SRI)を付ける</td></tr>
</tbody></table></div>

<h3>ログインとアカウント(項目22〜25)</h3>
<p>管理画面のパスワードは、ほかで漏れたパスワードの一覧を使って機械的に試されます。20ヶ条も、不正ログインの対策、不要なアカウント、推測されやすいパスワードを、それぞれ独立した条項にしています。CMSだけでなく、サーバー、ドメイン、DNS、メール配信の管理画面も同じ扱いです。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>項目</th><th>確認方法と合格の目安</th><th>放置の危険</th><th>直し方</th></tr></thead><tbody>
<tr><td>22. パスワード</td><td>管理画面ごとに別のパスワードで、多要素認証のない画面は15文字以上なら合格</td><td>他社のサービスから漏れたパスワードで、そのまま入られる</td><td>パスワード管理ツールで生成する。米国の<a href="https://pages.nist.gov/800-63-4/sp800-63b.html">NISTの指針(SP 800-63B-4)</a>も、パスワードだけで守る場合は15文字以上を求める</td></tr>
<tr><td>23. 多要素認証</td><td>CMSの管理者、サーバー、ドメインの登録サービス、DNS、メール配信のすべてで、2段階認証が有効なら合格</td><td>パスワードが漏れた時点で乗っ取られる。ドメインの管理画面を取られると、サイトとメールを丸ごと奪われる</td><td>認証アプリかセキュリティキーで有効にし、復旧コードを社内の決まった場所に保管する</td></tr>
<tr><td>24. ログイン画面の保護</td><td>社外の回線で /wp-admin/ が開かないか、試行回数の制限が効いている。/wp-json/wp/v2/users にログインIDが出なければ合格</td><td>ログインIDを知られたうえで、総当たりや使い回しのパスワードを試され続ける</td><td>接続元のIP制限かBasic認証をかけ、ログインの試行回数を制限する。使わないなら xmlrpc.php も止める</td></tr>
<tr><td>25. アカウントと権限</td><td>CMS、サーバー、FTP、DNSのアカウントを書き出し、退職者、制作会社の作業用、テスト用が残っていなければ合格</td><td>使われていないアカウントが、気づかれない入口として残る</td><td>不要なものを消し、管理者権限は必要な人だけにする。FTPは止め、暗号化されるSFTPに切り替える</td></tr>
</tbody></table></div>

<h3>バックアップ、監視、体制(項目26〜30)</h3>
<p>被害をゼロにはできないため、気づく仕組みと戻す手段を先に用意します。IPAが2026年10月9日に出した<a href="https://www.ipa.go.jp/security/security-alert/2026/alert20261009.html">不正アクセスによる漏えい等の事案を踏まえた注意喚起</a>も、ログの保持期間、保有データ、外部サービスの見直しを求めています。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>項目</th><th>確認方法と合格の目安</th><th>放置の危険</th><th>直し方</th></tr></thead><tbody>
<tr><td>26. バックアップと復元</td><td>保存先、世代数、最後に復元を試した日を見る。サーバーとは別の場所に複数の世代があり、復元を試したことがあれば合格</td><td>改ざん、ランサム攻撃、誤操作のあとで、元の状態に戻せない</td><td>自動で取得し、サーバーの外にも世代を残す。年1回はテスト環境で復元を試す</td></tr>
<tr><td>27. ログと警告の確認</td><td>アクセスログとエラーログの保存期間を確かめ、月1回は見ている。Search Consoleの『セキュリティの問題』に緑のチェックが出ていれば合格</td><td>改ざんや不正ログインに気づけず、原因と影響の範囲も説明できない</td><td>保存期間が短ければ、定期的に取り出して保管する。Search Consoleに登録して通知を受け取る</td></tr>
<tr><td>28. <a href="https://slt-inc.jp/glossary/waf/">WAF</a></td><td>サーバーやCDNの管理画面でWAFが有効で、フォームの送信や管理画面の保存が止められていなければ合格</td><td>更新が遅れたあいだに届く既知の攻撃を、入口で止められない</td><td>有効にしてから主要な操作を試す。誤って止まる操作は、該当する規則だけを外す</td></tr>
<tr><td>29. 保有する個人情報</td><td>フォームの送信履歴、会員データ、書き出したCSVの置き場所と件数を確かめ、保存期間が決まっていれば合格</td><td>侵入されたとき、ためていた分だけ漏れる量が増え、報告と通知の対象も広がる</td><td>期限を過ぎたものを消す。フォームの内容をサーバーに残す必要がなければ、保存を止める</td></tr>
<tr><td>30. 責任範囲と連絡先</td><td>ドメイン、サーバー、証明書、CMSの保守を、誰がいつまで担うかを1枚の表に書ければ合格</td><td>全員が『誰かがやっている』と思い込み、更新も監視も止まる。事故の連絡先も分からない</td><td>契約に保守の範囲を書く。外部からの連絡窓口は /.well-known/security.txt で示す(RFC 9116)</td></tr>
</tbody></table></div>

<h2>直す順番は、被害の大きさ、見つかりやすさ、手間の3つで決める</h2>
<p>30項目は、被害の大きさ、見つかりやすさ、直す手間と副作用の3つの物差しで、3段階に分けて直します。被害が大きく機械的に見つかるものから先に直し、表示を壊すおそれのあるものは試しながら進めます。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 420"><title>3つの物差しで30項目を3段階に分ける</title><desc>左の3つの物差し(被害の大きさ、見つかりやすさ、直す手間と副作用)で評価し、右の3段階(すぐ、今月中、3か月以内)に項目番号を振り分ける流れを示す図</desc><defs><marker id="slt-arrow-prio-24854" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="8" markerHeight="8" orient="auto"><path d="M0,0 L10,5 L0,10 z" fill="#10265A"/></marker></defs><rect x="20" y="20" width="300" height="380" rx="12" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="170" y="66" font-size="26" font-weight="bold" text-anchor="middle" fill="#10265A">3つの物差し</text><text x="44" y="122" font-size="22" font-weight="bold" fill="#10265A">1 被害の大きさ</text><text x="44" y="154" font-size="22" fill="#10265A">漏えい、改ざん、停止</text><text x="44" y="222" font-size="22" font-weight="bold" fill="#10265A">2 見つかりやすさ</text><text x="44" y="254" font-size="22" fill="#10265A">決まったURL、公表情報</text><text x="44" y="322" font-size="22" font-weight="bold" fill="#10265A">3 直す手間と副作用</text><text x="44" y="354" font-size="22" fill="#10265A">数行で済むか、試すか</text><line x1="326" y1="210" x2="364" y2="84" stroke="#10265A" stroke-width="3" marker-end="url(#slt-arrow-prio-24854)"/><line x1="326" y1="210" x2="364" y2="210" stroke="#10265A" stroke-width="3" marker-end="url(#slt-arrow-prio-24854)"/><line x1="326" y1="210" x2="364" y2="336" stroke="#10265A" stroke-width="3" marker-end="url(#slt-arrow-prio-24854)"/><rect x="372" y="20" width="408" height="120" rx="12" fill="#FFFFFF" stroke="#D00A0A" stroke-width="4"/><text x="396" y="66" font-size="24" font-weight="bold" fill="#10265A">すぐ(当日中)8項目</text><text x="396" y="110" font-size="22" fill="#10265A">1、2、7、18、19、22、23、26</text><rect x="372" y="150" width="408" height="120" rx="12" fill="#FFFFFF" stroke="#10265A" stroke-width="3"/><text x="396" y="196" font-size="24" font-weight="bold" fill="#10265A">今月中 13項目</text><text x="396" y="240" font-size="22" fill="#10265A">3〜6、12〜17、20、24、25</text><rect x="372" y="280" width="408" height="120" rx="12" fill="#EEF2F9" stroke="#4A5C82" stroke-width="3"/><text x="396" y="326" font-size="24" font-weight="bold" fill="#10265A">3か月以内 9項目</text><text x="396" y="370" font-size="22" fill="#10265A">8〜11、21、27〜30</text></svg><figcaption>図2 3つの物差しで30項目を3段階に分ける。すぐ直すのは8項目、今月中は13項目、3か月以内に計画して進めるのは9項目</figcaption></figure>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>段階</th><th>対象の項目</th><th>この段階にした根拠</th></tr></thead><tbody>
<tr><td>すぐ(当日中)</td><td>1、2、7、18、19、22、23、26</td><td>決まったURL、漏れたパスワードの一覧、公表された脆弱性で機械的に見つかり、被害も大きい。7は期限まで30日未満の場合。26は、作業で不具合が出たときの戻り道として先に確かめる</td></tr>
<tr><td>今月中</td><td>3〜6、12〜17、20、24、25</td><td>被害は大きいが、悪用には条件が要る。設定の数行や不要物の削除で直るものが多い。20はサポート切れなら移行の計画を立てる</td></tr>
<tr><td>3か月以内</td><td>8〜11、21、27〜30</td><td>表示や機能を壊すおそれがあり、試しながら進める。サーバー事業者や制作会社との調整、社内の決めごとが要る</td></tr>
</tbody></table></div>
<div class="slt-callout is-warn"><p class="slt-callout-title">HSTSは取り消しにくい</p><p>HSTSの有効期間を長くした後でHTTPSをやめると、その期間中、訪問済みのブラウザはサイトを開けなくなります。項目9を3か月以内の段階に置いたのは、短い期間から試して延ばすためです。</p></div>

<h2>点検の計画: 今日15分、毎月30分、変更時と年1回の見直し</h2>
<p>点検は一度で終わらせず、頻度を決めて回します。目安は、初回15分、毎月30分、変更したときと公開前に10分から20分、四半期に1時間、年1回に半日です。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>タイミング</th><th>所要時間の目安</th><th>点検する項目</th><th>使う道具</th></tr></thead><tbody>
<tr><td>今日(初回)</td><td>15分</td><td>1、7、18、19、22、23、26と、外側の一括診断</td><td>ブラウザ、管理画面、無料ツール</td></tr>
<tr><td>毎月1回</td><td>30分</td><td>1〜17の一括診断、18〜21、27</td><td>無料ツール、管理画面、Search Console</td></tr>
<tr><td>変更したとき、公開前</td><td>10〜20分</td><td>1〜6、10〜14と、下のチェックリスト</td><td>curl、開発者ツール</td></tr>
<tr><td>四半期に1回</td><td>1時間</td><td>4、17、24、25、28、29</td><td>DNSの管理画面、アカウントの一覧</td></tr>
<tr><td>年に1回</td><td>半日</td><td>20、26の復元テスト、30と、専門家の診断の要否</td><td>契約書、テスト環境</td></tr>
</tbody></table></div>
<p>公開前と変更したときは、次の8点を確かめてから切り替えます。作業の途中で作ったファイルやアカウントは、消し忘れやすいためです。</p>
<ul class="slt-check">
<li>作業で作った .zip、.sql、.bak を消した(項目2)</li>
<li>テスト用のアカウントと、制作会社の一時的なアカウントを消した(項目25)</li>
<li>本番のデバッグ表示を切った。WordPressは WP_DEBUG、PHPは display_errors(項目5)</li>
<li>テスト環境は、Basic認証などで社外から見えない(項目4)</li>
<li>全ページがhttpsで開き、Consoleに混在コンテンツの警告がない(項目6、10)</li>
<li>curl -I で、ヘッダーが意図どおりに返る(項目11〜13)</li>
<li>フォームを送信し、WAFに止められず、確認メールが届いた(項目28)</li>
<li>新しく作ったサブドメインに、使い終えたら消す担当を決めた(項目17)</li>
</ul>

<h2>問題が見つかったときの初動: 記録、停止、鍵の作り直し、報告</h2>
<p>公開ファイルや改ざんが見つかったら、記録、停止、作り直し、調査、報告の判断、再発防止の順で動きます。先にファイルを消すと、調査と報告に要る証拠まで失うためです。</p>
<ol class="slt-steps">
<li><strong>記録を残す</strong>見つけた日時、URL、画面のスクリーンショットを残し、サーバーのログを保全します。</li>
<li><strong>公開を止める</strong>問題のファイルを公開フォルダから外すか、サーバー設定で拒否します。改ざんであれば、メンテナンス表示に切り替えます。</li>
<li><strong>鍵とパスワードを作り直す</strong>読まれたおそれのある .env のパスワード、APIキー、管理者のパスワードを変えます。ファイルを消しても、写しを取られた鍵は使えるままです。</li>
<li><strong>ログで範囲を調べる</strong>アクセスログで、そのURLに外部から届いたリクエストの有無と日時を確かめます。</li>
<li><strong>報告と通知の要否を判断する</strong>個人データが漏れたおそれがあれば、個人情報保護委員会への報告と本人への通知が必要かを判断します。</li>
<li><strong>再発を防ぐ</strong>原因になった手順、権限、更新の漏れを直し、点検の計画に組み込みます。</li>
</ol>
<div class="slt-callout is-warn"><p class="slt-callout-title">報告には期限がある</p><p><a href="https://www.ppc.go.jp/personalinfo/legal/leakAction/">個人情報保護委員会の案内</a>では、速報は発覚から3〜5日以内、確報は30日以内です。不正アクセスなど不正の目的によるおそれがある場合、確報は60日以内で、漏れた人数が少なくても報告の対象になります。</p></div>
<p>自社だけで判断が難しい場合は、制作や保守を担う会社に早めに連絡します。診断結果の読み方や直す順番の相談は、<a href="https://slt-inc.jp/inquiry/">エスライン・テクノロジーズのお問い合わせ窓口</a>でも受け付けています。</p>

<h2>IPAの20ヶ条と、この点検表の対応</h2>
<p>この30項目は、IPAの20ヶ条の観点を、小規模なサイトで確かめられる形に置き換えたものです。20ヶ条は2005年に掲載が始まり、2015年の全面改訂を経て、2019年3月6日に最終更新されています。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>20ヶ条の分類</th><th>主な観点</th><th>この記事の項目</th></tr></thead><tbody>
<tr><td>ウェブアプリケーション(1〜8条)</td><td>公開すべきでないファイル、不要なページ、ソフトウェアの更新、エラーメッセージ、ログ、通信の暗号化、不正ログイン</td><td>1〜10、18、19、21〜24、27</td></tr>
<tr><td>ウェブサーバ(9〜14条)</td><td>OSやミドルウェアの更新、不要なサービスとアカウント、推測されやすいパスワード、アクセス制御、ログ</td><td>3、20、22、25、27</td></tr>
<tr><td>ネットワーク(15〜18条)</td><td>不要な通信の遮断、ファイアウォール、不正な通信の検知と遮断、機器のログ</td><td>28、30(共用サーバーでは事業者との分担を確かめる)</td></tr>
<tr><td>その他(19、20条)</td><td>クラウドなどを使うときの責任範囲、定期的な検査と監査</td><td>30、年1回の点検、専門家の診断</td></tr>
</tbody></table></div>
<p>20ヶ条の3条目にある『安全なウェブサイトの作り方』の脆弱性対策は、入力フォームなどの作りを調べる必要があり、この点検表には含めていません。ただし、項目11〜14のヘッダーとCookieは、その被害を和らげる設定にあたります。</p>
<p>反対に、メール認証(項目15、16)、参照先のないCNAME(項目17)、証明書の自動更新(項目7)は、20ヶ条にない観点として加えました。メールの送信者への要件や、証明書の有効期間の短縮といった、最終更新後の変化に対応するためです。</p>

<h2>無料ツール、手作業、専門家の診断の使い分け</h2>
<p>外から見える項目は無料ツールでまとめて確かめ、管理画面の項目は自分の目で確かめます。入力フォームや会員機能の作りは、専門家の脆弱性診断が担う領域です。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>方法</th><th>分かること</th><th>分からないこと</th><th>向く場面</th></tr></thead><tbody>
<tr><td>無料ツール</td><td>項目1〜17の多くと、外から見えるソフトウェアの版</td><td>管理画面の中、アプリの作り</td><td>毎月の点検、設定を変えた後</td></tr>
<tr><td>curlと開発者ツール</td><td>個々のヘッダー、転送、Cookie、混在コンテンツ</td><td>版と既知の脆弱性の照合</td><td>設定を直した直後の確かめ</td></tr>
<tr><td>管理画面と契約書</td><td>項目18〜30</td><td>外からの見え方</td><td>毎月と年1回の見直し</td></tr>
<tr><td>専門家の脆弱性診断</td><td>SQLインジェクションやXSSなど、作りの問題</td><td>日々の運用の抜け</td><td>公開前、大きな改修の後、個人情報や決済を扱うとき</td></tr>
</tbody></table></div>
<p>手順5で使った無料ツール『<a href="https://slt-inc.jp/service/security-checker/">Security Checker X</a>』は、公開ページの取得、DNSの照会、TLSの接続確認だけで診断し、ログインの試行や攻撃用データの送信はしません。各指摘には『確認済み』『推定』『可能性』の確度が付くため、事実と推測を分けて読めます。診断できるのは、自社か管理権限のあるサイトだけです。</p>
<p>専門家に依頼するかどうかの判断は、<a href="https://slt-inc.jp/article/vulnerability-assessment-vs-simple-check/">簡易チェックと脆弱性診断の違い</a>で整理しています。</p>

<h2>よくある質問</h2>
<div class="slt-faq"><h3>小さな会社のサイトでも、セキュリティチェックは必要ですか?</h3><p>必要です。10大脅威2026では『サプライチェーンや委託先を狙った攻撃』が組織向けの2位で、取引のある大きな組織へ近づく入口として、小さな組織が使われる場合があります。公開ファイルや古いプラグインは、規模に関係なく決まった方法で探せます。</p></div>
<div class="slt-faq"><h3>レンタルサーバーを使っていれば、点検は事業者に任せてよいですか?</h3><p>任せきりにはできません。20ヶ条の19条目は、サービス事業者の作業範囲を把握したうえで、足りない対策を自組織で行うよう検討を促しています。CMSの更新、管理画面のパスワード、公開フォルダに置いたファイルは利用者が操作する部分で、分担の細部は契約によって変わります。</p></div>
<div class="slt-faq"><h3>無料診断の点数が低いと、すぐに危険ということですか?</h3><p>点数だけでは決まりません。先に、重大度が『緊急』『高』の指摘と、その確度を見ます。版の表示などから推した指摘は、管理画面で事実を確かめてから直します。</p></div>
<div class="slt-faq"><h3>管理画面のパスワードは、定期的に変えたほうがよいですか?</h3><p>定期的な変更より、使い回しをなくすことと多要素認証を優先します。NISTの指針(SP 800-63B-4、2025年8月確定)は、利用者に定期的な変更を求めないよう定め、漏えいの証拠がある場合に変更させるとしています。</p></div>
<div class="slt-faq"><h3>取引先のセキュリティチェックシートに、この点検表で答えられますか?</h3><p>Webサイトに関する設問には、根拠として使えます。チェックシートが社内の規程や教育まで問う場合、Webサイトの点検はその一部にあたります。点検した日付、項目、結果を残しておくと、回答の裏付けになります。</p></div>
<div class="slt-faq"><h3>取引先など、他社のサイトをこの点検表で調べてもよいですか?</h3><p>管理者の許可がないサイトは調べないでください。公開ページを読むだけでも相手のログに残り、攻撃の下調べと区別がつきません。取引先の状態を知りたい場合は、点検表を渡して先方に確かめてもらいます。</p></div>
<div class="slt-faq"><h3>点検の結果は、何を記録しておけばよいですか?</h3><p>日付、項目番号、結果、対応、担当者の5つを1行で残します。前回との差を見れば、更新が止まった時期や設定が変わった時期をたどれます。診断ツールの結果画面は保存期間が限られる場合があるため、必要な部分は社内の記録に写します。</p></div>

<h2>項目ごとに詳しく確かめる関連記事</h2>
<div class="slt-related">
<a class="slt-related-item" href="https://slt-inc.jp/article/git-env-file-exposure/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24875-git-env-exposure-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24875-git-env-exposure-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24875-git-env-exposure-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">.gitや.envが公開されていないか確認する方法と、見つかった時の対処</span></a>
<a class="slt-related-item" href="https://slt-inc.jp/article/ssl-tls-certificate-check/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24877-ssl-tls-check-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24877-ssl-tls-check-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24877-ssl-tls-check-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">SSL/TLS証明書のチェック方法</span></a>
<a class="slt-related-item" href="https://slt-inc.jp/article/security-headers-setup/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24853-security-headers-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24853-security-headers-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24853-security-headers-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">セキュリティヘッダーの設定方法</span></a>
<a class="slt-related-item" href="https://slt-inc.jp/article/wordpress-vulnerability-check/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24880-wordpress-vulnerability-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24880-wordpress-vulnerability-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24880-wordpress-vulnerability-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">WordPressの脆弱性を確認する方法</span></a>
<a class="slt-related-item" href="https://slt-inc.jp/article/vulnerability-assessment-vs-simple-check/"><span class="slt-related-thumb"><img src="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24878-assessment-difference-300x200.png" srcset="https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24878-assessment-difference-300x200.png 300w, https://slt-inc.jp/wp-content/uploads/2026/10/slt-thumb-24878-assessment-difference-768x512.png 768w" sizes="auto, (max-width: 560px) 78vw, 300px" width="300" height="200" alt="" loading="lazy" decoding="async"></span><span class="slt-related-kind">関連記事</span><span class="slt-related-title">簡易チェックと脆弱性診断の違い</span></a>
</div>

<div class="slt-cta"><p class="slt-cta-title">外から見える項目を、無料でまとめて確かめる</p><p>URLを入れるだけで、証明書、ヘッダー、公開ファイル、ソフトウェアの版、DNSとメール認証を診断します。登録は要らず、通常30秒から90秒で結果が出ます。</p><a class="slt-cta-btn" href="https://slt-inc.jp/service/security-checker/">無料でWebサイトをチェックする</a></div>
</div>
<script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "小さな会社のサイトでも、セキュリティチェックは必要ですか?", "acceptedAnswer": {"@type": "Answer", "text": "必要です。10大脅威2026では『サプライチェーンや委託先を狙った攻撃』が組織向けの2位で、取引のある大きな組織へ近づく入口として、小さな組織が使われる場合があります。公開ファイルや古いプラグインは、規模に関係なく決まった方法で探せます。"}}, {"@type": "Question", "name": "レンタルサーバーを使っていれば、点検は事業者に任せてよいですか?", "acceptedAnswer": {"@type": "Answer", "text": "任せきりにはできません。20ヶ条の19条目は、サービス事業者の作業範囲を把握したうえで、足りない対策を自組織で行うよう検討を促しています。CMSの更新、管理画面のパスワード、公開フォルダに置いたファイルは利用者が操作する部分で、分担の細部は契約によって変わります。"}}, {"@type": "Question", "name": "無料診断の点数が低いと、すぐに危険ということですか?", "acceptedAnswer": {"@type": "Answer", "text": "点数だけでは決まりません。先に、重大度が『緊急』『高』の指摘と、その確度を見ます。版の表示などから推した指摘は、管理画面で事実を確かめてから直します。"}}, {"@type": "Question", "name": "管理画面のパスワードは、定期的に変えたほうがよいですか?", "acceptedAnswer": {"@type": "Answer", "text": "定期的な変更より、使い回しをなくすことと多要素認証を優先します。NISTの指針(SP 800-63B-4、2025年8月確定)は、利用者に定期的な変更を求めないよう定め、漏えいの証拠がある場合に変更させるとしています。"}}, {"@type": "Question", "name": "取引先のセキュリティチェックシートに、この点検表で答えられますか?", "acceptedAnswer": {"@type": "Answer", "text": "Webサイトに関する設問には、根拠として使えます。チェックシートが社内の規程や教育まで問う場合、Webサイトの点検はその一部にあたります。点検した日付、項目、結果を残しておくと、回答の裏付けになります。"}}, {"@type": "Question", "name": "取引先など、他社のサイトをこの点検表で調べてもよいですか?", "acceptedAnswer": {"@type": "Answer", "text": "管理者の許可がないサイトは調べないでください。公開ページを読むだけでも相手のログに残り、攻撃の下調べと区別がつきません。取引先の状態を知りたい場合は、点検表を渡して先方に確かめてもらいます。"}}, {"@type": "Question", "name": "点検の結果は、何を記録しておけばよいですか?", "acceptedAnswer": {"@type": "Answer", "text": "日付、項目番号、結果、対応、担当者の5つを1行で残します。前回との差を見れば、更新が止まった時期や設定が変わった時期をたどれます。診断ツールの結果画面は保存期間が限られる場合があるため、必要な部分は社内の記録に写します。"}}]}</script><p>The post <a href="https://slt-inc.jp/article/website-security-check-items/">Webサイトのセキュリティチェック項目30選｜確認方法つき一覧表</a> first appeared on <a href="https://slt-inc.jp">総合デジタルマーケティング企業 エスライン・テクノロジーズ</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
