<?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/security-check/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:05:04 +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>簡易チェックと脆弱性診断の違い&#124;無料ツールでできることと、専門業者が必要な場面</title>
		<link>https://slt-inc.jp/article/vulnerability-assessment-vs-simple-check/</link>
		
		<dc:creator><![CDATA[slt]]></dc:creator>
		<pubDate>Fri, 09 Oct 2026 04:52:00 +0000</pubDate>
				<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[記事]]></category>
		<category><![CDATA[Webサイトセキュリティ]]></category>
		<category><![CDATA[セキュリティチェック]]></category>
		<category><![CDATA[セキュリティ対策]]></category>
		<category><![CDATA[無料ツール]]></category>
		<category><![CDATA[脆弱性]]></category>
		<category><![CDATA[脆弱性診断]]></category>
		<guid isPermaLink="false">https://slt-inc.jp/security/vulnerability-assessment-vs-simple-check/</guid>

					<description><![CDATA[<p>&#31777;&#26131;&#12481;&#12455;&#12483;&#12463;&#12399;&#20844;&#38283;&#12373;&#12428;&#12383;&#35373;&#23450;&#12392;&#29256;&#12434;&#21463;&#21205;&#30340;&#12395;&#30906;&#12363;&#12417;&#12427;&#26908;&#26619;&#12289;<a class="glossaryLink"  aria-describedby="tt"  data-cmtooltip="&#60;div class=glossaryItemBody&#62;&#33030;&#24369;&#24615;&#35386;&#26029;&#12392;&#12399;&#33030;&#24369;&#24615;&#35386;&#26029;&#12399;&#12289;Web&#12469;&#12452;&#12488;&#12420;&#12471;&#12473;&#12486;&#12512;&#12395;&#12354;&#12427;&#33030;&#24369;&#24615;(&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#19978;&#12398;&#24369;&#28857;)&#12434;&#12289;&#25915;&#25731;&#32773;&#12395;&#24746;&#29992;&#12373;&#12428;&#12427;&#21069;&#12395;&#27927;&#12356;&#20986;&#12375;&#12289;&#28145;&#21051;&#24230;&#12392;&#12392;&#12418;&#12395;&#22577;&#21578;&#12377;&#12427;&#26908;&#26619;&#12391;&#12377;&#12290;&#12484;&#12540;&#12523;&#12395;&#12424;&#12427;&#33258;&#21205;&#35386;&#26029;&#12392;&#12289;&#23554;&#38272;&#23478;&#12395;&#12424;&#12427;&#25163;&#21205;&#12398;&#35386;&#26029;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#33030;&#24369;&#24615;&#35386;&#26029;&#12364;&#24517;&#35201;&#12394;&#29702;&#30001;&#33030;&#24369;&#24615;&#12399;&#12289;&#38283;&#30330;&#26178;&#12398;&#20316;&#12426;&#36796;&#12415;&#12398;&#19981;&#20633;&#12289;&#35373;&#23450;&#12398;&#35492;&#12426;&#12289;&#12477;&#12501;&#12488;&#12454;&#12455;&#12450;&#12398;&#26356;&#26032;&#28431;&#12428;&#12363;&#12425;&#29983;&#12414;&#12428;&#12289;&#20844;&#38283;&#24460;&#12418;&#26032;&#12375;&#12367;&#35211;&#12388;&#12363;&#12426;&#12414;&#12377;&#12290;&#35386;&#26029;&#12434;&#12375;&#12390;&#12356;&#12394;&#12356;EC&#12469;&#12452;&#12488;&#12391;&#12289;&#20837;&#21147;&#20516;&#12398;&#20966;&#29702;&#12398;&#19981;&#20633;&#12364;&#27531;&#12387;&#12390;&#12356;&#12427;&#12392;&#12289;&#39015;&#23458;&#24773;&#22577;&#12364;&#22806;&#37096;&#12408;&#27969;&#20986;&#12377;&#12427;&#21487;&#33021;&#24615;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#20491;&#20154;&#24773;&#22577;&#12398;&#28431;&#12360;&#12356;&#12399;&#12289;&#20491;&#20154;&#24773;&#22577;&#20445;&#35703;&#27861;&#12395;&#22522;&#12389;&#12367;&#22577;&#21578;&#12420;&#12289;&#26412;&#20154;&#12408;&#12398;&#36890;&#30693;&#12364;&#24517;&#35201;&#12395;&#12394;&#12427;&#22580;&#21512;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#35386;&#26029;&#12399;&#12289;&#26032;&#35215;&#12398;&#20844;&#38283;&#26178;&#12392;&#12289;&#22823;&#12365;&#12394;&#27231;&#33021;&#36861;&#21152;&#12420;&#27083;&#25104;&#22793;&#26356;&#12398;&#12383;&#12403;&#12395;&#34892;&#12358;&#12398;&#12364;&#22522;&#26412;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;&#33030;&#24369;&#24615;&#35386;&#26029;&#12398;&#31278;&#39006;&#12392;&#25163;&#27861;&#38;lt;table&#38;gt;&#38;lt;thead&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;th&#38;gt;&#31278;&#39006;&#38;lt;/th&#38;gt;&#38;lt;th&#38;gt;&#23550;&#35937;&#38;lt;/th&#38;gt;&#38;lt;th&#38;gt;&#35211;&#12427;&#20869;&#23481;&#38;lt;/th&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/thead&#38;gt;&#38;lt;tbody&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;Web&#12450;&#12503;&#12522;&#12465;&#12540;&#12471;&#12519;&#12531;&#35386;&#26029;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#12469;&#12452;&#12488;&#12420;Web&#12450;&#12503;&#12522;&#26412;&#20307;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#20837;&#21147;&#20516;&#12398;&#20966;&#29702;&#12289;&#35469;&#35388;&#12289;&#12475;&#12483;&#12471;&#12519;&#12531;&#31649;&#29702;&#12289;&#12450;&#12463;&#12475;&#12473;&#21046;&#24481;&#12394;&#12393;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#12503;&#12521;&#12483;&#12488;&#12501;&#12457;&#12540;&#12512;&#35386;&#26029;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;OS&#12289;&#12511;&#12489;&#12523;&#12454;&#12455;&#12450;&#12289;&#12493;&#12483;&#12488;&#12527;&#12540;&#12463;&#27231;&#22120;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#38283;&#12356;&#12390;&#12356;&#12427;&#12509;&#12540;&#12488;&#12289;&#12477;&#12501;&#12488;&#12454;&#12455;&#12450;&#12398;&#29256;&#12289;&#35373;&#23450;&#12398;&#19981;&#20633;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/tbody&#38;gt;&#38;lt;/table&#38;gt;&#38;lt;table&#38;gt;&#38;lt;thead&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;th&#38;gt;&#25163;&#27861;&#38;lt;/th&#38;gt;&#38;lt;th&#38;gt;&#29305;&#24500;&#38;lt;/th&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/thead&#38;gt;&#38;lt;tbody&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#12484;&#12540;&#12523;&#35386;&#26029;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#30701;&#26178;&#38291;&#12391;&#24195;&#12367;&#30906;&#35469;&#12391;&#12365;&#12427;&#12290;&#30011;&#38754;&#12398;&#27969;&#12428;&#12395;&#20381;&#23384;&#12377;&#12427;&#19981;&#20633;&#12399;&#35211;&#12388;&#12369;&#12395;&#12367;&#12356;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#25163;&#21205;&#35386;&#26029;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#23554;&#38272;&#23478;&#12364;&#12289;&#26989;&#21209;&#12525;&#12472;&#12483;&#12463;&#12398;&#19981;&#20633;&#12394;&#12393;&#12418;&#30906;&#35469;&#12377;&#12427;&#12290;&#26178;&#38291;&#12392;&#36027;&#29992;&#12364;&#12363;&#12363;&#12427;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/tbody&#38;gt;&#38;lt;/table&#38;gt;&#12513;&#12540;&#12523;&#35469;&#35388;(SPF&#12289;DMARC)&#12394;&#12393;&#12289;&#12489;&#12513;&#12452;&#12531;&#12398;&#35373;&#23450;&#12418;&#35386;&#26029;&#12398;&#23550;&#35937;&#12395;&#12391;&#12365;&#12414;&#12377;&#12290;&#35386;&#26029;&#12398;&#32771;&#12360;&#26041;&#12399;&#12289;IPA&#12398;&#12300;&#23433;&#20840;&#12394;&#12454;&#12455;&#12502;&#12469;&#12452;&#12488;&#12398;&#20316;&#12426;&#26041;&#12301;&#12420;&#12289;OWASP&#12398;Web Security Testing Guide&#12364;&#21442;&#32771;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#33030;&#24369;&#24615;&#35386;&#26029;&#12398;&#36914;&#12417;&#26041;&#12392;&#20107;&#21069;&#12398;&#30906;&#35469;&#38;lt;ol&#38;gt;&#23550;&#35937;&#12392;&#31684;&#22258;(URL&#12289;&#29872;&#22659;&#12289;&#38500;&#22806;&#12377;&#12427;&#12418;&#12398;)&#12434;&#27770;&#12417;&#12427;&#12290;&#38;lt;br/&#38;gt;&#35386;&#26029;&#12434;&#23455;&#26045;&#12377;&#12427;&#12290;&#38;lt;br/&#38;gt;&#22577;&#21578;&#26360;&#12391;&#12289;&#28145;&#21051;&#24230;&#12289;&#20877;&#29694;&#12398;&#25163;&#38918;&#12289;&#23550;&#31574;&#12434;&#30906;&#35469;&#12377;&#12427;&#12290;&#38;lt;br/&#38;gt;&#20462;&#27491;&#12375;&#12289;&#20877;&#35386;&#26029;&#12391;&#30452;&#12387;&#12383;&#12371;&#12392;&#12434;&#30906;&#12363;&#12417;&#12427;&#12290;&#38;lt;br/&#38;gt;&#38;lt;/ol&#38;gt;&#20381;&#38972;&#12398;&#21069;&#12395;&#12289;&#26356;&#26032;&#28431;&#12428;&#12399;&#33258;&#20998;&#12391;&#30906;&#35469;&#12391;&#12365;&#12414;&#12377;&#12290;WordPress&#12398;&#22580;&#21512;&#12399;&#12289;WP-CLI&#12391;&#26356;&#26032;&#12398;&#23550;&#35937;&#12434;&#19968;&#35239;&#12391;&#12365;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;wp core check-updatewp plugin list --update=availablewp theme list --update=available&#38;lt;/code&#38;gt; URL&#12434;&#20837;&#21147;&#12377;&#12427;&#12384;&#12369;&#12398;&#35386;&#26029;&#12484;&#12540;&#12523;&#12434;&#12289;&#20381;&#38972;&#21069;&#12398;&#30906;&#35469;&#12395;&#20351;&#12358;&#12371;&#12392;&#12418;&#12391;&#12365;&#12414;&#12377;&#12290;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12399;&#12289;&#12381;&#12398;&#19968;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;&#33030;&#24369;&#24615;&#35386;&#26029;&#12434;&#20381;&#38972;&#12377;&#12427;&#12392;&#12365;&#12398;&#27770;&#12417;&#12372;&#12392;&#35386;&#26029;&#12434;&#34892;&#12358;&#29872;&#22659;(&#26412;&#30058;&#12363;&#12289;&#26908;&#35388;&#29872;&#22659;&#12363;)&#12290;&#38;lt;br/&#38;gt;&#35386;&#26029;&#12377;&#12427;&#26399;&#38291;&#12392;&#12289;&#26178;&#38291;&#24111;&#12290;&#38;lt;br/&#38;gt;&#35386;&#26029;&#20803;&#12398;IP&#12450;&#12489;&#12524;&#12473;&#12398;&#35377;&#21487;(WAF&#12394;&#12393;&#12391;&#36974;&#26029;&#12375;&#12394;&#12356;&#12383;&#12417;)&#12290;&#38;lt;br/&#38;gt;&#22577;&#21578;&#26360;&#12398;&#24418;&#24335;&#12392;&#12289;&#22577;&#21578;&#12398;&#26399;&#38480;&#12290;&#38;lt;br/&#38;gt;&#20462;&#27491;&#24460;&#12398;&#20877;&#35386;&#26029;&#12434;&#21547;&#12417;&#12427;&#12363;&#12290;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;&#12424;&#12367;&#12354;&#12427;&#38291;&#36949;&#12356;&#12392;&#27880;&#24847;&#28857;&#35386;&#26029;&#12398;&#32080;&#26524;&#12364;&#12300;&#21839;&#38988;&#12394;&#12375;&#12301;&#12391;&#12418;&#12289;&#23433;&#20840;&#12364;&#20445;&#35388;&#12373;&#12428;&#12383;&#12431;&#12369;&#12391;&#12399;&#12354;&#12426;&#12414;&#12379;&#12435;&#12290;&#35386;&#26029;&#12399;&#12289;&#12381;&#12398;&#26178;&#28857;&#12391;&#35211;&#12388;&#12363;&#12387;&#12383;&#31684;&#22258;&#12398;&#32080;&#26524;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;&#26412;&#30058;&#29872;&#22659;&#12408;&#12398;&#12484;&#12540;&#12523;&#35386;&#26029;&#12399;&#12289;&#12501;&#12457;&#12540;&#12512;&#12398;&#36865;&#20449;&#12391;&#21839;&#12356;&#21512;&#12431;&#12379;&#12398;&#12487;&#12540;&#12479;&#12364;&#20837;&#12427;&#12289;&#36000;&#33655;&#12364;&#12363;&#12363;&#12427;&#12394;&#12393;&#12398;&#24433;&#38911;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#21487;&#33021;&#12394;&#12425;&#26908;&#35388;&#29872;&#22659;&#12391;&#34892;&#12356;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#22577;&#21578;&#12434;&#21463;&#12369;&#12390;&#32066;&#12431;&#12426;&#12395;&#12379;&#12378;&#12289;&#20462;&#27491;&#12392;&#20877;&#35386;&#26029;&#12414;&#12391;&#12434;1&#12388;&#12398;&#24037;&#31243;&#12392;&#12375;&#12390;&#35336;&#30011;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#35386;&#26029;&#12399;&#12289;&#35377;&#21487;&#12434;&#24471;&#12383;&#33258;&#31038;&#12398;&#23550;&#35937;&#12395;&#12384;&#12369;&#34892;&#12356;&#12414;&#12377;&#12290;&#20182;&#31038;&#12398;&#12469;&#12452;&#12488;&#12408;&#28961;&#26029;&#12391;&#34892;&#12387;&#12390;&#12399;&#12356;&#12369;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12391;&#30906;&#35469;&#12377;&#12427;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12399;&#12289;&#22806;&#12363;&#12425;&#35211;&#12360;&#12427;&#31684;&#22258;&#12395;&#38480;&#12387;&#12390;&#12289;&#35373;&#23450;&#12398;&#19981;&#20633;&#12289;&#26356;&#26032;&#28431;&#12428;&#12289;&#20844;&#38283;&#12373;&#12428;&#12390;&#12399;&#12356;&#12369;&#12394;&#12356;&#12501;&#12449;&#12452;&#12523;&#12434;&#12289;&#25915;&#25731;&#12434;&#34892;&#12431;&#12378;&#12395;&#35386;&#26029;&#12375;&#12414;&#12377;&#12290;&#23554;&#38272;&#23478;&#12398;&#35386;&#26029;&#12398;&#20195;&#12431;&#12426;&#12391;&#12399;&#12394;&#12367;&#12289;&#12381;&#12398;&#21069;&#12398;&#31532;&#19968;&#27497;&#12395;&#20351;&#12360;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38306;&#36899;&#29992;&#35486;&#12506;&#12493;&#12488;&#12524;&#12540;&#12471;&#12519;&#12531;&#12486;&#12473;&#12488;&#38;lt;br/&#38;gt;CVE&#38;lt;br/&#38;gt;WAF&#38;lt;br/&#38;gt;XSS(&#12463;&#12525;&#12473;&#12469;&#12452;&#12488;&#12473;&#12463;&#12522;&#12503;&#12486;&#12451;&#12531;&#12464;)&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;&#12469;&#12452;&#12488;&#12398;&#35373;&#23450;&#12434;&#28961;&#26009;&#12391;&#30906;&#35469;&#12377;&#12427;&#12469;&#12452;&#12488;&#12398;URL&#12434;&#20837;&#21147;&#12377;&#12427;&#12384;&#12369;&#12391;&#12289;&#33030;&#24369;&#24615;&#35386;&#26029; &#12394;&#12393;&#12398;&#35373;&#23450;&#29366;&#27841;&#12434;&#35386;&#26029;&#12391;&#12365;&#12414;&#12377;&#12290;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12300;Security Checker X&#12301;&#12399;&#12289;&#30331;&#37682;&#12394;&#12375;&#12391;&#20351;&#12360;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#60;/div&#62;"  href="https://slt-inc.jp/glossary/vulnerability-assessment/"  data-gt-translate-attributes='[{"attribute":"data-cmtooltip", "format":"html"}]'  tabindex='0' role='link'>&#33030;&#24369;&#24615;&#35386;&#26029;</a>&#12399;&#31649;&#29702;&#32773;&#12398;&#35377;&#21487;&#12434;&#24471;&#12390;&#30097;&#20284;&#25915;&#25731;&#12434;&#36865;&#12426;&#12289;&#20837;&#21147;&#12398;&#20966;&#29702;&#12420;&#27177;&#38480;&#12398;&#27424;&#38501;&#12414;&#12391;&#35519;&#12409;&#12427;&#26908;&#26619;&#12391;&#12377;&#12290;&#28961;&#26009;&#12484;&#12540;&#12523;&#12398;&#38480;&#30028;&#12289;&#20381;&#38972;&#12398;&#21028;&#26029;&#22522;&#28310;&#12289;&#31684;&#22258;&#12392;&#20381;&#38972;&#20808;&#12398;&#36984;&#12403;&#26041;&#12434;&#12414;&#12392;&#12417;&#12414;&#12375;&#12383;&#12290;</p>
<p>The post <a href="https://slt-inc.jp/article/vulnerability-assessment-vs-simple-check/">簡易チェックと脆弱性診断の違い|無料ツールでできることと、専門業者が必要な場面</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>簡易チェックは、公開された情報だけを読み、HTTPSや公開ファイル、古いソフトウェアの版など、外から見える不備を数分で見つける検査です。脆弱性診断は、管理者の許可を得て攻撃に近い通信を送り、入力の処理やログイン後の権限、業務の流れの欠陥まで調べます。両者は代わりにならないため、簡易チェックで直せるものを先に直し、範囲を決めてから診断を頼むと、費用をツールの届かない部分に使えます。ログイン、決済、個人情報のどれかを扱うサイトは、専門家の診断を検討してください。</p></div>

<h2>簡易チェックと脆弱性診断の違いは、調べる深さと許可の要否</h2>
<p>簡易チェックは、ブラウザが普通に受け取る応答を読むだけで、攻撃にあたる通信を送りません。脆弱性診断とペネトレーションテストは疑似的な攻撃を送るため、システムの管理者の承諾と、範囲や日時の合意が前提になります。</p>
<p><a href="https://www.meti.go.jp/policy/netsecurity/shinsatouroku/touroku.html">経済産業省の『情報セキュリティサービス基準』</a>(第4.1版)は、<a href="https://slt-inc.jp/glossary/vulnerability-assessment/">脆弱性診断</a>サービスを3つに分けています。Webアプリケーション、プラットフォーム、スマートフォンとタブレットのアプリケーションの診断です。<a href="https://slt-inc.jp/glossary/penetration-test/">ペネトレーションテスト</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>送る通信</td><td>公開ページの取得、DNSの照会、TLSの接続確認だけ</td><td>入力値に細工したリクエストなどの疑似攻撃</td><td>攻撃者と同じ手法による侵入の試み</td></tr>
<tr><td>答える問い</td><td>外から見える設定と版に不備はないか</td><td>どこに脆弱性があるか(網羅性を重視)</td><td>想定した攻撃の目的を達成できるか</td></tr>
<tr><td>調べる範囲</td><td>ログインせずに見える公開範囲</td><td>ログイン後の画面、API、サーバーのうち合意した範囲</td><td>試験の目的に合わせて選んだ範囲</td></tr>
<tr><td>前提</td><td>自社か、管理権限のあるサイト</td><td>管理者の承諾、範囲と日時の合意、契約</td><td>診断と同じ前提に加え、試験の目的と限度の合意</td></tr>
<tr><td>結果の形</td><td>画面にすぐ表示</td><td>報告書、報告会、再診断</td><td>試験の報告書と推奨事項</td></tr>
</tbody></table></div>
<div class="slt-callout is-point"><p class="slt-callout-title">ポイント</p><p>どの検査でも、指摘が出なかったことは安全の証明になりません。IPAの<a href="https://www.ipa.go.jp/security/vuln/websecurity/about.html">『ウェブ健康診断仕様』</a>は、検査パターンを絞った診断なので、脆弱性が見つからなくても安全宣言にはつながらないと明記しています。</p></div>

<h2>無料ツールでできることと、できないこと</h2>
<p>無料ツールは、外形を受動的に確かめるものと、疑似攻撃を送るOSSのスキャナーに分かれ、できる範囲と注意点が大きく違います。どちらを使っても、他人のデータが見える、手順を飛ばせるといった権限や業務の流れの欠陥は見つけられません。</p>
<h3>外から見るだけの簡易チェック</h3>
<p>自社の<a href="https://slt-inc.jp/service/security-checker/">無料のWebサイトのセキュリティチェック(Security Checker X)</a>は、この受動的な型です。公開ページの取得(GET、HEAD、OPTIONS)、DNSの照会、TLSの接続確認だけで、7カテゴリ、90を超える項目を30秒から90秒ほどで確かめます。項目の全体像は<a href="https://slt-inc.jp/article/website-security-check-items/">Webサイトのセキュリティチェック項目30選</a>にまとめています。</p>
<ul>
<li>HTTPSと<a href="https://slt-inc.jp/glossary/ssl-tls-certificate/">SSL/TLS証明書</a>の期限、TLS 1.0やTLS 1.1などの古い通信方式の受け入れ</li>
<li>HSTSやCSPなどの<a href="https://slt-inc.jp/glossary/security-headers/">セキュリティヘッダー</a>と、CookieのSecure、HttpOnly、SameSite属性</li>
<li>.gitや.env、SQLダンプ、<a href="https://slt-inc.jp/glossary/directory-listing/">ディレクトリリスティング</a>など、公開されてはいけないもの</li>
<li>Webサーバー、PHP、WordPress、JavaScriptライブラリの版と、既知の脆弱性(<a href="https://slt-inc.jp/glossary/cve/">CVE</a>)、サポートの終了</li>
<li>SPFとDMARCの設定(詳しくは<a href="https://slt-inc.jp/service/dmarc-spf-dkim-diagnostic-tools/">DMARC、SPF、DKIMのチェッカー</a>で確かめられます)</li>
</ul>
<p>攻撃コードの送信、ログインの試行、入力欄への値の送信、80番と443番以外のポートの確認は行いません。そのため、ログインが必要な領域と、アプリケーション固有の脆弱性は対象外です。WAFなどに遮られて確かめられなかった項目は『検査できなかった項目』として表示し、問題がないとは扱いません。</p>
<h3>疑似攻撃を送るOSSの診断ツール</h3>
<p>ZAPやOpenVASのような無料のOSSは、疑似攻撃を送る能動的なツールです。経済産業省は、基準とあわせて『情報セキュリティサービスにおける技術及び品質確保に資する取組の例示』(以下、取組の例示)を公表しています。この例示にも、Webアプリケーション診断とプラットフォーム診断で使うツールの例として、OWASP ZAPとOpenVASが載っています。</p>
<p>ZAPの公式文書は、能動スキャンを対象への攻撃と位置づけ、自分が所有しないWebアプリケーションに使ってはいけないと明記しています。同じ文書は、アクセス制御の不備のような論理的な脆弱性は自動のスキャンでは見つからないとし、手動のペネトレーションテストの併用を求めています。</p>
<p><a href="https://www.digital.go.jp/resources/standard_guidelines">デジタル庁の『政府情報システムにおける脆弱性診断導入ガイドライン』(DS-221)</a>は、診断の種類の選び方から報告書の要件までを定めた参考文書です。この文書は、プラットフォーム診断をフリーツールや自社製のツールだけで行わないことを要件にしています。無料のOSSは自社の検証環境で傾向をつかむ道具と考え、取引先に示す診断とは分けて扱います。</p>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>能動的なツールを本番環境に向けると、サイトが止まる、意図しないデータが登録される、問い合わせフォームから大量のメールが送られる、といった影響が出ることがあります。使うのは自社の検証環境に限り、本番で使う場合はバックアップと関係者の承諾をそろえてからにしてください。</p></div>
<h3>無料ツールでは見つからない欠陥</h3>
<p>DS-221は、Webアプリケーションの脆弱性を、仕様に起因するもの、実装に起因するもの、ミドルウェア固有のものに分けています。ツールが特に苦手とするのは、次のような欠陥です。</p>
<ul>
<li>他人のデータを読み書きできる、管理者の機能を一般の会員が使える(認可の不備)</li>
<li>パスワードの再設定の悪用や、ID連携の不備による、なりすまし</li>
<li>1回の注文に1回だけのはずの割引を、何度も使える</li>
<li>同時に操作するとデータが食い違う、レースコンディション</li>
</ul>
<p>OWASPの<a href="https://wstg.owasp.org/v4.2/4-Web_Application_Security_Testing/10-Business_Logic_Testing/00-Introduction_to_Business_Logic/">『Web Security Testing Guide』</a>も、業務ロジックの欠陥は脆弱性スキャナーでは検出できず、検査する人の技能と創造性に頼ると述べています。</p>

<h2>ツール診断と手動診断の違い</h2>
<p>ツール診断は、型の決まった不備を短い時間で広く拾い、手動診断は、画面の意味や権限の関係を理解して、ツールが見落とす欠陥を探します。DS-221は、ツールによる自動の診断だけでは不十分で、専門家による手動の診断との併用が不可欠としています。</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>SQLインジェクションや<a href="https://slt-inc.jp/glossary/xss/">XSS</a>など、検査の型が決まった不備。既知の脆弱性を含む版</td><td>認可の不備、業務の流れの欠陥、複数の弱点の組み合わせ</td></tr>
<tr><td>苦手なもの</td><td>仕様に起因する欠陥。制限を回り込まないと届かない不備</td><td>多くの画面を短い時間で一通り確かめること</td></tr>
<tr><td>結果の扱い</td><td>誤検出を含むため、人の精査が要る</td><td>悪用できるかを可能な範囲で実証し、証跡を付ける</td></tr>
<tr><td>向く場面</td><td>変更のたびの確認、範囲の広い定期の検査</td><td>公開の前、認証や決済の追加、重要な機能の変更</td></tr>
</tbody></table></div>
<p>仕様に起因する欠陥と、実装の高度な理解が要る欠陥は、ツールの誤検出を除くだけでなく、診断そのものを人手で行うのがDS-221の要件です。ツールを使う場合も、診断対象の見落としや誤検出が含まれないよう、手動で精査することを求めています。</p>
<div class="slt-callout is-note"><p class="slt-callout-title">補足</p><p>見積もりに『ツール診断』とだけ書かれている時は、ツールの出力を人が精査するか、手動で調べる範囲はどこかを確かめてください。経済産業省の『取組の例示』は、基準に適合する脆弱性診断の結果の扱いとして、ツール出力の分析を含む診断、報告書、報告会を挙げています。</p></div>

<h2>プラットフォーム診断とWebアプリケーション診断の違い</h2>
<p>プラットフォーム診断はサーバーやネットワーク機器のOS、ミドルウェア、開いているポートを調べ、Webアプリケーション診断は画面やAPIの処理を調べます。調べる層が違うため、片方だけを受けても、もう片方の層の弱点は残ります。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 420"><title>診断の種類ごとに調べる層</title><desc>Webサイトを、画面と権限、入力の処理、外から見える設定と版、OSとミドルウェアとポートの4つの層に分け、簡易チェック、Webアプリケーション診断、プラットフォーム診断が主に調べる層を塗りつぶし、一部だけ調べる層を点線で示した図。</desc><rect x="0" y="0" width="800" height="420" fill="#FFFFFF"/><text x="30" y="60" font-size="22" font-weight="bold" fill="#10265A">調べる層</text><text x="505" y="34" font-size="22" text-anchor="middle" fill="#10265A">簡易</text><text x="505" y="62" font-size="22" text-anchor="middle" fill="#10265A">チェック</text><text x="620" y="34" font-size="22" text-anchor="middle" fill="#10265A">Web</text><text x="620" y="62" font-size="22" text-anchor="middle" fill="#10265A">アプリ</text><text x="735" y="34" font-size="22" text-anchor="middle" fill="#10265A">プラット</text><text x="735" y="62" font-size="22" text-anchor="middle" fill="#10265A">フォーム</text><rect x="455" y="76" width="100" height="280" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><rect x="570" y="76" width="100" height="280" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><rect x="685" y="76" width="100" height="280" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><rect x="30" y="80" width="410" height="60" fill="#EEF2F9" stroke="#4A5C82" stroke-width="3"/><text x="46" y="118" font-size="22" fill="#10265A">画面と権限、業務の流れ</text><rect x="30" y="150" width="410" height="60" fill="#EEF2F9" stroke="#4A5C82" stroke-width="3"/><text x="46" y="188" font-size="22" fill="#10265A">入力の処理(SQL、XSSなど)</text><rect x="30" y="220" width="410" height="60" fill="#EEF2F9" stroke="#4A5C82" stroke-width="3"/><text x="46" y="258" font-size="22" fill="#10265A">外から見える設定、版</text><rect x="30" y="290" width="410" height="60" fill="#EEF2F9" stroke="#4A5C82" stroke-width="3"/><text x="46" y="328" font-size="22" fill="#10265A">OS、ミドルウェア、ポート</text><rect x="465" y="228" width="80" height="44" fill="#10265A"/><rect x="580" y="88" width="80" height="44" fill="#10265A"/><rect x="580" y="158" width="80" height="44" fill="#10265A"/><rect x="580" y="228" width="80" height="44" fill="#FFFFFF" stroke="#10265A" stroke-width="3" stroke-dasharray="8 6"/><rect x="695" y="228" width="80" height="44" fill="#10265A"/><rect x="695" y="298" width="80" height="44" fill="#10265A"/><rect x="30" y="376" width="40" height="28" fill="#10265A"/><text x="82" y="398" font-size="22" fill="#10265A">主に調べる</text><rect x="260" y="376" width="40" height="28" fill="#FFFFFF" stroke="#10265A" stroke-width="3" stroke-dasharray="8 6"/><text x="312" y="398" font-size="22" fill="#10265A">一部を調べる</text></svg><figcaption>図1 診断の種類ごとに主に調べる層。簡易チェックは外から見える設定と版だけを調べます。Webアプリケーション診断は画面と権限、入力の処理を、プラットフォーム診断は外から見える設定とOS、ミドルウェア、ポートを調べます。1種類で全ての層は覆えません。</figcaption></figure>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>比べる点</th><th>プラットフォーム診断</th><th>Webアプリケーション診断</th></tr></thead><tbody>
<tr><td>対象</td><td>ファイアウォール、ロードバランサー、サーバーのOSとミドルウェア、VPN</td><td>Webアプリケーション、Web API、アプリケーションのミドルウェア</td></tr>
<tr><td>主に見つかるもの</td><td>不要なポートの開放、古いソフトウェア、初期パスワードなどの設定の不備、弱い暗号</td><td>SQLインジェクション、XSS、セッション管理の不備、認可の不備</td></tr>
<tr><td>主な方法</td><td>自動のツールが中心で、誤検出を人が精査する</td><td>ツールと手動の併用</td></tr>
<tr><td>量を数える単位</td><td>診断するIPアドレスの数</td><td>画面やAPIなどのリクエストの数</td></tr>
<tr><td>初めて行うなら</td><td>インターネットから届く外部診断を優先</td><td>インターネットから届く箇所を優先</td></tr>
</tbody></table></div>
<p>表の内容の出典は、DS-221の種別の説明です。レンタルサーバーやSaaSでサイトを動かしている場合、OSやミドルウェアの管理は提供元にあります。DS-221はインフラの提供者が禁止している診断項目を避けるよう求めているので、プラットフォーム診断を頼む前に、提供元の規約と申請の手続きを確かめます。</p>
<p>スマートフォンアプリを提供しているなら、アプリ本体と、アプリとサーバーの間の通信を調べるスマートフォンアプリ診断も対象になります。</p>

<h2>自社でできることと、専門家に頼む場面の判断基準</h2>
<p>判断の分かれ目は、ログインした後の機能と、守るべき情報があるかどうかです。上の行から順に確かめ、『はい』になった行の対応をとります。全て『いいえ』なら、下の『自社で今日できること』と定期の簡易チェックを続けます。</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>診断より先に、被害の調査(デジタルフォレンジック)と封じ込めを専門家に相談する</td><td>次の行へ</td></tr>
<tr><td>会員登録、ログイン、決済、個人情報の入力のどれかがある</td><td>Webアプリケーション診断を検討する</td><td>次の行へ</td></tr>
<tr><td>自社サイトでクレジットカード決済を受け付けている</td><td>クレジットカードのガイドラインが求める脆弱性対策を確かめ、定期の診断を計画する</td><td>次の行へ</td></tr>
<tr><td>取引先、監査、入札で、診断の報告書を求められている</td><td>求められる範囲、基準、提出の期限を確かめて依頼する</td><td>次の行へ</td></tr>
<tr><td>公開の前、または入力フォーム、API、認証、ファイルのアップロードを追加、変更した</td><td>追加、変更した部分の診断を検討する</td><td>次の行へ</td></tr>
<tr><td>VPSやクラウドの仮想サーバーで、OSとミドルウェアを自社で管理している</td><td>プラットフォーム診断を検討する</td><td>次の行へ</td></tr>
<tr><td>簡易チェックで『緊急』か『高』が出たが、原因や影響の範囲が分からない</td><td>指摘の根拠を添えて、専門家に相談する</td><td>自社で直し、もう一度チェックする</td></tr>
</tbody></table></div>
<h3>自社で今日できること</h3>
<ul class="slt-check">
<li>自社サイトを<a href="https://slt-inc.jp/service/security-checker/">無料の簡易チェック</a>にかけ、『緊急』と『高』の指摘から直して、もう一度確かめる</li>
<li>ドメイン、サブドメイン、サーバー、CMS、プラグイン、外部サービスの一覧を作る(範囲を決める時の台帳になる)</li>
<li>CMSの本体、プラグイン、テーマを更新し、使っていないものを削除する(手順は<a href="https://slt-inc.jp/article/wordpress-vulnerability-check/">WordPressの脆弱性を確認する方法</a>)</li>
<li>.gitや.env、バックアップファイルが公開されていないか確かめる(<a href="https://slt-inc.jp/article/git-env-file-exposure/">.gitや.envの公開を確認する方法</a>)</li>
<li>HTTPSとセキュリティヘッダーを整える(<a href="https://slt-inc.jp/article/security-headers-setup/">HSTSやCSPの設定方法</a>)</li>
<li>管理画面に、接続元の制限か多要素認証を入れる</li>
<li>脆弱性の連絡窓口を、security.txtで公開する</li>
<li>制作会社や保守会社との契約で、脆弱性を直す責任と費用の分担を確かめる</li>
</ul>
<p>security.txtは、外部の人が見つけた脆弱性の連絡先を示すファイルで、RFC 9116が形式を定めています。HTTPSで <code>/.well-known/security.txt</code> に置き、ContactとExpiresが必須の項目です。Expiresは、1年より先の日付にしないことが推奨されています。</p>
<pre class="slt-code"><code># 例: https://example.com/.well-known/security.txt に置く内容
Contact: mailto:security@example.com
Expires: 2027-09-30T23:59:59+09:00
Preferred-Languages: ja, en</code></pre>
<div class="slt-callout is-note"><p class="slt-callout-title">補足</p><p>簡易チェックの指摘には確度があります。『推定』は版の表記などから推定したもので、ディストリビューションが修正を取り込み、実際には対策済みのこともあります。サーバーの管理者にパッケージの更新状況を確かめてから判断してください。</p></div>

<h2>簡易チェックと診断を順番に使う運用の流れと時期</h2>
<p>まず簡易チェックで外から見える不備を直し、範囲を決めて専門家の診断を受け、報告書で決めた順番で直して再診断で閉じます。その後は、設定や部品を変えるたびと定期的に、簡易チェックへ戻ります。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 400"><title>簡易チェックと診断を順番に使う流れ</title><desc>1 簡易チェック、2 自社で直す、3 範囲を決める、4 専門家の診断、5 直す順番を決める、6 修正と再診断の6段階を矢印でつなぎ、6から1へ戻る矢印で、変更のたびと定期的に繰り返すことを示した図。1と2は自社で行い、3から6は専門家が関わる。</desc><defs><marker id="slt-arrow-flow-24878" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="5" markerHeight="5" 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="30" y="30" width="210" height="96" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="135" y="70" font-size="22" font-weight="bold" text-anchor="middle" fill="#10265A">1 簡易チェック</text><text x="135" y="104" font-size="22" text-anchor="middle" fill="#10265A">外から見える不備</text><rect x="295" y="30" width="210" height="96" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="400" y="70" font-size="22" font-weight="bold" text-anchor="middle" fill="#10265A">2 自社で直す</text><text x="400" y="104" font-size="22" text-anchor="middle" fill="#10265A">設定と更新</text><rect x="560" y="30" width="210" height="96" rx="10" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3"/><text x="665" y="70" font-size="22" font-weight="bold" text-anchor="middle" fill="#10265A">3 範囲を決める</text><text x="665" y="104" font-size="22" text-anchor="middle" fill="#10265A">対象と深さ</text><rect x="560" y="230" width="210" height="96" rx="10" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3"/><text x="665" y="270" font-size="22" font-weight="bold" text-anchor="middle" fill="#10265A">4 専門家の診断</text><text x="665" y="304" font-size="22" text-anchor="middle" fill="#10265A">ツールと手動</text><rect x="295" y="230" width="210" height="96" rx="10" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3"/><text x="400" y="270" font-size="22" font-weight="bold" text-anchor="middle" fill="#10265A">5 直す順番</text><text x="400" y="304" font-size="22" text-anchor="middle" fill="#10265A">報告書で決める</text><rect x="30" y="230" width="210" height="96" rx="10" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3"/><text x="135" y="270" font-size="22" font-weight="bold" text-anchor="middle" fill="#10265A">6 修正と再診断</text><text x="135" y="304" font-size="22" text-anchor="middle" fill="#10265A">直ったか確かめる</text><line x1="242" y1="78" x2="287" y2="78" stroke="#10265A" stroke-width="3" marker-end="url(#slt-arrow-flow-24878)"/><line x1="507" y1="78" x2="552" y2="78" stroke="#10265A" stroke-width="3" marker-end="url(#slt-arrow-flow-24878)"/><line x1="665" y1="128" x2="665" y2="222" stroke="#10265A" stroke-width="3" marker-end="url(#slt-arrow-flow-24878)"/><line x1="558" y1="278" x2="513" y2="278" stroke="#10265A" stroke-width="3" marker-end="url(#slt-arrow-flow-24878)"/><line x1="293" y1="278" x2="248" y2="278" stroke="#10265A" stroke-width="3" marker-end="url(#slt-arrow-flow-24878)"/><line x1="135" y1="228" x2="135" y2="134" stroke="#10265A" stroke-width="3" marker-end="url(#slt-arrow-flow-24878)"/><text x="155" y="188" font-size="22" fill="#10265A">変更のたびと定期的に、1へ戻る</text><rect x="30" y="350" width="40" height="28" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="82" y="372" font-size="22" fill="#10265A">自社で行う</text><rect x="300" y="350" width="40" height="28" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3"/><text x="352" y="372" font-size="22" fill="#10265A">専門家が関わる</text></svg><figcaption>図2 簡易チェックと診断を組み合わせる流れ。1と2は自社で行い、3から6は専門家が関わります。6の再診断で閉じた後は、変更のたびと定期的に1へ戻ります。</figcaption></figure>
<ol class="slt-steps">
<li><strong>簡易チェックで外形を確かめる</strong>受動的なチェックで、証明書、ヘッダー、公開ファイル、古い版を確かめます。</li>
<li><strong>自社で直せるものを直す</strong>設定の追加と更新で直る指摘を片付け、もう一度チェックして消えたことを確かめます。</li>
<li><strong>範囲を決める</strong>台帳から対象を選び、深さと環境を決めます。決め方は次の節で説明します。</li>
<li><strong>専門家の診断を受ける</strong>ツールと手動を組み合わせ、ログイン後の権限や業務の流れまで調べてもらいます。</li>
<li><strong>報告書で直す順番を決める</strong>深刻度を自社の環境で読み替え、指摘ごとに担当と期限を決めます。</li>
<li><strong>直して再診断で閉じる</strong>直した指摘を再診断で確かめ、受け取った報告書を版ごとに保管します。</li>
</ol>
<p>この順番にするのは、簡易チェックで分かる設定の不備を残したまま診断すると、有償の時間と報告書がその指摘に割かれるためです。先に片付けておけば、診断の時間を、ツールの届かない権限や業務の流れの検査に充てられます。</p>
<h3>診断を行う時期と契機</h3>
<p>DS-221は、新規の構築や機能の追加で行う『構築時診断』と、点検や監査として行う『定期診断』を分けています。Webアプリケーションで診断が望ましい変更として挙げるのは、入力の処理、動的な画面の生成、認証やファイルのアップロードなどの追加や変更と、開発会社の交代です。</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>行う</td><td>行う</td></tr>
<tr><td>入力フォーム、API、認証、ファイルのアップロードの追加や変更</td><td>行う</td><td>変更した部分を診断する</td></tr>
<tr><td>開発や保守を担当する会社の変更</td><td>行う</td><td>診断を検討する</td></tr>
<tr><td>CMS、プラグイン、サーバーのソフトウェアの更新</td><td>更新の後に行う</td><td>構成が変わる更新なら検討する</td></tr>
<tr><td>使っている部品に重大な脆弱性が公表された</td><td>更新の後に版を確かめる</td><td>影響の範囲が分からなければ相談する</td></tr>
<tr><td>定期</td><td>社内で決めた頻度(毎月など)</td><td>契約、業界の基準、社内規程で決めた周期</td></tr>
</tbody></table></div>
<p>定期診断を同じ条件で繰り返すと、初回の後は脆弱性が検出されにくくなります。そのためDS-221は、範囲、事業者や担当者、ツールや手法を変えることを勧めています。周期の数字は示さず、各機関の自己点検や監査の計画に沿って行うものとしています。</p>
<p>クレジットカード決済を扱うECサイトには、より具体的な目安があります。<a href="https://www.meti.go.jp/press/2023/03/20240315002/20240315002.html">『クレジットカード・セキュリティガイドライン』</a>は、割賦販売法の義務の実務上の指針とされています。2025年4月からは、全てのEC加盟店に、チェックリストに記載した脆弱性対策などの実施を求めています。</p>
<p>クレジット取引セキュリティ対策協議会の導入ガイド(2.1版、2026年3月)は、その対策の1つに『脆弱性診断又はペネトレーションテストの定期実施』を挙げています。</p>

<h2>診断の範囲の決め方</h2>
<p>範囲は、インターネットから届く場所と、変更した場所から先に決め、同じ作りの画面は代表に絞ります。対象の量、つまりIPアドレスの数や、画面とリクエストの数が、見積もりと日数を左右します。</p>
<ol class="slt-steps">
<li><strong>台帳から対象を洗い出す</strong>ドメイン、IPアドレス、画面、API、外部との連携を一覧にします。DS-221は、台帳の抜け漏れを防ぐ手段に、聞き取りのほか、OSINTやASM(Attack Surface Management)のサービスを挙げています。</li>
<li><strong>優先する場所を決める</strong>初めてなら、インターネットから届く箇所を優先します。個人情報、決済、管理機能に触れる画面と、前回の診断の後に変えた画面を先に入れます。</li>
<li><strong>画面を機能の種類で選ぶ</strong>IPAの『ウェブ健康診断仕様』は、ログイン、パスワード変更、入力内容確認、DB更新、メール送信、認可制御のある画面などの種類を定め、その種類から診断する画面を選ぶ方式です。同じ作りの画面が複数あれば代表の1画面に絞る方針も、DS-221が例に挙げています。</li>
<li><strong>深さと基準を決める</strong>どの基準で調べるかを、事業者に示してもらいます。経済産業省の『取組の例示』は、Webアプリケーション診断の基準の例に、OWASPのASVSのレベル1以上と、IPAの『ウェブ健康診断仕様』などを挙げています。</li>
<li><strong>環境と権限を決める</strong>本番か、本番と同じ構成の検証環境かを決め、権限ごとにテスト用のアカウントを用意します。DS-221は、WAFやIPSが脆弱性の存在を隠すおそれがあるとして、診断の間は無効にすることを推奨しています。</li>
</ol>
<p>DS-221は、政府情報システムの定期診断を調達する時に、対象の数の上限を決めておくよう勧めています。目安は、プラットフォーム診断で10から30のIPアドレス、Webアプリケーション診断で50から100のリクエストです。民間のサイトでも、最初の見積もりで量の感覚をつかむ参考になる数字です。</p>
<p>見積もりを頼む時は、次のような範囲の定義を添えると、事業者ごとの前提がそろいます。</p>
<pre class="slt-code"><code>【診断の範囲の例(見積もりの依頼に添える)】
目的: 会員機能の公開前の確認。取引先へ報告書を提出する
種別: Webアプリケーション診断(ツールと手動の併用)
対象: https://www.example.com/member/ 以下の画面とAPI(一覧は別紙)
権限: 一般会員、管理者(権限ごとにテスト用アカウントを2つ用意)
対象外: 決済代行会社の画面、外部のメール配信サービス
環境: 検証環境(本番と同じ構成)。WAFは診断の間だけ無効にする
日時: 平日22時から翌6時。中止の連絡先: 運用担当(氏名、電話番号)
成果物: 報告書(PDF)、報告会、再診断1回(報告書の受領から1か月以内)</code></pre>

<h2>依頼先の選び方と、情報セキュリティサービス基準の審査登録</h2>
<p>依頼先の最初のふるいは、経済産業省の『情報セキュリティサービス基準』に適合し、IPAのリストに載っているかどうかです。そのうえで、手動で調べる範囲、報告書の中身、再診断の扱いを、見積もりの段階で確かめます。</p>
<p>この制度では、サービスが基準の技術要件と品質管理要件を満たすかを審査登録機関が審査し、IPAが<a href="https://www.ipa.go.jp/security/service_list.html">情報セキュリティサービス基準適合サービスリスト</a>として公開します。審査登録機関は日本セキュリティ監査協会(JASA)で、リストの公開は2018年6月に始まりました。基準の最新版は第4.1版で、2025年3月31日に公表、4月1日に施行されています。</p>
<p>リストに載る脆弱性診断サービスは、資格や実績のある責任者がいて、品質を管理する仕組みがあることを、第三者が審査したサービスです。自社で事業者の技術力を見極められない時ほど、この審査が判断の土台になります。</p>
<p>技術要件では、技術責任者を置き、要件ごとの人数を示します。技術責任者の要件は、資格(例として情報処理安全確保支援士)、専門家コミュニティでの講師やリーダーの経験、過去3年間で5件以上の実績、指定の研修の修了のいずれかです。品質管理要件では、品質管理の担当者の割り当てと、提供の過程と成果物を管理するマニュアルの整備が求められます。</p>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>リストに載っていることは、IPAによる保証ではありません。IPAは、適合の審査と判定に関与しておらず、掲載にあたって再確認もしていないと明記しています。リストは候補を絞る道具として使い、最後は見積もりと報告書の見本で判断してください。</p></div>
<p>見積もりの段階では、次の点を確かめます。</p>
<ul class="slt-check">
<li>依頼したい区分(Webアプリケーション診断、プラットフォーム診断など)で、基準適合サービスリストに載っているか</li>
<li>参照する基準(OWASPのASVS、IPAの『ウェブ健康診断仕様』など)と、手動で調べる範囲が書かれているか</li>
<li>ツールの出力を人が精査し、悪用できるかを可能な範囲で確かめるか</li>
<li>報告書の見本に、脆弱性の概要、深刻度とその根拠、影響、対策、検出したパラメータが載っているか</li>
<li>報告会があり、検査した人が質問に答えるか</li>
<li>再診断が含まれるか。回数と、報告書の受領から何日以内かが決まっているか</li>
<li>重大な脆弱性を見つけた時の速報と、障害が起きた時の中止の手順があるか</li>
<li>検査で得た情報の管理と、診断後の削除の方法が契約に書かれているか</li>
</ul>
<p>DS-221は政府情報システム向けの参考文書ですが、報告書の納品後、少なくとも1か月の間に1回以上の再診断を行えることを、調達の必須要件にしています。民間でも、見積もりを比べる時の物差しにできます。</p>
<p>範囲の整理や、見積もりの比べ方に迷う時は、当社の<a href="https://slt-inc.jp/inquiry/">診断や対策のご相談窓口</a>でもお受けしています。</p>

<h2>診断の前に準備すること</h2>
<p>準備の中心は、診断で起きうる影響を先に潰すことです。サイトが止まる、データが残る、メールが大量に送られる、監視のアラートが鳴るといった影響を、承諾、バックアップ、連絡で防ぎます。</p>
<p>DS-221は、診断に伴う主なリスクを7つ挙げています。通信の帯域の圧迫、サービスの停止、疑似攻撃の文字列を含むデータの残存、大量のメールの送信、データの破損や損失、個人情報や機密情報の意図しない閲覧、監視のアラートの発生です。</p>
<ol class="slt-steps">
<li><strong>承諾を書面でそろえる</strong>システムの責任者に加え、開発会社、運用会社、サーバーやクラウドの提供者の承諾をとります。提供者が禁止している診断項目は、範囲から外します。</li>
<li><strong>環境と時間帯を決める</strong>検証環境で行うか、本番で行うならバックアップをとり、休日、夜間、メンテナンスの時間帯を選びます。</li>
<li><strong>テスト用のアカウントとデータを用意する</strong>権限ごとにアカウントを作り、消してよいテスト用のデータを入れておきます。</li>
<li><strong>外への送信を止める</strong>問い合わせフォームの通知先をテスト用に変え、決済はテストモードにして、実在の人にメールや請求が届かないようにします。</li>
<li><strong>監視と窓口に知らせる</strong>監視の担当者と問い合わせ窓口に、診断の日時と診断元のIPアドレスを伝え、アラートを攻撃と取り違えないようにします。</li>
<li><strong>中止の手順を決める</strong>異常が起きた時に誰が止め、誰に連絡するかを決め、事業者と共有します。</li>
<li><strong>診断の後に片付ける</strong>残ったテスト用のデータとアカウントを削除し、無効にしたWAFなどの設定を元に戻します。</li>
</ol>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>共用のレンタルサーバーでは、診断でサーバーが止まると、同じサーバーにある他社のサイトまで止まるおそれがあります。IPAの『ウェブ健康診断仕様』も、インフラを共有する別のサイトに影響が及ぶ可能性を挙げ、サーバーやデータセンターの管理者の許可を事前に得るよう求めています。</p></div>

<h2>報告書の読み方と、直す順番</h2>
<p>報告書は、深刻度の数字を並べるだけでなく、自社の環境で読み替えて直す順番を決めます。DS-221も、CVSSの基本値は脆弱性の技術的な特性を示すもので、それだけで対応の優先度を決めるべきではないとしています。</p>
<p>深刻度には、<a href="https://www.ipa.go.jp/security/vuln/scap/cvssv3.html">CVSS</a>の基本値(0.0から10.0)がよく使われます。IPAの解説では、9.0以上が緊急、7.0から8.9が重要、4.0から6.9が警告、0.1から3.9が注意です。事業者が独自の基準で評価している場合も、DS-221はCVSSの基本評価基準と同等に扱うよう勧めています。</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>国内外で悪用が観測されている</td><td>悪用の報告がない</td></tr>
<tr><td>攻撃の条件</td><td>認証なしで、攻撃者が直接攻撃できる</td><td>罠のリンクを踏ませるなど、利用者の関与が要る</td></tr>
<tr><td>届く情報</td><td>個人情報、決済、管理機能に届く</td><td>公開済みの情報にしか届かない</td></tr>
<tr><td>CVSSの深刻度</td><td>緊急、重要</td><td>注意</td></tr>
</tbody></table></div>
<p>DS-221は、悪用する攻撃がすでに観測されている脆弱性には、対応の基準にかかわらず迅速に対応するとしています。IPAの『ウェブ健康診断仕様』は、利用者の関与がなくても攻撃者が直接攻撃でき、大量の情報漏えいや改ざんにつながるものを危険度『高』としています。</p>
<p>直し方は、原因をなくす根本的な対策と、影響を減らす保険的な対策に分けて決めます。IPAの『安全なウェブサイトの作り方』も、この2つを分けて示しています。根本的な対策に時間がかかる時は、<a href="https://slt-inc.jp/glossary/waf/">WAF</a>の設定などで当面をしのぎ、期限を決めて本来の修正を行います。</p>
<div class="slt-callout is-point"><p class="slt-callout-title">ポイント</p><p>報告書を受け取ったら、指摘ごとに担当、期限、直し方(根本か暫定か)、再診断の要否を1枚の表にまとめます。誤検出と思う指摘は、検出した時の入力値と応答を事業者に示してもらい、根拠で判断します。</p></div>

<h2>診断の費用は何で決まるか</h2>
<p>診断の費用は、対象の量、調べる深さ、診断の条件、報告と再診断の範囲の4つで決まります。金額を比べる前に、範囲と深さをそろえた見積もりかどうかを確かめてください。</p>
<ul>
<li><strong>対象の量</strong>: プラットフォーム診断はIPアドレスの数、Webアプリケーション診断は画面やAPIなどのリクエストの数で変わります(DS-221)。</li>
<li><strong>調べる深さ</strong>: 手動で調べる割合、権限の種類の数、仕様に起因する欠陥まで調べるかで変わります。</li>
<li><strong>診断の条件</strong>: 夜間や休日の作業、通信の帯域の制限、現地での内部診断などです。DS-221は、現地での診断に追加の費用が生じることがあるとしています。</li>
<li><strong>報告と再診断</strong>: 報告会の有無、再診断の回数と期限、経営層向けの要約の有無で変わります。</li>
</ul>
<p>費用を抑える近道は、範囲を削ることより、診断の前に直せるものを直しておくことです。構築時の診断は追加や変更した部分に絞る、同じ作りの画面は代表に絞る、といった量の調整も事業者と相談できます。見積もりを比べる時は、ツールの出力を人が分析する作業が含まれているかも確かめます。</p>

<h2>許可のない診断は不正アクセス禁止法に触れるおそれがある</h2>
<p>他者のサイトに、管理者の承諾なく脆弱性を突く通信を送ると、<a href="https://www.soumu.go.jp/main_sosiki/cybersecurity/kokumin/basic/legal/09/">不正アクセス禁止法</a>の『不正アクセス行為』にあたるおそれがあります。自社のサイトでも、サーバーを他社が管理している場合は、その管理者の許可を事前に得ます。</p>
<p>法律は、他人のIDやパスワードを入力する行為(第2条第4項第1号)を不正アクセス行為としています。アクセス制御の制限を免れる情報や指令を入力し、本来は使えない機能を使える状態にする行為(同第2号、第3号)も同じで、いわゆるセキュリティホールを突く行為です。</p>
<p>アクセス管理者本人と、その承諾を得た人の行為は除かれ、警察庁の解説は、その理由をセキュリティチェックのような正当な利用があるためと説明しています。違反した場合の罰則は、3年以下の拘禁刑または100万円以下の罰金です(第11条)。2025年6月1日に刑法などの改正にあわせて『懲役』が『拘禁刑』に改められたため、官公庁の解説には改正前の表記が残っているものがあります。</p>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>取引先や競合のサイトを、念のためにと診断ツールにかけないでください。受動的な簡易チェックでも、アクセスは相手のサーバーのログに残り、不審なアクセスとして扱われることがあります。</p></div>

<h2>よくある質問</h2>
<div class="slt-faq"><h3>無料ツールの結果を、取引先に出す診断の報告書の代わりにできますか？</h3><p>報告書の提出を求められている場合は、代わりになりません。簡易チェックの結果は、調べた範囲と方法が限られ、手動の検査や再現の記録を含まないためです。依頼の前に、取引先が求める範囲、基準、提出の期限を確かめてください。</p></div>
<div class="slt-faq"><h3>WAFを導入していれば、脆弱性診断は要りませんか？</h3><p>いいえ、WAFがあっても診断は必要です。WAFは攻撃の通信を遮って影響を減らす保険的な対策で、脆弱性そのものは残ります。DS-221も、WAFやIPSが脆弱性の存在を隠すおそれがあるとして、診断の間は無効にすることを推奨しています。</p></div>
<div class="slt-faq"><h3>レンタルサーバーやクラウドのサイトでも、診断を依頼できますか？</h3><p>依頼はできますが、先に提供元の規約を確かめてください。共用サーバーやクラウドでは、提供元が診断の事前申請を求めたり、一部の診断を禁止したりしていることがあります。DS-221も、インフラの提供者が禁止している診断項目は避けるよう求めています。</p></div>
<div class="slt-faq"><h3>脆弱性診断とペネトレーションテストは、どちらを先に行いますか？</h3><p>先に脆弱性診断で弱点を網羅的に洗い出し、直したうえでペネトレーションテストを検討する順が組み立てやすいです。経済産業省の基準は、ペネトレーションテストを、脆弱性診断の定義を満たすサービスのうち、攻撃の目的を達成できるかを試験するものと位置づけています。網羅性を重視する診断と、特定の攻撃の成否を確かめる試験は、目的が違います。</p></div>
<div class="slt-faq"><h3>診断の報告書は、いつまで有効ですか？</h3><p>報告書が示すのは診断した時点と範囲での結果なので、時間がたつほど現状とずれていきます。新しい脆弱性や攻撃の手法は日々公表され、サイトを変えれば前提も変わります。変更のたびに簡易チェックで確かめ、大きな変更や定期の時期に診断を受け直してください。</p></div>
<div class="slt-faq"><h3>『セキュリティ診断』と『脆弱性診断』は同じものですか？</h3><p>呼び方は事業者によって違い、名前だけでは中身が分かりません。経済産業省の基準は『脆弱性診断サービス』の名で、Webアプリケーション、プラットフォーム、スマートフォンアプリの診断を定めています。見積もりでは名前ではなく、対象の区分、ツールと手動の割合、参照する基準を確かめてください。</p></div>
<div class="slt-faq"><h3>他社のサイトで脆弱性らしきものに気付いたら、どうすればよいですか？</h3><p>それ以上は調べず、<a href="https://www.ipa.go.jp/security/todokede/vuln/uketsuke.html">IPAの脆弱性関連情報の届出窓口</a>に届け出てください。IPAは、ウェブサイトの届出で必要以上に調査すると、運営者とのトラブルや不正アクセス禁止法などへの抵触につながる可能性があると注意を促しています。届出は、ウェブフォームか電子メールで受け付けています。</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/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/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/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>
</div>
<div class="slt-cta"><p class="slt-cta-title">まずは外から見える不備を、無料で確かめる</p><p>URLを入力するだけで、証明書、セキュリティヘッダー、公開ファイル、古いソフトウェアの版を、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": "報告書の提出を求められている場合は、代わりになりません。簡易チェックの結果は、調べた範囲と方法が限られ、手動の検査や再現の記録を含まないためです。依頼の前に、取引先が求める範囲、基準、提出の期限を確かめてください。"}}, {"@type": "Question", "name": "WAFを導入していれば、脆弱性診断は要りませんか？", "acceptedAnswer": {"@type": "Answer", "text": "いいえ、WAFがあっても診断は必要です。WAFは攻撃の通信を遮って影響を減らす保険的な対策で、脆弱性そのものは残ります。DS-221も、WAFやIPSが脆弱性の存在を隠すおそれがあるとして、診断の間は無効にすることを推奨しています。"}}, {"@type": "Question", "name": "レンタルサーバーやクラウドのサイトでも、診断を依頼できますか？", "acceptedAnswer": {"@type": "Answer", "text": "依頼はできますが、先に提供元の規約を確かめてください。共用サーバーやクラウドでは、提供元が診断の事前申請を求めたり、一部の診断を禁止したりしていることがあります。DS-221も、インフラの提供者が禁止している診断項目は避けるよう求めています。"}}, {"@type": "Question", "name": "脆弱性診断とペネトレーションテストは、どちらを先に行いますか？", "acceptedAnswer": {"@type": "Answer", "text": "先に脆弱性診断で弱点を網羅的に洗い出し、直したうえでペネトレーションテストを検討する順が組み立てやすいです。経済産業省の基準は、ペネトレーションテストを、脆弱性診断の定義を満たすサービスのうち、攻撃の目的を達成できるかを試験するものと位置づけています。網羅性を重視する診断と、特定の攻撃の成否を確かめる試験は、目的が違います。"}}, {"@type": "Question", "name": "診断の報告書は、いつまで有効ですか？", "acceptedAnswer": {"@type": "Answer", "text": "報告書が示すのは診断した時点と範囲での結果なので、時間がたつほど現状とずれていきます。新しい脆弱性や攻撃の手法は日々公表され、サイトを変えれば前提も変わります。変更のたびに簡易チェックで確かめ、大きな変更や定期の時期に診断を受け直してください。"}}, {"@type": "Question", "name": "『セキュリティ診断』と『脆弱性診断』は同じものですか？", "acceptedAnswer": {"@type": "Answer", "text": "呼び方は事業者によって違い、名前だけでは中身が分かりません。経済産業省の基準は『脆弱性診断サービス』の名で、Webアプリケーション、プラットフォーム、スマートフォンアプリの診断を定めています。見積もりでは名前ではなく、対象の区分、ツールと手動の割合、参照する基準を確かめてください。"}}, {"@type": "Question", "name": "他社のサイトで脆弱性らしきものに気付いたら、どうすればよいですか？", "acceptedAnswer": {"@type": "Answer", "text": "それ以上は調べず、IPAの脆弱性関連情報の届出窓口に届け出てください。IPAは、ウェブサイトの届出で必要以上に調査すると、運営者とのトラブルや不正アクセス禁止法などへの抵触につながる可能性があると注意を促しています。届出は、ウェブフォームか電子メールで受け付けています。"}}]}</script><p>The post <a href="https://slt-inc.jp/article/vulnerability-assessment-vs-simple-check/">簡易チェックと脆弱性診断の違い|無料ツールでできることと、専門業者が必要な場面</a> first appeared on <a href="https://slt-inc.jp">総合デジタルマーケティング企業 エスライン・テクノロジーズ</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPressの脆弱性を確認する方法&#124;本体・プラグインの更新と対処の手順</title>
		<link>https://slt-inc.jp/article/wordpress-vulnerability-check/</link>
		
		<dc:creator><![CDATA[slt]]></dc:creator>
		<pubDate>Tue, 06 Oct 2026 02:18:00 +0000</pubDate>
				<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[記事]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[セキュリティチェック]]></category>
		<category><![CDATA[セキュリティ対策]]></category>
		<category><![CDATA[無料ツール]]></category>
		<category><![CDATA[脆弱性]]></category>
		<guid isPermaLink="false">https://slt-inc.jp/security/wordpress-vulnerability-check/</guid>

					<description><![CDATA[<p>WordPress&#x306E;&#x672C;&#x4F53;&#x3001;&#x30D7;&#x30E9;&#x30B0;&#x30A4;&#x30F3;&#x3001;&#x30C6;&#x30FC;&#x30DE;&#x306E;&#x8106;&#x5F31;&#x6027;&#x3092;&#x78BA;&#x8A8D;&#x3059;&#x308B;&#x624B;&#x9806;&#x3002;&#x7BA1;&#x7406;&#x753B;&#x9762;&#x3068;WP-CLI&#x3067;&#x7248;&#x3092;&#x6D17;&#x3044;&#x51FA;&#x3057;&#x3001;WordPress&#x516C;&#x5F0F;&#x306E;&#x767A;&#x8868;&#x3001;JVN iPedia&#x3001;NVD&#x3067;&#x5F71;&#x97FF;&#x3092;&#x53D7;&#x3051;&#x308B;&#x7248;&#x3068;&#x7167;&#x5408;&#x3057;&#x3066;&#x3001;&#x66F4;&#x65B0;&#x3001;&#x7F6E;&#x304D;&#x63DB;&#x3048;&#x3001;&#x524A;&#x9664;&#x3092;&#x5224;&#x65AD;&#x3057;&#x307E;&#x3059;&#x3002;</p>
<p>The post <a href="https://slt-inc.jp/article/wordpress-vulnerability-check/">WordPressの脆弱性を確認する方法|本体・プラグインの更新と対処の手順</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>WordPressの脆弱性は、本体、プラグイン、テーマの版を一覧にし、公開の脆弱性情報に載る『影響を受ける版』と照らし合わせて確認します。該当したらバックアップを取ってから修正版へ更新し、修正版が無いものは停止して置き換えます。2026年は本体でも重大な修正が続き、公表から数日で悪用が確認された例もあるため、点検の頻度と担当を先に決めておくことが欠かせません。</p></div>

<h2>WordPressの脆弱性は、版の把握と公開情報との照合で確認する</h2>
<p>脆弱性の確認は、自分のサイトで動いている版を正確に知る作業と、その版が公開の脆弱性情報で『影響を受ける版』に入るかを照らす作業の2段階です。版が分からなければ照合できず、照合しなければ更新の優先順位も決められません。</p>
<p>版の把握には管理画面とWP-CLIを、照合にはWordPress公式の発表、JVN iPedia、NVDを使います。外からの確認は、攻撃者と同じ立場で、自分のサイトから何が見えているかを点検する作業です。4つの方法は、分かることと分からないことがそれぞれ違います。</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>更新待ちの有無、停止中のプラグイン、自動更新の不調</td><td>脆弱性の中身、更新通知が出ないプラグインの状態</td><td>管理者アカウント</td></tr>
<tr><td>WP-CLI</td><td>全プラグインの版、公式ディレクトリでの閉鎖、最終更新日</td><td>公式ディレクトリに無いプラグインの開発状況</td><td>SSHの接続とWP-CLI</td></tr>
<tr><td>公開の脆弱性情報</td><td>影響を受ける版、修正版、深刻度、悪用の有無</td><td>自分のサイトが該当するか(版との照合が要る)</td><td>版の一覧</td></tr>
<tr><td>外からの確認</td><td>外に出ている版の情報、公開されているファイル</td><td>管理画面の内側、ログイン後の機能</td><td>curl、または無料ツール</td></tr>
</tbody></table></div>
<div class="slt-callout is-point"><p class="slt-callout-title">ポイント</p><p>初回は全件を棚卸しし、2回目からは前回の記録との差分を見ます。差分で見ると、新しく入ったプラグインや、更新が止まったものにすぐ気づけます。</p></div>

<h2>脆弱性とは何か: 本体、テーマ、プラグインで起きる場所の違い</h2>
<p>脆弱性は、ソフトウェアやWebサイトの機能や性能を損なう、セキュリティ上の問題箇所です。IPAのセミナー資料『ウェブサイトの安全な運用について』は、放置するとサイトの乗っ取りや情報漏えいなどにつながるおそれがあると説明しています。Webサーバーの設定の不備も、脆弱性とみなされます。</p>
<p>WordPressでは、本体、テーマ、プラグインのどこでも脆弱性は見つかります。本体はWordPressのセキュリティチームが修正版を出し、多くは自動更新で届く仕組みです。プラグインとテーマは開発者ごとに対応が分かれ、管理者が更新しない限り古い版が残ります。</p>
<h3>本体: 2026年も重大な修正が続いている</h3>
<p>本体でも、深刻な脆弱性は見つかります。2026年7月17日のWordPress 7.0.2は、深刻度『critical』と『high』の2件を修正しました。影響を受ける版のサイトには、自動更新の仕組みで強制的に更新が配信されています。</p>
<p>2件の<a href="https://slt-inc.jp/glossary/cve/">CVE</a>番号は、CVE-2026-60137とCVE-2026-63030です。IPAは、組み合わせると遠隔でのコード実行が生じる可能性があるとして、7月22日に<a href="https://www.ipa.go.jp/security/security-alert/2026/alert20260722.html">WordPressの脆弱性対策についての注意喚起</a>を出しました。</p>
<p>9月以降も、17日の7.1.1で11件、22日の7.1.2で深刻度『critical』の1件、10月6日の7.1.3で7件のセキュリティ修正が出ています。7.1.3の7件には、<a href="https://slt-inc.jp/glossary/xss/">XSS(クロスサイトスクリプティング)</a>2件やSQLインジェクションの修正が含まれます。</p>
<p>2026年10月12日時点の最新版は7.1.3です。公式の<a href="https://wordpress.org/download/releases/">リリース一覧</a>は『7.1系の最新版だけが安全に使え、積極的に保守されている』と明記しています。古い系統にも修正が移植されることはありますが、公式はこれを厚意(courtesy)と位置づけ、2025年7月には4.1から4.6へのセキュリティ更新を終えました。</p>
<h3>プラグインとテーマ: 提供元ごとに対応が分かれる</h3>
<p>プラグインとテーマの修正版を出すのは、それぞれの開発者です。自動更新は既定で無効で、WordPress.orgのセキュリティチームが重大な脆弱性への対応として判断した特別な場合にだけ、自動で配信されます。開発が止まったものは修正版が出ないまま残り、セキュリティ上の問題などで公式ディレクトリから閉鎖されることもあります。</p>
<p>サーバーのPHPも、確認の対象です。WordPress公式の動作環境のページはPHP 8.3以上を推奨し、サポートが終わった古い版はサイトを脆弱性にさらすおそれがあると注意しています。</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>WordPressのセキュリティチーム</td><td>マイナー版は自動。5.6以降の新規インストールは大型更新も自動</td><td>公式のセキュリティ発表、リリース一覧</td></tr>
<tr><td>プラグイン</td><td>各開発者</td><td>手動(重大な脆弱性で公式が判断した場合を除く)</td><td>公式ディレクトリのページ、提供元のサイト</td></tr>
<tr><td>テーマ</td><td>各開発者</td><td>手動(同上)</td><td>公式ディレクトリのページ、提供元のサイト</td></tr>
<tr><td>PHP</td><td>PHPの開発元(適用はサーバー会社)</td><td>サーバー会社の運用による</td><td>サーバーの管理画面、契約内容</td></tr>
</tbody></table></div>

<h2>管理画面で確認する: サイトヘルス、更新画面、プラグインの詳細</h2>
<p>管理画面では、『ツール』→『サイトヘルス』で自動更新の不調と更新待ちを、『ダッシュボード』→『更新』で更新の有無と互換性を確かめます。プラグインごとの最終更新日と対応する版を見る場所は、公式ディレクトリのページか、プラグイン一覧の『詳細を表示』です。</p>
<h3>サイトヘルスで『致命的な問題』を確認する</h3>
<p>サイトヘルスの『ステータス』タブは、結果を『致命的な問題』『おすすめの改善』『テスト通過』に分けて表示します。脆弱性の点検で見るのは、『バックグラウンド更新が想定通りに動作していません』『更新可能なプラグインがあります』『停止中のプラグインを削除してください』の3つです。1つ目が出ていれば、セキュリティ修正の自動更新が届いていない可能性があります。</p>
<p>『情報』タブには、本体の版のほか、有効と停止中それぞれのプラグインとテーマの版、自動更新の設定が並びます。『サイト情報をクリップボードにコピー』で全項目を文字で取り出せるので、点検記録に貼っておくと次回の比較に便利です。</p>
<h3>更新画面で、更新の有無と互換性を確認する</h3>
<p>『ダッシュボード』→『更新』には、本体、プラグイン、テーマ、翻訳の更新がまとめて表示されます。更新が出ているプラグインの行に出るのは、『WordPress 7.1.3 との互換性: はい (作成者による評価)』か『未確認』の表示です。この評価は作成者の自己申告で、動作の保証ではありません。</p>
<p>『この更新は現在使用中の PHP のバージョンでは動作しません』と出た更新は、PHPを上げるまで適用できません。修正版が出ていても入らないため、PHPの更新を先に計画します。</p>
<h3>プラグインの最終更新日と、対応する最新バージョンを見る</h3>
<p>公式ディレクトリのプラグインページには、『最終更新日』『有効インストール数』『WordPress バージョン』『検証済み最新バージョン』が並びます。管理画面の『詳細を表示』でも、同じ情報が『最終更新:』『対応する最新バージョン:』として出ます。検証済みの版が現在の本体(7.1.3)から大きく遅れているものは、保守が続いているかを確かめる対象です。</p>
<p>公式ディレクトリは、最新3回のメジャーリリースで検証されていないプラグインに黄色の警告を、閉鎖されたプラグインに赤色の警告を表示します。赤色の警告は『このプラグインは(日付)にクローズし、もうダウンロードできません』という形です。閉鎖から60日後には、セキュリティ上の問題(Security Issue)などの理由も示されます。</p>
<h3>使っていないプラグインとテーマを洗い出す</h3>
<p>『プラグイン』→『インストール済みプラグイン』の『停止中』で、使っていないプラグインを絞り込みます。サイトヘルスは『停止中のプラグインは攻撃者の標的になります』と表示し、使う予定が無ければ削除を勧めています。停止はプラグインを動かさないだけで、ファイルはサーバーに残るからです。</p>
<p>テーマも、停止中のものを削除します。ただしサイトヘルスは、有効なテーマ、その親テーマ、デフォルトテーマ1つは残すよう案内しています。使っているテーマに問題が起きたとき、WordPressが代わりに使うのがデフォルトテーマです。</p>
<ul class="slt-check">
<li>サイトヘルスに『バックグラウンド更新が想定通りに動作していません』が出ていない</li>
<li>『ダッシュボード』→『更新』に、適用していない更新が残っていない</li>
<li>停止中のプラグインが無く、停止中のテーマは親テーマとデフォルトテーマだけ</li>
<li>最新3回のメジャーリリースで検証されていないプラグインが無い</li>
<li>公式ディレクトリで閉鎖されたプラグインが無い</li>
<li>管理者権限のユーザーが、現在の担当者だけになっている</li>
</ul>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>プラグインを削除すると、作りによっては設定や専用のデータベースのテーブルも一緒に消えます。WordPressの開発者向け文書が、削除時に設定やテーブルを片付ける処理を推奨しているためです。フォームの送信履歴など残したいデータは、削除の前に書き出します。</p></div>

<h2>WP-CLIで、版と配布状況を一覧にする</h2>
<p>サーバーにSSHで入れるなら、WP-CLIで本体、プラグイン、テーマの版と更新の有無に加え、公式ディレクトリでの閉鎖と最終更新日まで一覧にできます。出力をそのまま点検記録に残せるのも利点です。</p>
<pre class="slt-code"><code># 本体の版と、本体の更新の有無
wp core version
wp core check-update

# 更新が出ているプラグインとテーマ
wp plugin list --update=available
wp theme list --update=available

# 停止中のプラグインとテーマ(削除の候補)
wp plugin list --status=inactive
wp theme list --status=inactive</code></pre>
<p>『wp core check-update』は、本体が最新なら『Success: WordPress is at the latest version.』と表示します。更新があれば、版と種類(major、minor)を表で返します。次のコマンドは、公式ディレクトリでの状態と最終更新日をプラグインごとに並べるものです。</p>
<pre class="slt-code"><code>wp plugin list --fields=name,status,version,update,wporg_status,wporg_last_updated

# 例(表示を簡略化。名前と日付は説明用)
| name         | status   | version | update    | wporg_status | wporg_last_updated |
| example-form | active   | 3.2.1   | available | active       | 2026-09-30         |
| old-slider   | inactive | 1.4.0   | none      | closed       | 2023-05-11         |
| custom-tool  | active   | 2.0.5   | none      |              |                    |</code></pre>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>表示</th><th>意味</th><th>次の行動</th></tr></thead><tbody>
<tr><td>update が available</td><td>新しい版が出ている</td><td>変更履歴を読み、検証環境で試してから更新</td></tr>
<tr><td>update が unavailable</td><td>新しい版がサーバーのPHPで動かない</td><td>PHPの更新を先に計画する</td></tr>
<tr><td>wporg_status が closed</td><td>公式ディレクトリで閉鎖されている</td><td>代わりを探して置き換え、削除する</td></tr>
<tr><td>wporg_status が空欄</td><td>公式ディレクトリに無い(有料、自作など)</td><td>提供元で最新版と修正履歴を確かめる</td></tr>
<tr><td>wporg_last_updated が古い</td><td>長く更新されていない</td><td>開発とサポートが続いているかを確かめる</td></tr>
</tbody></table></div>

<h2>公開の脆弱性情報と照合する: JVN iPedia、NVD、CVE、公式発表</h2>
<p>版の一覧ができたら、本体はWordPress公式のセキュリティ発表で、プラグインとテーマはJVN iPediaやNVDで製品名を検索して照合します。読むべき項目は、影響を受ける版の範囲、修正版の番号、悪用が確認されているかの3つです。</p>
<h3>情報源の使い分け</h3>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>情報源</th><th>載っている情報</th><th>向いている使い方</th><th>注意点</th></tr></thead><tbody>
<tr><td><a href="https://wordpress.org/news/category/security/">WordPress公式のセキュリティ発表</a></td><td>本体のセキュリティリリースと修正の概要</td><td>本体の修正版を早く知る</td><td>プラグインとテーマは対象外</td></tr>
<tr><td>JVN iPedia(jvndb.jvn.jp)</td><td>影響を受ける版、深刻度、対策(日本語)</td><td>プラグイン名やテーマ名で日本語の情報を探す</td><td>公表から登録まで日数がかかることがある</td></tr>
<tr><td><a href="https://nvd.nist.gov/vuln/search">NVD</a>(米国NIST)</td><td>CVEごとの深刻度、影響を受ける製品と版の範囲</td><td>版の範囲を細かく確かめる</td><td>英語のみ</td></tr>
<tr><td><a href="https://www.cve.org/">CVE.org</a></td><td>CVE番号ごとの記録</td><td>番号から元の記録を引く</td><td>影響範囲の書き方は記録ごとに違う</td></tr>
<tr><td>公式ディレクトリのプラグインページ</td><td>変更履歴、閉鎖の警告</td><td>修正版の有無と開発の継続を確かめる</td><td>有料版は提供元で確かめる</td></tr>
</tbody></table></div>
<p>JVN iPediaは、国内の開発者が公開した情報、JVNで公表した情報、米国NISTのNVDの情報を集約し、日本語に翻訳したデータベースです。<a href="https://www.ipa.go.jp/security/reports/vuln/jvn/ipedia2026q1.html">IPAの登録状況の報告</a>によると、2007年4月25日に公開が始まり、2026年第1四半期までの登録は累計277,036件にのぼります。NVDは米国政府の脆弱性管理データのリポジトリで、CVEは、公開された脆弱性を特定、定義して目録にまとめるCVEプログラムの識別番号です。</p>
<h3>影響を受ける版と修正版を照らし合わせる</h3>
<p>照合の要は、自分の版が影響を受ける版の範囲に入るかどうかです。範囲は『以上』と『未満』で書かれることが多く、『未満』の側に書かれた版が修正版にあたります。</p>
<p>たとえばIPAの注意喚起は、CVE-2026-63030の影響を受ける版を6.9.0から6.9.4と7.0.0から7.0.1とし、修正版を6.9.5と7.0.2としています。NVDのデータでも、6.9以上6.9.5未満と、7.0以上7.0.2未満が影響範囲です。6.9.4のサイトは該当し、6.9.5に上げれば該当しなくなります。</p>
<ol class="slt-steps">
<li><strong>版を書き出す</strong>本体、プラグイン、テーマの名前と版を一覧にします。前の節のWP-CLIの出力をそのまま使えます。</li>
<li><strong>製品名で検索する</strong>JVN iPediaとNVDでプラグイン名やテーマ名を検索し、本体はWordPress公式のセキュリティ発表を読みます。</li>
<li><strong>範囲と照らす</strong>影響を受ける版の範囲に自分の版が入るかを確かめ、入っていれば修正版の番号を控えます。</li>
<li><strong>優先順位を決める</strong>ログインせずに狙えるものと、悪用が確認されているものから先に、更新の予定を入れます。</li>
</ol>
<h3>深刻度は点数だけでなく、攻撃の条件で読む</h3>
<p>深刻度の表記は、評価する側によって変わります。9月22日の7.1.2で直った脆弱性(CVE-2026-87902)は、WordPress公式の発表では『critical』です。一方、CVSS v3の基本値は8.1で、JVN iPediaの表示は『重要』でした。</p>
<p>点数より先に読むのは、攻撃の条件です。JVN iPediaの『攻撃に必要な特権レベル: 不要』は、ログインせずに狙えることを示します。『参考情報』に米国CISAの『Known Exploited Vulnerabilities Catalog』が載っていれば、実際の悪用が確認された脆弱性です。</p>
<p>CVE-2026-87902は公表から3日後の9月25日に、CVE-2026-63030は公表から4日後の7月21日に、このカタログへ追加されました。2件とも、公表から悪用の確認まで数日しかありませんでした。</p>
<div class="slt-callout is-note"><p class="slt-callout-title">補足</p><p>日本語のデータベースは、公表から登録まで日数がかかることがあります。CVE-2026-87902は9月22日に公表され、JVN iPediaへの登録は9月29日でした。急ぐ場面では、WordPress公式の発表とNVDを先に見ます。</p></div>

<h2>外から見える情報を確認する: 版の露出と公開ファイル</h2>
<p>外からの確認では、自分のサイトに対して、第三者が取得できる版の情報と公開ファイルを調べます。版を隠しても脆弱性は直りませんが、何が見えているかを知ると、点検の漏れに気づけます。</p>
<p>標準の設定で版が出る主な場所は、ページの&lt;head&gt;、フィード、CSSやJavaScriptのURLです。&lt;head&gt;には『<code>&lt;meta name="generator" content="WordPress 7.1.3"&gt;</code>』が出て、フィードのgeneratorにも同じ版が入ります。版の指定が無いCSSやJavaScriptのURLに付く『?ver=』も、本体の版と同じ値です。</p>
<p>ルートにあるreadme.htmlは、現在の版では版番号そのものを載せていません。ただし、WordPressで作られたサイトであることと動作要件が分かるため、公開しておく理由はありません。プラグインのCSSやJavaScriptに付く番号や同梱の説明ファイルからも、プラグインの版が推定されることがあります。</p>
<pre class="slt-code"><code># 自分が管理するサイトにだけ実行します
# トップページとフィードに、版が出ていないか
curl -s https://example.com/ | grep -io '&lt;meta name="generator"[^&gt;]*&gt;'
curl -s https://example.com/feed/ | grep -io '&lt;generator&gt;[^&lt;]*&lt;/generator&gt;'

# readme.html が公開されているか(200なら公開、404なら非公開)
curl -s -o /dev/null -w '%{http_code}\n' https://example.com/readme.html

# 例(出力)
&lt;meta name="generator" content="WordPress 7.1.3"&gt;
&lt;generator&gt;https://wordpress.org/?v=7.1.3&lt;/generator&gt;
200</code></pre>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>版の表示を消すことは、更新の代わりになりません。公式の『Hardening WordPress』も、見えにくくして守る方法(security through obscurity)は主たる対策として不適切だとしています。攻撃は版を確かめずに試されることもあるため、該当する脆弱性が残っていれば狙われます。</p></div>
<p>当社の無料の<a href="https://slt-inc.jp/service/security-checker/">Webサイトのセキュリティチェック</a>は、URLを入れるだけで、本体、プラグイン、テーマの版と既知の脆弱性、配布終了の有無を確かめます。readme.htmlやxmlrpc.phpの公開、REST APIでユーザー名の一覧が取れるかも、調べる対象です。診断は公開ページの取得やDNSの照会に限られ、攻撃の通信は送らないため、ログイン後の画面や管理画面の内側は対象外です。</p>
<p>wp-config.phpのバックアップや.git、.envなど、公開してはいけないファイルの確認方法は<a href="https://slt-inc.jp/article/git-env-file-exposure/">.gitや.envが公開されていないか確認する方法</a>で扱っています。フォルダの中身が一覧で見える<a href="https://slt-inc.jp/glossary/directory-listing/">ディレクトリリスティング</a>も、アップロード用のフォルダ(wp-content/uploads)で、サーバーの設定によって起きることがあります。</p>

<h2>更新の前の準備と、更新の順序</h2>
<p>更新の基本は、バックアップを取って戻せることを確かめ、検証環境で試してから、本番で1つずつ行うことです。公式の<a href="https://developer.wordpress.org/advanced-administration/upgrade/upgrading/">Upgrading WordPress</a>も、手動更新の最初の3段階を、データベースのバックアップ、全ファイルのバックアップ、バックアップの検証としています。</p>
<h3>バックアップは戻せることまで確かめる</h3>
<p>バックアップに要るのは、データベースとファイル(少なくともwp-contentとwp-config.php)の両方です。取っただけで終えず、検証環境へ実際に戻し、ページが表示されるかまで確かめます。サーバー会社のバックアップを使う場合は、保存期間と戻し方を事前に確認しておきます。</p>
<pre class="slt-code"><code># 例: WordPressの設置フォルダで実行し、公開フォルダの外(~/backups)へ書き出す
mkdir -p ~/backups
wp db export ~/backups/db-20261012.sql
tar -czf ~/backups/files-20261012.tar.gz wp-content wp-config.php</code></pre>
<p>バックアップのファイルを公開フォルダの中に置くのは危険です。外から取得されるおそれがあり、データベースには会員情報や問い合わせの内容も含まれます。保存先と消す時期まで決めておきます。</p>
<h3>検証環境で先に試す</h3>
<p>検証環境(ステージング)は、本番と同じ版の本体、プラグイン、テーマ、PHPを揃えた複製です。ここで更新し、表示、問い合わせフォーム、会員機能、決済を操作してから本番に移ります。検証環境にはベーシック認証などをかけ、検索結果に載らないようにします。</p>
<p>使い終えた検証環境や旧サイトも、点検の対象です。IPAは、不要になったページを残すと管理が及ばず、脆弱性が見つかったときに影響を受けるおそれがあるとして、不要になった時点で非公開にするよう勧めています。</p>
<h3>本体、プラグイン、テーマの順に1つずつ更新する</h3>
<p>公式の手動更新の手順は、本体のファイルを入れ替えたあとに、更新されたプラグインとテーマを入れる流れです。本体の大型更新の前には、更新画面の互換性の表示で、各プラグインが新しい版に対応しているかを確かめます。脆弱性が公表されているものがあれば、その更新が最優先です。</p>
<p>まとめて更新すると、不具合が出たときに原因を特定できません。1つ更新するごとに表示を確かめれば、原因をその場で切り分けられます。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 330"><title>図1 確認から更新までの流れ</title><desc>版を一覧にし、公開情報と照合し、バックアップを取り、検証環境で試してから、本番を1つずつ更新し、表示と機能を確かめ、記録を残して次回の点検につなげる流れ。表示と機能の確認で不具合が出たら、バックアップへ戻す分岐がある。</desc><defs><marker id="f1a" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="12" markerHeight="12" markerUnits="userSpaceOnUse" orient="auto"><path d="M0,0 L10,5 L0,10 z" fill="#10265A"/></marker><marker id="f1r" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="12" markerHeight="12" markerUnits="userSpaceOnUse" orient="auto"><path d="M0,0 L10,5 L0,10 z" fill="#D00A0A"/></marker></defs><rect x="10" y="30" width="172" height="84" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="96" y="64" font-size="24" fill="#10265A" text-anchor="middle">版を</text><text x="96" y="94" font-size="24" fill="#10265A" text-anchor="middle">一覧にする</text><rect x="212" y="30" width="172" height="84" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="298" y="64" font-size="24" fill="#10265A" text-anchor="middle">公開情報と</text><text x="298" y="94" font-size="24" fill="#10265A" text-anchor="middle">照合する</text><rect x="414" y="30" width="172" height="84" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="500" y="64" font-size="24" fill="#10265A" text-anchor="middle">バックアップ</text><text x="500" y="94" font-size="24" fill="#10265A" text-anchor="middle">を取る</text><rect x="616" y="30" width="172" height="84" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="702" y="64" font-size="24" fill="#10265A" text-anchor="middle">検証環境で</text><text x="702" y="94" font-size="24" fill="#10265A" text-anchor="middle">試す</text><rect x="10" y="226" width="172" height="84" rx="10" fill="#EEF2F9" stroke="#4A5C82" stroke-width="3"/><text x="96" y="260" font-size="24" fill="#10265A" text-anchor="middle">次回の</text><text x="96" y="290" font-size="24" fill="#10265A" text-anchor="middle">点検へ</text><rect x="212" y="226" width="172" height="84" rx="10" fill="#FFFFFF" stroke="#10265A" stroke-width="3"/><text x="298" y="260" font-size="24" fill="#10265A" text-anchor="middle">記録を</text><text x="298" y="290" font-size="24" fill="#10265A" text-anchor="middle">残す</text><rect x="414" y="226" width="172" height="84" rx="10" fill="#FFFFFF" stroke="#10265A" stroke-width="3"/><text x="500" y="260" font-size="24" fill="#10265A" text-anchor="middle">表示と機能を</text><text x="500" y="290" font-size="24" fill="#10265A" text-anchor="middle">確かめる</text><rect x="616" y="226" width="172" height="84" rx="10" fill="#FFFFFF" stroke="#10265A" stroke-width="3"/><text x="702" y="260" font-size="24" fill="#10265A" text-anchor="middle">本番を</text><text x="702" y="290" font-size="24" fill="#10265A" text-anchor="middle">1つずつ更新</text><line x1="182" y1="72" x2="208" y2="72" stroke="#10265A" stroke-width="3" marker-end="url(#f1a)"/><line x1="384" y1="72" x2="410" y2="72" stroke="#10265A" stroke-width="3" marker-end="url(#f1a)"/><line x1="586" y1="72" x2="612" y2="72" stroke="#10265A" stroke-width="3" marker-end="url(#f1a)"/><line x1="702" y1="114" x2="702" y2="222" stroke="#10265A" stroke-width="3" marker-end="url(#f1a)"/><line x1="616" y1="268" x2="590" y2="268" stroke="#10265A" stroke-width="3" marker-end="url(#f1a)"/><line x1="414" y1="268" x2="388" y2="268" stroke="#10265A" stroke-width="3" marker-end="url(#f1a)"/><line x1="212" y1="268" x2="186" y2="268" stroke="#10265A" stroke-width="3" marker-end="url(#f1a)"/><line x1="96" y1="226" x2="96" y2="118" stroke="#4A5C82" stroke-width="3" marker-end="url(#f1a)"/><line x1="500" y1="226" x2="500" y2="118" stroke="#D00A0A" stroke-width="3" stroke-dasharray="8 6" marker-end="url(#f1r)"/><text x="514" y="180" font-size="24" fill="#10265A">不具合なら戻す</text></svg><figcaption>図1 確認から更新までの流れ。版の一覧と公開情報の照合で該当を見つけ、バックアップと検証環境での確認を経て、本番を1つずつ更新します。表示と機能の確認で不具合が出たらバックアップから戻し、問題が無ければ記録を残して次回の点検につなげます。</figcaption></figure>
<ol class="slt-steps">
<li><strong>更新の内容を読む</strong>変更履歴とセキュリティ発表で、修正の内容と対象の版を確かめます。</li>
<li><strong>バックアップを取る</strong>データベースとファイルを公開フォルダの外へ保存し、戻せることを確かめます。</li>
<li><strong>検証環境で試す</strong>同じ更新を検証環境で行い、主要な画面と機能を操作します。</li>
<li><strong>本番を1つずつ更新する</strong>アクセスの少ない時間に、本体、プラグイン、テーマの順で進めます。</li>
<li><strong>表示と機能を確かめる</strong>トップページ、問い合わせフォーム、会員機能、決済を実際に操作します。</li>
<li><strong>記録を残す</strong>日時、対象、更新前後の版、理由(CVE番号など)、確認の結果を書き残します。</li>
</ol>

<h2>修正版が無い、更新できないときの判断</h2>
<p>修正版が無いときは、そのプラグインを使い続ける必要があるかと、開発が続いているかの2点で判断します。使わないものは削除し、使うものは『待つ』か『置き換える』かを選びます。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 420"><title>図2 修正版が無いときの判断の分岐</title><desc>使っているかを問い、使っていなければ削除する。使っていれば修正版の有無を問い、あればバックアップして更新する。無ければ開発が続いているかを問い、続いていれば機能を止めて修正を待ち、止まっていれば代わりに置き換えて削除する。</desc><defs><marker id="f2a" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="12" markerHeight="12" markerUnits="userSpaceOnUse" orient="auto"><path d="M0,0 L10,5 L0,10 z" fill="#10265A"/></marker></defs><rect x="20" y="20" width="300" height="64" rx="12" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="170" y="60" font-size="24" fill="#10265A" text-anchor="middle">使っているか？</text><rect x="480" y="20" width="300" height="64" rx="12" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3"/><text x="630" y="60" font-size="24" fill="#10265A" text-anchor="middle">削除する</text><line x1="320" y1="52" x2="476" y2="52" stroke="#10265A" stroke-width="3" marker-end="url(#f2a)"/><text x="398" y="40" font-size="24" fill="#10265A" text-anchor="middle">いいえ</text><line x1="170" y1="84" x2="170" y2="126" stroke="#10265A" stroke-width="3" marker-end="url(#f2a)"/><text x="184" y="114" font-size="24" fill="#10265A">はい</text><rect x="20" y="130" width="300" height="64" rx="12" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="170" y="170" font-size="24" fill="#10265A" text-anchor="middle">修正版はあるか？</text><rect x="480" y="130" width="300" height="64" rx="12" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="630" y="170" font-size="24" fill="#10265A" text-anchor="middle">バックアップして更新</text><line x1="320" y1="162" x2="476" y2="162" stroke="#10265A" stroke-width="3" marker-end="url(#f2a)"/><text x="398" y="150" font-size="24" fill="#10265A" text-anchor="middle">ある</text><line x1="170" y1="194" x2="170" y2="236" stroke="#10265A" stroke-width="3" marker-end="url(#f2a)"/><text x="184" y="224" font-size="24" fill="#10265A">ない</text><rect x="20" y="240" width="300" height="64" rx="12" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="170" y="280" font-size="24" fill="#10265A" text-anchor="middle">開発は続いているか？</text><rect x="480" y="240" width="300" height="64" rx="12" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="630" y="280" font-size="24" fill="#10265A" text-anchor="middle">機能を止めて修正を待つ</text><line x1="320" y1="272" x2="476" y2="272" stroke="#10265A" stroke-width="3" marker-end="url(#f2a)"/><text x="398" y="260" font-size="24" fill="#10265A" text-anchor="middle">続いている</text><line x1="170" y1="304" x2="170" y2="336" stroke="#10265A" stroke-width="3" marker-end="url(#f2a)"/><text x="184" y="330" font-size="24" fill="#10265A">止まっている</text><rect x="20" y="340" width="300" height="64" rx="12" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3"/><text x="170" y="380" font-size="24" fill="#10265A" text-anchor="middle">代わりに置き換えて削除</text></svg><figcaption>図2 修正版が無い、または更新できないときの判断の流れ。使っていなければ削除し、修正版があればバックアップのうえ更新します。修正版が無い場合は、開発が続いていれば機能を止めて待ち、止まっていれば代わりに置き換えて削除します。</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>更新する</td><td>バックアップと検証環境での確認のうえで更新</td></tr>
<tr><td>修正版は未公開だが、開発は続いている</td><td>期限を決めて待つ</td><td>該当機能を止める、<a href="https://slt-inc.jp/glossary/waf/">WAF</a>で該当する通信を遮断する、管理画面への接続を<a href="https://slt-inc.jp/glossary/ip%e5%88%b6%e9%99%90/">IP制限</a>で絞る</td></tr>
<tr><td>公式ディレクトリで閉鎖、または長く更新が無い</td><td>置き換える</td><td>保守が続く別のプラグインへ移し、元のものを削除</td></tr>
<tr><td>更新すると表示や機能が崩れる</td><td>原因を直して更新する</td><td>検証環境で原因のプラグインやテーマを特定し、直す期限を決める</td></tr>
<tr><td>新しい版がサーバーのPHPで動かない</td><td>PHPを上げる</td><td>サーバー会社の手順でPHPを上げ、検証環境で動作を確かめる</td></tr>
</tbody></table></div>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>不具合を避けるために古い版へ戻すと、その後に直った脆弱性まで元に戻ります。WAFや機能の停止は、修正版が出るまでのつなぎです。更新か置き換えを終える期限を、担当者と決めておきます。</p></div>

<h2>攻撃の兆候を確認する: 不審な管理者、改ざん、見覚えのないファイル</h2>
<p>兆候は、ユーザー、ファイル、外からの見え方の3か所で確かめます。WordPress公式の<a href="https://wordpress.org/documentation/article/faq-my-site-was-hacked/">FAQ My site was hacked</a>は、侵害の明確な兆候を挙げています。検索エンジンの警告、サーバー会社によるサイトの停止、許可していないユーザーの作成、目に見える改ざんなどです。</p>
<ul class="slt-check">
<li>見覚えのない管理者アカウントが無い(登録日も見る)</li>
<li>本体のファイルが、公式の配布物と一致する</li>
<li>wp-adminやwp-includesに、本来無いファイルが無い</li>
<li>.htaccessと、テーマのindex.php、header.php、footer.php、functions.phpに覚えのない変更が無い</li>
<li>検索結果やブラウザに、危険なサイトの警告が出ていない</li>
<li>サーバー会社から、迷惑メールの送信やサイトの停止の連絡が来ていない</li>
</ul>
<pre class="slt-code"><code># 管理者権限のユーザーと登録日を一覧にする
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered

# 本体のファイルを、公式のチェックサムと照合する
wp core verify-checksums

# 公式ディレクトリのプラグインを、配布物と照合する
wp plugin verify-checksums --all</code></pre>
<p>本体の照合で『<code>File doesn't verify against checksum</code>』と出たファイルは、公式の配布物から書き換えられています。『<code>File should not exist</code>』は、本来無いファイルがあるという意味です。wp-content(テーマ、プラグイン、アップロード)は本体の照合の対象外で、プラグインの照合も公式ディレクトリにあるものに限られます。</p>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>本来無いファイルの警告は、最後の行が『Success』でも表示されることがあります。成否の1行だけで判断せず、その上に並ぶ『Warning』の行をすべて読みます。</p></div>

<h2>侵害が疑われるときの初動</h2>
<p>侵害が疑われたら、状況を記録して現状の複製を取り、サーバー会社や保守会社に連絡してから、すべての入口のパスワードを変えます。削除や上書きを急ぐと原因の手がかりが消えるため、順番が大切です。</p>
<ol class="slt-steps">
<li><strong>状況を記録する</strong>侵害を疑った理由、気づいた日時とタイムゾーン、直近に入れたプラグインや変更を書き出します。</li>
<li><strong>現状の複製を取る</strong>感染していても、掃除の前に今の状態を丸ごと保存します。原因の調査と、作業に失敗したときの比較に使います。</li>
<li><strong>関係先に連絡する</strong>サーバー会社と保守会社に連絡します。共用サーバーでは、被害がほかのサイトに及んでいることもあります。</li>
<li><strong>入口をすべて閉じる</strong>全ユーザーのパスワードと、FTPやSFTP、サーバーの管理画面、データベースのパスワードを変えます。wp-config.phpの認証用ユニークキーを入れ替えると、ログイン中の全員が締め出されます。</li>
<li><strong>本体を同じ版で入れ直す</strong>wp-adminとwp-includesを、同じ版の公式の配布物で置き換えます。テーマとプラグインも、公式ディレクトリや提供元から取り直します。</li>
<li><strong>侵入口を塞ぐ</strong>原因と考えられるプラグインやテーマを更新するか、削除します。</li>
<li><strong>もう一度パスワードを変える</strong>きれいになったことを確かめてから、すべてのパスワードを再度変えます。</li>
<li><strong>影響を確かめて知らせる</strong>ログで被害の範囲を確かめ、利用者や取引先に影響があれば連絡します。</li>
</ol>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>管理画面の再インストール機能は、既存のファイルを上書きするだけです。攻撃で足されたファイルは残るため、公式のFAQは、FTPやSFTPでファイルを置き換えるよう勧めています。</p></div>
<p>復旧後は、wp-config.phpに『<code>define( 'DISALLOW_FILE_EDIT', true );</code>』を書きます。管理画面からテーマとプラグインのファイルを編集できなくなり、管理者アカウントを乗っ取られても、コードを書き換えられる被害を抑えられます。</p>
<p>自社で切り分けるのが難しい場合は、IPAの情報セキュリティ安心相談窓口や、JPCERT/CCのインシデント対応依頼が公的な相談先です。診断や復旧の進め方は、当社の<a href="https://slt-inc.jp/inquiry/">お問い合わせ窓口</a>でも相談を受け付けています。</p>

<h2>自動更新の使い分け</h2>
<p>本体のセキュリティ修正(マイナー版)の自動更新は止めずに使い、プラグインとテーマは影響の大きさで自動と手動を分けます。自動に任せた部分も、版が上がったかの点検は欠かせません。</p>
<p>WordPress 5.6以降の新規インストールでは、Gitなどで管理している場合を除き、本体はマイナー版と大型更新の両方が既定で自動です。5.6より前に入れたサイトは、設定を変えていなければマイナー版と翻訳だけが自動になっています。プラグインとテーマの自動更新は5.5で加わった機能で、一覧の『自動更新を有効化』から個別に切り替える形です。</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>自動</td><td>止めない</td></tr>
<tr><td>本体の大型更新</td><td>5.6以降の新規インストールは自動</td><td>検証環境があるなら手動にし、先に試す</td></tr>
<tr><td>プラグイン</td><td>手動(重大な場合を除く)</td><td>影響が小さく保守が続くものは自動。フォーム、会員、決済は検証してから手動で</td></tr>
<tr><td>テーマ</td><td>手動(重大な場合を除く)</td><td>直接編集したテーマは自動にしない(変更を子テーマへ移す)</td></tr>
<tr><td>翻訳</td><td>自動</td><td>そのまま</td></tr>
</tbody></table></div>
<pre class="slt-code"><code>// wp-config.php の例1: 本体の自動更新をマイナー版だけにする
define( 'WP_AUTO_UPDATE_CORE', 'minor' );

// 例2: 大型更新も含めて自動にする(例1とどちらか一方だけを書く)
// define( 'WP_AUTO_UPDATE_CORE', true );</code></pre>
<p>自動更新は既定で1日2回実行され、結果は管理者にメールで届きます。ただしIPAは、環境や設定によって自動更新が有効でなかったり、失敗したりする可能性を挙げ、管理画面で版が上がったかを確かめるよう求めています。</p>
<div class="slt-callout is-note"><p class="slt-callout-title">補足</p><p>『AUTOMATIC_UPDATER_DISABLED』をtrueにすると、本体のセキュリティ修正を含むすべての自動更新が止まります。サーバー会社や保守会社が更新を別の仕組みで管理している場合を除き、設定しません。</p></div>

<h2>点検の頻度、担当、更新の記録を決める</h2>
<p>点検を続けるこつは、頻度ごとに作業を分け、担当者を決めることです。IPAも、自組織で使うソフトウェアを把握し、脆弱性がある版でないかを定期的に確認するよう求めています。</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>本体のセキュリティ発表と、使っているプラグインの注意喚起を読む</td><td>WordPress公式、IPA、JVN iPedia</td></tr>
<tr><td>週1回</td><td>更新の有無とサイトヘルスを確かめ、更新を適用する</td><td>管理画面</td></tr>
<tr><td>月1回</td><td>プラグインとテーマの棚卸し、管理者アカウントの見直し、外からの確認</td><td>WP-CLI、無料ツール</td></tr>
<tr><td>四半期に1回</td><td>バックアップからの復元テスト、検証環境と旧サイトの整理</td><td>検証環境</td></tr>
</tbody></table></div>
<p>担当は、主担当と代理の2人を決めます。サーバー会社や制作会社に保守を任せている場合は、IPAが勧めるとおり事業者の作業範囲を確かめ、足りない部分を自社で受け持ちます。たとえば本体の自動更新はサーバー会社、プラグインの更新は制作会社、点検記録の確認は自社、という分け方です。</p>
<p>更新の記録は、作業ごとに次の項目を残す形で十分です。記録があれば、不具合や侵害が起きたときに、いつ何を変えたかを後からたどれます。</p>
<ul class="slt-check">
<li>日時と作業者</li>
<li>対象(本体、プラグイン名、テーマ名)</li>
<li>更新前と更新後の版</li>
<li>更新の理由(CVE番号、注意喚起のURL)</li>
<li>確かめた画面と機能、その結果</li>
<li>問題が出たときの対応(戻した、保留した、など)</li>
</ul>
<p>月1回の外からの確認に使える道具の1つが、当社の<a href="https://slt-inc.jp/service/security-checker/">無料のセキュリティチェック</a>です。WordPress以外も含めたサイト全体の点検項目は、<a href="https://slt-inc.jp/article/website-security-check-items/">Webサイトのセキュリティチェック項目30選</a>にまとめています。</p>

<h2>WordPressの脆弱性確認でよくある質問</h2>
<div class="slt-faq"><h3>無料の診断ツールで問題が出なければ、安全と考えてよいですか？</h3><p>いいえ、公開されている情報から分かる範囲で、問題が見つからなかったという意味にとどまります。外からの簡易チェックで分かるのは版の情報、公開ファイル、<a href="https://slt-inc.jp/glossary/security-headers/">セキュリティヘッダー</a>などの設定で、ログイン後の機能やサイト独自の作りに潜む脆弱性は確かめられません。そこまで確かめるには<a href="https://slt-inc.jp/glossary/vulnerability-assessment/">脆弱性診断</a>や<a href="https://slt-inc.jp/glossary/penetration-test/">ペネトレーションテスト</a>が必要で、違いは<a href="https://slt-inc.jp/article/vulnerability-assessment-vs-simple-check/">簡易チェックと脆弱性診断の違い</a>で解説しています。</p></div>
<div class="slt-faq"><h3>有料テーマや、公式ディレクトリに無いプラグインはどう確認しますか？</h3><p>提供元のサイトで最新版と変更履歴を確かめ、JVN iPediaやNVDで製品名を検索します。公式ディレクトリに無いものは、提供元の仕組みによって管理画面に更新が出ないことがあり、WP-CLIの『wporg_status』も空欄になります。購入したときに、更新の受け取り方とサポートの期限を控えておくと、点検で迷いません。</p></div>
<div class="slt-faq"><h3>WordPressの更新は、どのくらいの頻度で出ますか？</h3><p>セキュリティ修正を含む更新は、決まった周期ではなく必要に応じて出ます。2026年は7月17日から10月6日までの約12週間に、公式のセキュリティ発表が6回出ました。週1回の確認を基本にし、発表が出たら臨時に確かめる運用が現実的です。</p></div>
<div class="slt-faq"><h3>7.0から7.1のような大型更新は、すぐに入れるべきですか？</h3><p>検証環境で主要な機能を確かめてから入れます。セキュリティ修正は7.1.2から7.1.3のような小さな更新でも配られますが、公式が積極的にサポートするのは最新版だけです。更新画面でプラグインの互換性の表示が揃ったら、古い系統に長く留まらずに移ります。</p></div>
<div class="slt-faq"><h3>更新したら画面が真っ白になりました。どうすればよいですか？</h3><p>管理者宛てのメールに届くリカバリーモードのリンクから管理画面に入り、原因のプラグインを止めるか、バックアップから戻します。WordPressは、プラグインやテーマが致命的なエラーを起こすと、『サイトで技術的な問題が発生しています』という件名のメールを送る仕組みです。リカバリーモードでは原因のプラグインが一時停止された状態で管理画面を開けるため、落ち着いて原因を確かめられます。</p></div>
<div class="slt-faq"><h3>管理画面のログインURLを変えれば、脆弱性対策になりますか？</h3><p>パスワードを狙うログインの試行は減らせますが、脆弱性は直りません。2026年9月に修正された本体の脆弱性(CVE-2026-87902)は、ログインしていない攻撃者が条件次第で狙えるものでした。ログインURLの変更は補助として扱い、更新を優先します。</p></div>
<div class="slt-faq"><h3>テーマを直接編集しています。更新すると変更は消えますか？</h3><p>消えます。テーマを更新するとファイルが新しい版で置き換わるため、直接書き加えた変更は残りません。公式の開発者向け文書も、親テーマを更新しても変更を失わない方法として子テーマを勧めており、変更を子テーマへ移してから更新します。</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/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/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を入れるだけで、WordPress本体とプラグインの版、既知の脆弱性、配布終了、readme.htmlなどの公開状況を確認できます。登録は不要です。診断できるのは、自社または管理権限のあるサイトだけです。</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": "いいえ、公開されている情報から分かる範囲で、問題が見つからなかったという意味にとどまります。外からの簡易チェックで分かるのは版の情報、公開ファイル、セキュリティヘッダーなどの設定で、ログイン後の機能やサイト独自の作りに潜む脆弱性は確かめられません。そこまで確かめるには脆弱性診断やペネトレーションテストが必要で、違いは簡易チェックと脆弱性診断の違いで解説しています。"}}, {"@type": "Question", "name": "有料テーマや、公式ディレクトリに無いプラグインはどう確認しますか？", "acceptedAnswer": {"@type": "Answer", "text": "提供元のサイトで最新版と変更履歴を確かめ、JVN iPediaやNVDで製品名を検索します。公式ディレクトリに無いものは、提供元の仕組みによって管理画面に更新が出ないことがあり、WP-CLIの『wporg_status』も空欄になります。購入したときに、更新の受け取り方とサポートの期限を控えておくと、点検で迷いません。"}}, {"@type": "Question", "name": "WordPressの更新は、どのくらいの頻度で出ますか？", "acceptedAnswer": {"@type": "Answer", "text": "セキュリティ修正を含む更新は、決まった周期ではなく必要に応じて出ます。2026年は7月17日から10月6日までの約12週間に、公式のセキュリティ発表が6回出ました。週1回の確認を基本にし、発表が出たら臨時に確かめる運用が現実的です。"}}, {"@type": "Question", "name": "7.0から7.1のような大型更新は、すぐに入れるべきですか？", "acceptedAnswer": {"@type": "Answer", "text": "検証環境で主要な機能を確かめてから入れます。セキュリティ修正は7.1.2から7.1.3のような小さな更新でも配られますが、公式が積極的にサポートするのは最新版だけです。更新画面でプラグインの互換性の表示が揃ったら、古い系統に長く留まらずに移ります。"}}, {"@type": "Question", "name": "更新したら画面が真っ白になりました。どうすればよいですか？", "acceptedAnswer": {"@type": "Answer", "text": "管理者宛てのメールに届くリカバリーモードのリンクから管理画面に入り、原因のプラグインを止めるか、バックアップから戻します。WordPressは、プラグインやテーマが致命的なエラーを起こすと、『サイトで技術的な問題が発生しています』という件名のメールを送る仕組みです。リカバリーモードでは原因のプラグインが一時停止された状態で管理画面を開けるため、落ち着いて原因を確かめられます。"}}, {"@type": "Question", "name": "管理画面のログインURLを変えれば、脆弱性対策になりますか？", "acceptedAnswer": {"@type": "Answer", "text": "パスワードを狙うログインの試行は減らせますが、脆弱性は直りません。2026年9月に修正された本体の脆弱性(CVE-2026-87902)は、ログインしていない攻撃者が条件次第で狙えるものでした。ログインURLの変更は補助として扱い、更新を優先します。"}}, {"@type": "Question", "name": "テーマを直接編集しています。更新すると変更は消えますか？", "acceptedAnswer": {"@type": "Answer", "text": "消えます。テーマを更新するとファイルが新しい版で置き換わるため、直接書き加えた変更は残りません。公式の開発者向け文書も、親テーマを更新しても変更を失わない方法として子テーマを勧めており、変更を子テーマへ移してから更新します。"}}]}</script><p>The post <a href="https://slt-inc.jp/article/wordpress-vulnerability-check/">WordPressの脆弱性を確認する方法|本体・プラグインの更新と対処の手順</a> first appeared on <a href="https://slt-inc.jp">総合デジタルマーケティング企業 エスライン・テクノロジーズ</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<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>SSL/TLS証明書のチェック方法&#124;有効期限・チェーン・通信方式の確認手順</title>
		<link>https://slt-inc.jp/article/ssl-tls-certificate-check/</link>
		
		<dc:creator><![CDATA[slt]]></dc:creator>
		<pubDate>Thu, 24 Sep 2026 05:08:00 +0000</pubDate>
				<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[記事]]></category>
		<category><![CDATA[CSP]]></category>
		<category><![CDATA[HSTS]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[SSL/TLS]]></category>
		<category><![CDATA[Webサイトセキュリティ]]></category>
		<category><![CDATA[セキュリティチェック]]></category>
		<category><![CDATA[セキュリティ対策]]></category>
		<guid isPermaLink="false">https://slt-inc.jp/security/ssl-tls-certificate-check/</guid>

					<description><![CDATA[<p><a class="glossaryLink"  aria-describedby="tt"  data-cmtooltip="&#60;div class=glossaryItemBody&#62;SSL/TLS&#35388;&#26126;&#26360;&#12392;&#12399;SSL/TLS&#35388;&#26126;&#26360;&#12399;&#12289;&#12469;&#12452;&#12488;&#12364;&#12289;&#12381;&#12398;&#12489;&#12513;&#12452;&#12531;&#12398;&#27491;&#24403;&#12394;&#25345;&#12385;&#20027;&#12398;&#12418;&#12398;&#12391;&#12354;&#12427;&#12371;&#12392;&#12434;&#12502;&#12521;&#12454;&#12470;&#12395;&#35388;&#26126;&#12375;&#12289;&#36890;&#20449;&#12398;&#26263;&#21495;&#21270;&#12395;&#20351;&#12358;&#37749;&#12434;&#28193;&#12377;&#12383;&#12417;&#12398;&#12487;&#12472;&#12479;&#12523;&#35388;&#26126;&#26360;&#12391;&#12377;&#12290;&#35469;&#35388;&#23616;(CA)&#12364;&#30330;&#34892;&#12375;&#12414;&#12377;&#12290;&#12300;SSL&#35388;&#26126;&#26360;&#12301;&#12399;&#36890;&#31216;&#12391;&#12289;&#29694;&#22312;&#20351;&#12431;&#12428;&#12390;&#12356;&#12427;&#26263;&#21495;&#21270;&#12398;&#20181;&#32068;&#12415;&#12399;TLS&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;SSL/TLS&#35388;&#26126;&#26360;&#12364;&#24517;&#35201;&#12394;&#29702;&#30001;&#35388;&#26126;&#26360;&#12364;&#12394;&#12356;&#12289;&#12414;&#12383;&#12399;&#26399;&#38480;&#12364;&#20999;&#12428;&#12390;&#12356;&#12427;&#12392;&#12289;&#12502;&#12521;&#12454;&#12470;&#12399;&#12300;&#25509;&#32154;&#12364;&#12503;&#12521;&#12452;&#12505;&#12540;&#12488;&#12391;&#12399;&#12354;&#12426;&#12414;&#12379;&#12435;&#12301;&#12392;&#12356;&#12387;&#12383;&#20840;&#30011;&#38754;&#12398;&#35686;&#21578;&#12434;&#20986;&#12375;&#12289;&#22810;&#12367;&#12398;&#35370;&#21839;&#32773;&#12399;&#12381;&#12371;&#12391;&#38626;&#12428;&#12414;&#12377;&#12290;&#12501;&#12457;&#12540;&#12512;&#12420;&#12525;&#12464;&#12452;&#12531;&#12398;&#20837;&#21147;&#20869;&#23481;&#12418;&#12289;&#26263;&#21495;&#21270;&#12373;&#12428;&#12378;&#12395;&#36865;&#12425;&#12428;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#35388;&#26126;&#26360;&#12398;&#12488;&#12521;&#12502;&#12523;&#12391;&#12418;&#12387;&#12392;&#12418;&#22810;&#12356;&#12398;&#12399;&#12289;&#26356;&#26032;&#12398;&#22833;&#24565;&#12395;&#12424;&#12427;&#26399;&#38480;&#20999;&#12428;&#12391;&#12377;&#12290;&#26399;&#38480;&#20999;&#12428;&#12391;&#12399;&#12289;&#12469;&#12452;&#12488;&#12384;&#12369;&#12391;&#12394;&#12367;&#12289;&#21516;&#12376;&#35388;&#26126;&#26360;&#12434;&#20351;&#12358;API&#12420;&#12513;&#12540;&#12523;&#37197;&#20449;&#12394;&#12393;&#12398;&#36890;&#20449;&#12364;&#27490;&#12414;&#12427;&#12371;&#12392;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;SSL/TLS&#35388;&#26126;&#26360;&#12398;&#20181;&#32068;&#12415;&#35388;&#26126;&#26360;&#12395;&#12399;&#12289;&#23550;&#35937;&#12398;&#12489;&#12513;&#12452;&#12531;&#21517;(SAN)&#12289;&#30330;&#34892;&#32773;&#12289;&#26377;&#21177;&#26399;&#38291;&#12289;&#20844;&#38283;&#37749;&#12289;CA&#12398;&#32626;&#21517;&#12364;&#20837;&#12387;&#12390;&#12356;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12502;&#12521;&#12454;&#12470;&#12399;&#12289;&#12469;&#12540;&#12496;&#12540;&#35388;&#26126;&#26360;&#12289;&#20013;&#38291;&#35388;&#26126;&#26360;&#12289;&#12502;&#12521;&#12454;&#12470;&#12395;&#20869;&#34101;&#12373;&#12428;&#12383;&#12523;&#12540;&#12488;&#35388;&#26126;&#26360;&#12398;&#38918;&#12395;&#12289;&#32626;&#21517;&#12398;&#12388;&#12394;&#12364;&#12426;&#12434;&#26908;&#35388;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#26908;&#35388;&#12398;&#31278;&#39006;&#12399;&#12289;&#12489;&#12513;&#12452;&#12531;&#12398;&#31649;&#29702;&#27177;&#38480;&#12384;&#12369;&#12434;&#30906;&#35469;&#12377;&#12427;DV&#12289;&#32068;&#32340;&#12398;&#23455;&#22312;&#12418;&#30906;&#35469;&#12377;&#12427;OV&#12289;EV&#12398;3&#12388;&#12391;&#12377;&#12290;&#26263;&#21495;&#21270;&#12398;&#24375;&#24230;&#12399;&#12289;&#12393;&#12428;&#12418;&#22793;&#12431;&#12426;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;&#20844;&#30340;&#12395;&#20449;&#38972;&#12373;&#12428;&#12427;&#35388;&#26126;&#26360;&#12398;&#26368;&#38263;&#26377;&#21177;&#26399;&#38291;&#12399;&#12289;CA/Browser Forum&#12398;&#27770;&#23450;&#12395;&#12424;&#12426;&#12289;2026&#24180;3&#26376;&#12363;&#12425;2029&#24180;3&#26376;&#12395;&#12363;&#12369;&#12390;&#12289;398&#26085;&#12363;&#12425;47&#26085;&#12408;&#27573;&#38542;&#30340;&#12395;&#30701;&#12367;&#12394;&#12426;&#12414;&#12377;&#12290;&#25163;&#20316;&#26989;&#12398;&#26356;&#26032;&#12391;&#12399;&#36939;&#29992;&#12364;&#22238;&#12425;&#12394;&#12367;&#12394;&#12427;&#12383;&#12417;&#12289;&#33258;&#21205;&#26356;&#26032;&#12364;&#21069;&#25552;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;SSL/TLS&#35388;&#26126;&#26360;&#12398;&#30906;&#35469;&#26041;&#27861;&#12502;&#12521;&#12454;&#12470;&#12398;&#12450;&#12489;&#12524;&#12473;&#12496;&#12540;&#12398;&#37749;&#12398;&#12450;&#12452;&#12467;&#12531;&#12363;&#12425;&#12289;&#35388;&#26126;&#26360;&#12398;&#30330;&#34892;&#32773;&#12392;&#26377;&#21177;&#26399;&#38480;&#12434;&#30906;&#35469;&#12391;&#12365;&#12414;&#12377;&#12290;&#12467;&#12510;&#12531;&#12489;&#12391;&#12399;&#27425;&#12398;&#12392;&#12362;&#12426;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;echo &#124; openssl s_client -connect example.com:443 -servername example.com 2&#38;gt;/dev/null &#124; openssl x509 -noout -subject -issuer -dates -ext subjectAltName&#38;lt;/code&#38;gt; 30&#26085;&#20197;&#20869;&#12395;&#20999;&#12428;&#12427;&#12363;&#12393;&#12358;&#12363;&#12399;&#12289;&#27425;&#12398;&#12467;&#12510;&#12531;&#12489;&#12391;&#21028;&#23450;&#12391;&#12365;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;echo &#124; openssl s_client -connect example.com:443 -servername example.com 2&#38;gt;/dev/null &#124; openssl x509 -noout -checkend 2592000&#38;lt;/code&#38;gt; &#12300;Certificate will not expire&#12301;&#12392;&#20986;&#12428;&#12400;&#12289;30&#26085;&#20197;&#19978;&#12398;&#20313;&#35029;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;SSL/TLS&#35388;&#26126;&#26360;&#12398;&#35373;&#23450;&#20363;&#28961;&#26009;&#12391;&#33258;&#21205;&#26356;&#26032;&#12391;&#12365;&#12427;Let&#38;#039;s Encrypt&#12434;&#12289;certbot&#12391;&#23566;&#20837;&#12377;&#12427;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;sudo certbot --nginx -d example.com -d www.example.comsudo certbot renew --dry-run&#38;lt;/code&#38;gt; Apache&#12398;&#22580;&#21512;&#12399;&#12289;&#38;lt;code&#38;gt;--nginx&#38;lt;/code&#38;gt; &#12434; &#38;lt;code&#38;gt;--apache&#38;lt;/code&#38;gt; &#12395;&#26367;&#12360;&#12414;&#12377;&#12290;2&#34892;&#30446;&#12399;&#12289;&#33258;&#21205;&#26356;&#26032;&#12364;&#21205;&#12367;&#12363;&#12398;&#35430;&#39443;&#12391;&#12377;&#12290;&#35388;&#26126;&#26360;&#12501;&#12449;&#12452;&#12523;&#12434;&#33258;&#20998;&#12391;&#25351;&#23450;&#12377;&#12427;&#22580;&#21512;&#12399;&#12289;&#20013;&#38291;&#35388;&#26126;&#26360;&#12434;&#21547;&#12416; &#38;lt;code&#38;gt;fullchain.pem&#38;lt;/code&#38;gt; &#12434;&#20351;&#12356;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;nginx&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;&#38;lt;/code&#38;gt; Apache&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;SSLCertificateFile    /etc/letsencrypt/live/example.com/fullchain.pemSSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem&#38;lt;/code&#38;gt; WordPress&#12391;&#12399;&#12289;&#35388;&#26126;&#26360;&#33258;&#20307;&#12399;&#12469;&#12540;&#12496;&#12540;&#20596;&#12391;&#35373;&#23450;&#12375;&#12414;&#12377;&#12290;&#31649;&#29702;&#30011;&#38754;&#12398;&#12300;&#35373;&#23450;&#12301;&#12300;&#19968;&#33324;&#12301;&#12391;&#12289;&#12469;&#12452;&#12488;&#12450;&#12489;&#12524;&#12473;&#12434; &#38;lt;code&#38;gt;https://&#38;lt;/code&#38;gt; &#12395;&#22793;&#26356;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12424;&#12367;&#12354;&#12427;&#38291;&#36949;&#12356;&#12392;&#27880;&#24847;&#28857;&#38;lt;code&#38;gt;www&#38;lt;/code&#38;gt; &#12354;&#12426;&#12392;&#28961;&#12375;&#12398;&#29255;&#26041;&#12384;&#12369;&#12364;&#23550;&#35937;&#12395;&#12394;&#12387;&#12390;&#12356;&#12427;&#12392;&#12289;&#12418;&#12358;&#19968;&#26041;&#12391;&#12456;&#12521;&#12540;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;&#12527;&#12452;&#12523;&#12489;&#12459;&#12540;&#12489;&#35388;&#26126;&#26360;(&#38;lt;code&#38;gt;*.example.com&#38;lt;/code&#38;gt;)&#12399;&#12289;&#38;lt;code&#38;gt;example.com&#38;lt;/code&#38;gt; &#33258;&#20307;&#12420;&#12289;&#38;lt;code&#38;gt;a.b.example.com&#38;lt;/code&#38;gt; &#12398;&#12424;&#12358;&#12394;2&#38542;&#23652;&#30446;&#12395;&#12399;&#20351;&#12360;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;&#20013;&#38291;&#35388;&#26126;&#26360;&#12434;&#20837;&#12428;&#24536;&#12428;&#12427;&#12392;&#12289;&#19968;&#37096;&#12398;&#31471;&#26411;&#12420;&#12450;&#12503;&#12522;&#12384;&#12369;&#12391;&#12456;&#12521;&#12540;&#12395;&#12394;&#12426;&#12289;&#25163;&#20803;&#12398;&#12502;&#12521;&#12454;&#12470;&#12391;&#12399;&#27671;&#12389;&#12369;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;&#33258;&#21205;&#26356;&#26032;&#12434;&#35373;&#23450;&#12375;&#12390;&#12418;&#12289;&#26356;&#26032;&#12398;&#22833;&#25943;&#12395;&#12399;&#27671;&#12389;&#12369;&#12414;&#12379;&#12435;&#12290;&#26377;&#21177;&#26399;&#38480;&#12398;&#30435;&#35222;&#12434;&#21029;&#12395;&#29992;&#24847;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#26356;&#26032;&#12398;&#36890;&#30693;&#12513;&#12540;&#12523;&#12398;&#23451;&#20808;&#12364;&#12289;&#36864;&#32887;&#12375;&#12383;&#25285;&#24403;&#32773;&#12398;&#12414;&#12414;&#12395;&#12394;&#12387;&#12390;&#12356;&#12394;&#12356;&#12363;&#12434;&#30906;&#35469;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#31192;&#23494;&#37749;&#12434;&#28431;&#12425;&#12375;&#12383;&#21487;&#33021;&#24615;&#12364;&#12354;&#12427;&#22580;&#21512;&#12399;&#12289;&#35388;&#26126;&#26360;&#12398;&#22833;&#21177;&#12392;&#20877;&#30330;&#34892;&#12364;&#24517;&#35201;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12391;&#30906;&#35469;&#12377;&#12427;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12399;&#12289;&#35388;&#26126;&#26360;&#12398;&#26377;&#21177;&#26399;&#38480;&#12289;&#12489;&#12513;&#12452;&#12531;&#21517;&#12392;&#12398;&#19968;&#33268;&#12289;&#33258;&#24049;&#32626;&#21517;&#12420;&#20013;&#38291;&#35388;&#26126;&#26360;&#12398;&#19981;&#36275;&#12289;&#37749;&#12398;&#24375;&#24230;&#12394;&#12393;&#12434;&#35386;&#26029;&#12375;&#12414;&#12377;&#12290;&#26399;&#38480;&#12364;&#36817;&#12356;&#22580;&#21512;&#12399;&#12289;&#27531;&#12426;&#26085;&#25968;&#12418;&#31034;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38306;&#36899;&#29992;&#35486;TLS&#38;lt;br/&#38;gt;HSTS&#38;lt;br/&#38;gt;&#28151;&#22312;&#12467;&#12531;&#12486;&#12531;&#12484;&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;&#12469;&#12452;&#12488;&#12398;&#35373;&#23450;&#12434;&#28961;&#26009;&#12391;&#30906;&#35469;&#12377;&#12427;&#12469;&#12452;&#12488;&#12398;URL&#12434;&#20837;&#21147;&#12377;&#12427;&#12384;&#12369;&#12391;&#12289;SSL/TLS&#35388;&#26126;&#26360; &#12394;&#12393;&#12398;&#35373;&#23450;&#29366;&#27841;&#12434;&#35386;&#26029;&#12391;&#12365;&#12414;&#12377;&#12290;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12300;Security Checker X&#12301;&#12399;&#12289;&#30331;&#37682;&#12394;&#12375;&#12391;&#20351;&#12360;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#60;/div&#62;"  href="https://slt-inc.jp/glossary/ssl-tls-certificate/"  data-gt-translate-attributes='[{"attribute":"data-cmtooltip", "format":"html"}]'  tabindex='0' role='link'>SSL/TLS&#35388;&#26126;&#26360;</a>&#12398;&#26377;&#21177;&#26399;&#38480;&#12289;&#12507;&#12473;&#12488;&#21517;(SAN)&#12289;&#20013;&#38291;&#35388;&#26126;&#26360;&#12398;&#12481;&#12455;&#12540;&#12531;&#12289;<a class="glossaryLink"  aria-describedby="tt"  data-cmtooltip="&#60;div class=glossaryItemBody&#62;TLS&#12392;&#12399;TLS(Transport Layer Security)&#12399;&#12289;&#12452;&#12531;&#12479;&#12540;&#12493;&#12483;&#12488;&#12398;&#36890;&#20449;&#12434;&#26263;&#21495;&#21270;&#12375;&#12289;&#30423;&#32884;&#12289;&#25913;&#12374;&#12435;&#12289;&#12394;&#12426;&#12377;&#12414;&#12375;&#12363;&#12425;&#23432;&#12427;&#36890;&#20449;&#12503;&#12525;&#12488;&#12467;&#12523;&#12391;&#12377;&#12290;SSL&#12398;&#24460;&#32153;&#12395;&#12354;&#12383;&#12426;&#12414;&#12377;&#12290;URL&#12364; &#38;lt;code&#38;gt;https://&#38;lt;/code&#38;gt; &#12391;&#22987;&#12414;&#12427;&#12398;&#12399;&#12289;HTTP&#12398;&#36890;&#20449;&#12434;TLS&#12398;&#19978;&#12391;&#34892;&#12387;&#12390;&#12356;&#12427;&#12392;&#12356;&#12358;&#24847;&#21619;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;TLS&#12398;&#35373;&#23450;&#12364;&#24517;&#35201;&#12394;&#29702;&#30001;TLS&#12395;&#12399;&#29256;&#12364;&#12354;&#12426;&#12289;&#21476;&#12356;&#29256;&#12399;&#25915;&#25731;&#25163;&#27861;&#12364;&#30693;&#12425;&#12428;&#12390;&#12356;&#12414;&#12377;&#12290;&#12469;&#12540;&#12496;&#12540;&#12364;&#21476;&#12356;&#29256;&#12434;&#21463;&#12369;&#20184;&#12369;&#12383;&#12414;&#12414;&#12384;&#12392;&#12289;&#36890;&#20449;&#30456;&#25163;&#12395;&#12424;&#12387;&#12390;&#12399;&#12289;&#24369;&#12356;&#26041;&#24335;&#12391;&#26263;&#21495;&#21270;&#12373;&#12428;&#12414;&#12377;&#12290;SSL 3.0&#12395;&#12399;&#12289;&#36890;&#20449;&#20869;&#23481;&#12398;&#19968;&#37096;&#12364;&#21462;&#12426;&#20986;&#12373;&#12428;&#12427;&#12300;POODLE&#12301;&#12392;&#21628;&#12400;&#12428;&#12427;&#25915;&#25731;&#12364;2014&#24180;&#12395;&#20844;&#34920;&#12373;&#12428;&#12414;&#12375;&#12383;&#12290;&#38;lt;br/&#38;gt;&#12463;&#12524;&#12472;&#12483;&#12488;&#12459;&#12540;&#12489;&#24773;&#22577;&#12434;&#25201;&#12358;&#12469;&#12452;&#12488;&#12391;&#12399;&#12289;&#26989;&#30028;&#22522;&#28310;&#12398;PCI DSS&#12418;&#12289;&#21476;&#12356;&#29256;&#12398;&#28961;&#21177;&#21270;&#12434;&#27714;&#12417;&#12390;&#12356;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;TLS&#12398;&#20181;&#32068;&#12415;&#38;lt;ol&#38;gt;&#12502;&#12521;&#12454;&#12470;&#12364;&#12289;&#23550;&#24540;&#12377;&#12427;TLS&#12398;&#29256;&#12392;&#26263;&#21495;&#12473;&#12452;&#12540;&#12488;&#12398;&#19968;&#35239;&#12434;&#12469;&#12540;&#12496;&#12540;&#12395;&#36865;&#12427;&#12290;&#38;lt;br/&#38;gt;&#12469;&#12540;&#12496;&#12540;&#12364;&#12289;&#20351;&#12358;&#29256;&#12392;&#26263;&#21495;&#12473;&#12452;&#12540;&#12488;&#12434;&#36984;&#12403;&#12289;&#35388;&#26126;&#26360;&#12434;&#36865;&#12427;&#12290;&#38;lt;br/&#38;gt;&#21452;&#26041;&#12364;&#37749;&#20132;&#25563;&#12391;&#12289;&#12381;&#12398;&#36890;&#20449;&#12384;&#12369;&#12398;&#20849;&#36890;&#37749;&#12434;&#20316;&#12427;&#12290;&#38;lt;br/&#38;gt;&#20197;&#38477;&#12398;&#36890;&#20449;&#12399;&#12289;&#20849;&#36890;&#37749;&#12391;&#26263;&#21495;&#21270;&#12373;&#12428;&#12427;&#12290;&#38;lt;br/&#38;gt;&#38;lt;/ol&#38;gt;&#38;lt;table&#38;gt;&#38;lt;thead&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;th&#38;gt;&#29256;&#38;lt;/th&#38;gt;&#38;lt;th&#38;gt;&#29366;&#27841;&#38;lt;/th&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/thead&#38;gt;&#38;lt;tbody&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;SSL 2.0&#12289;SSL 3.0&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#33030;&#24369;&#24615;&#12364;&#30693;&#12425;&#12428;&#12390;&#12362;&#12426;&#12289;&#20351;&#29992;&#31105;&#27490;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;TLS 1.0&#12289;1.1&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;2021&#24180;&#12395;RFC 8996&#12391;&#38750;&#25512;&#22888;&#12290;&#20027;&#35201;&#12502;&#12521;&#12454;&#12470;&#12418;&#23550;&#24540;&#12434;&#32066;&#20102;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;TLS 1.2&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#29694;&#22312;&#12418;&#24195;&#12367;&#20351;&#12431;&#12428;&#12427;&#12290;&#35373;&#23450;&#27425;&#31532;&#12391;&#23433;&#20840;&#12395;&#20351;&#12360;&#12427;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;TLS 1.3&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#26368;&#26032;&#12398;&#29256;(RFC 8446)&#12290;&#24369;&#12356;&#26041;&#24335;&#12364;&#20181;&#27096;&#12363;&#12425;&#21462;&#12426;&#38500;&#12363;&#12428;&#12289;&#25509;&#32154;&#12418;&#36895;&#12356;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/tbody&#38;gt;&#38;lt;/table&#38;gt;TLS&#12398;&#30906;&#35469;&#26041;&#27861;&#12469;&#12540;&#12496;&#12540;&#12364;&#29305;&#23450;&#12398;&#29256;&#12434;&#21463;&#12369;&#20184;&#12369;&#12427;&#12363;&#12399;&#12289;&#29256;&#12434;&#25351;&#23450;&#12375;&#12390;&#25509;&#32154;&#12375;&#12390;&#35519;&#12409;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;openssl s_client -connect example.com:443 -servername example.com -tls1_2 &#38;amp;lt;/dev/null 2&#38;amp;gt;/dev/null &#124; grep -E &#38;#039;Protocol&#124;Cipher&#38;#039;openssl s_client -connect example.com:443 -servername example.com -tls1_3 &#38;amp;lt;/dev/null 2&#38;amp;gt;/dev/null &#124; grep -E &#38;#039;Protocol&#124;Cipher&#38;#039;&#38;lt;/code&#38;gt; &#12300;Cipher is (NONE)&#12301;&#12392;&#20986;&#12428;&#12400;&#12289;&#12381;&#12398;&#29256;&#12399;&#21463;&#12369;&#20184;&#12369;&#12390;&#12356;&#12414;&#12379;&#12435;&#12290;&#29256;&#12392;&#26263;&#21495;&#12473;&#12452;&#12540;&#12488;&#12434;&#19968;&#35239;&#12377;&#12427;&#12395;&#12399;&#12289;&#38;lt;code&#38;gt;nmap --script ssl-enum-ciphers -p 443 example.com&#38;lt;/code&#38;gt; &#12418;&#20351;&#12360;&#12414;&#12377;&#12290;&#33258;&#20998;&#12398;&#12469;&#12452;&#12488;&#12395;&#12384;&#12369;&#23455;&#34892;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12362;&#20351;&#12356;&#12398;OpenSSL&#12364;&#21476;&#12356;&#29256;&#12391;&#12398;&#25509;&#32154;&#33258;&#20307;&#12434;&#28961;&#21177;&#12395;&#12375;&#12390;&#12356;&#12427;&#22580;&#21512;&#12399;&#12289;&#32080;&#26524;&#12364;&#12300;&#25298;&#21542;&#12301;&#12392;&#21306;&#21029;&#12391;&#12365;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;TLS&#12398;&#35373;&#23450;&#20363;TLS 1.2&#12392;1.3&#12384;&#12369;&#12434;&#35377;&#21487;&#12377;&#12427;&#20363;&#12391;&#12377;&#12290;&#26263;&#21495;&#12473;&#12452;&#12540;&#12488;&#12398;&#20006;&#12403;&#12399;&#12289;&#25163;&#12391;&#26360;&#12363;&#12378;&#12289;Mozilla&#12398;SSL Configuration Generator&#12398;&#20986;&#21147;&#12434;&#20351;&#12358;&#12398;&#12364;&#30906;&#23455;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;nginx&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;ssl_protocols TLSv1.2 TLSv1.3;&#38;lt;/code&#38;gt; Apache&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;SSLProtocol -all +TLSv1.2 +TLSv1.3&#38;lt;/code&#38;gt; WordPress&#20596;&#12395;&#12399;&#12289;TLS&#12398;&#35373;&#23450;&#12399;&#12354;&#12426;&#12414;&#12379;&#12435;&#12290;&#12524;&#12531;&#12479;&#12523;&#12469;&#12540;&#12496;&#12540;&#12391;&#12399;&#12289;&#12469;&#12540;&#12496;&#12540;&#12398;&#31649;&#29702;&#30011;&#38754;&#12391;TLS&#12398;&#26368;&#20302;&#12496;&#12540;&#12472;&#12519;&#12531;&#12434;&#36984;&#12406;&#12398;&#12364;&#19968;&#33324;&#30340;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12424;&#12367;&#12354;&#12427;&#38291;&#36949;&#12356;&#12392;&#27880;&#24847;&#28857;&#12300;&#21476;&#12356;&#31471;&#26411;&#12398;&#12383;&#12417;&#12395;&#12301;&#12392;TLS 1.0&#12420;1.1&#12434;&#27531;&#12377;&#21069;&#12395;&#12289;&#23455;&#38555;&#12398;&#21033;&#29992;&#32773;&#12398;&#21106;&#21512;&#12434;&#12525;&#12464;&#12391;&#30906;&#12363;&#12417;&#12414;&#12377;&#12290;nginx&#12391;&#12399;&#22793;&#25968; &#38;lt;code&#38;gt;$ssl_protocol&#38;lt;/code&#38;gt;&#12289;Apache&#12391;&#12399; &#38;lt;code&#38;gt;%{SSL_PROTOCOL}x&#38;lt;/code&#38;gt; &#12391;&#12525;&#12464;&#12395;&#27531;&#12379;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#35388;&#26126;&#26360;&#12398;&#26399;&#38480;&#20999;&#12428;&#12420;&#21517;&#21069;&#12398;&#19981;&#19968;&#33268;&#12399;&#12289;TLS&#12398;&#29256;&#12391;&#12399;&#12394;&#12367;&#35388;&#26126;&#26360;&#12398;&#21839;&#38988;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;CDN&#12420;&#12525;&#12540;&#12489;&#12496;&#12521;&#12531;&#12469;&#12540;&#12434;&#20351;&#12387;&#12390;&#12356;&#12427;&#22580;&#21512;&#12289;TLS&#12434;&#32066;&#31471;&#12377;&#12427;&#20596;&#12398;&#35373;&#23450;&#12364;&#12289;&#21033;&#29992;&#32773;&#12363;&#12425;&#35211;&#12360;&#12427;&#35373;&#23450;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;HTTP&#12398;&#12414;&#12414;&#12398;&#20837;&#21475;&#12364;&#27531;&#12387;&#12390;&#12356;&#12427;&#12392;&#12289;TLS&#12434;&#35373;&#23450;&#12375;&#12390;&#12418;&#24847;&#21619;&#12364;&#12354;&#12426;&#12414;&#12379;&#12435;&#12290;HTTP&#12363;&#12425;HTTPS&#12408;&#12398;&#36578;&#36865;&#12418;&#30906;&#35469;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12391;&#30906;&#35469;&#12377;&#12427;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12399;&#12289;&#21463;&#12369;&#20184;&#12369;&#12390;&#12356;&#12427;TLS&#12398;&#29256;&#12289;&#24369;&#12356;&#26263;&#21495;&#12473;&#12452;&#12540;&#12488;&#12289;HTTP&#12363;&#12425;HTTPS&#12408;&#12398;&#36578;&#36865;&#12398;&#26377;&#28961;&#12434;&#35386;&#26029;&#12375;&#12414;&#12377;&#12290;TLS 1.3&#12395;&#26410;&#23550;&#24540;&#12398;&#22580;&#21512;&#12418;&#12289;&#21442;&#32771;&#24773;&#22577;&#12392;&#12375;&#12390;&#31034;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38306;&#36899;&#29992;&#35486;SSL/TLS&#35388;&#26126;&#26360;&#38;lt;br/&#38;gt;HSTS&#38;lt;br/&#38;gt;&#28151;&#22312;&#12467;&#12531;&#12486;&#12531;&#12484;&#38;lt;br/&#38;gt;&#33030;&#24369;&#24615;&#35386;&#26029;&#38;lt;br/&#38;gt;&#38;lt;br/&#38;gt;&#12469;&#12452;&#12488;&#12398;&#35373;&#23450;&#12434;&#28961;&#26009;&#12391;&#30906;&#35469;&#12377;&#12427;&#12469;&#12452;&#12488;&#12398;URL&#12434;&#20837;&#21147;&#12377;&#12427;&#12384;&#12369;&#12391;&#12289;TLS &#12394;&#12393;&#12398;&#35373;&#23450;&#29366;&#27841;&#12434;&#35386;&#26029;&#12391;&#12365;&#12414;&#12377;&#12290;Web&#12469;&#12452;&#12488; &#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12481;&#12455;&#12483;&#12459;&#12540;&#12300;Security Checker X&#12301;&#12399;&#12289;&#30331;&#37682;&#12394;&#12375;&#12391;&#20351;&#12360;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#60;/div&#62;"  href="https://slt-inc.jp/glossary/tls/"  data-gt-translate-attributes='[{"attribute":"data-cmtooltip", "format":"html"}]'  tabindex='0' role='link'>TLS</a>&#12398;&#29256;&#12434;&#12289;&#12502;&#12521;&#12454;&#12470;&#12289;openssl&#12289;curl&#12391;&#30906;&#12363;&#12417;&#12427;&#25163;&#38918;&#12290;&#20986;&#21147;&#12398;&#35501;&#12415;&#26041;&#12289;&#26399;&#38480;&#20999;&#12428;&#12398;&#23550;&#20966;&#12289;&#33258;&#21205;&#26356;&#26032;&#12392;&#30435;&#35222;&#12289;2029&#24180;&#12395;47&#26085;&#12392;&#12394;&#12427;&#26377;&#21177;&#26399;&#38291;&#12398;&#30701;&#32302;&#12414;&#12391;&#25972;&#29702;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;</p>
<p>The post <a href="https://slt-inc.jp/article/ssl-tls-certificate-check/">SSL/TLS証明書のチェック方法|有効期限・チェーン・通信方式の確認手順</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><a href="https://slt-inc.jp/glossary/ssl-tls-certificate/">SSL/TLS証明書</a>の確認は、有効期限、ホスト名(SAN)の一致、中間証明書を含むチェーンの3点が基本です。PCのブラウザは足りない中間証明書を補うことがあるため、チェーンはopensslの『Verify return code: 0 (ok)』で判定します。TLS 1.2と1.3だけが有効か、HTTPが301でHTTPSへ転送されるかも確認の対象です。公的な証明書の最長有効期間は、2026年3月15日以降の発行分で200日、2029年3月15日以降は47日になるため、更新は自動化して外から監視します。</p></div>

<h2>SSL/TLS証明書で確認する6項目と合格の基準</h2>
<p>確認する項目は、有効期限、ホスト名(SAN)、チェーン、<a href="https://slt-inc.jp/glossary/tls/">TLS</a>の版、暗号スイート、HTTPSへの転送の6つです。項目ごとに合格の基準を先に決めておくと、ブラウザやコマンドの結果をそのまま判定に使えます。</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>残りが有効期間の3分の1を超えている</td><td>ブラウザ、openssl x509</td><td>画面全体の警告、API連携の停止</td></tr>
<tr><td>ホスト名(SAN)</td><td>使うすべてのホスト名がSANに入っている</td><td>ブラウザ、openssl x509</td><td>名前が一致しないという警告</td></tr>
<tr><td>チェーン</td><td>中間証明書まで送られ、検証結果が0 (ok)</td><td>openssl s_client</td><td>curlや外部システムからの接続が失敗</td></tr>
<tr><td>TLSの版</td><td>1.2と1.3は接続でき、1.0と1.1は拒否される</td><td>openssl s_client</td><td>診断で古い方式を指摘される</td></tr>
<tr><td>暗号スイート</td><td>ECDHEとAEAD(AES-GCM、ChaCha20-Poly1305)に限る</td><td>openssl s_client、デベロッパーツール</td><td>診断で弱い暗号を指摘される</td></tr>
<tr><td>HTTPS転送とHSTS</td><td>HTTPは301でHTTPSへ移り、HSTSのヘッダーがある</td><td>curl</td><td>『保護されていない通信』の表示、HTTPを開く前の警告</td></tr>
</tbody></table></div>
<p>期限の基準を『残り3分の1』としたのは、Let&#8217;s EncryptとCertbot(4.0以降)の更新時期に合わせたためです。200日の証明書なら残り約66日、90日なら残り30日が目安です。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 420" xmlns="http://www.w3.org/2000/svg"><title>証明書の確認の流れと合格の基準</title><desc>ブラウザで開く、有効期限を読む、SANを確かめる、チェーンを確かめる、TLSの版を試す、HTTPとHSTSを見る、の6段階を上から順に並べ、各段階の右に合格の基準を示した図。</desc><defs><marker id="slt-f1-arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="5" markerHeight="5" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#4A5C82"/></marker></defs><text x="70" y="30" font-size="22" font-weight="bold" fill="#10265A">確認すること</text><text x="496" y="30" font-size="22" font-weight="bold" fill="#10265A">合格の基準</text><line x1="34" y1="50" x2="34" y2="400" stroke="#4A5C82" stroke-width="3" marker-end="url(#slt-f1-arrow)"/><rect x="55" y="48" width="370" height="48" rx="8" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="72" y="80" font-size="22" fill="#10265A">1 ブラウザで開く</text><line x1="428" y1="72" x2="472" y2="72" stroke="#4A5C82" stroke-width="3" marker-end="url(#slt-f1-arrow)"/><rect x="480" y="48" width="300" height="48" rx="8" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="496" y="80" font-size="22" fill="#10265A">警告が出ない</text><rect x="55" y="109" width="370" height="48" rx="8" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="72" y="141" font-size="22" fill="#10265A">2 有効期限を読む</text><line x1="428" y1="133" x2="472" y2="133" stroke="#4A5C82" stroke-width="3" marker-end="url(#slt-f1-arrow)"/><rect x="480" y="109" width="300" height="48" rx="8" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="496" y="141" font-size="22" fill="#10265A">残りが期間の3分の1超</text><rect x="55" y="170" width="370" height="48" rx="8" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="72" y="202" font-size="22" fill="#10265A">3 SANを確かめる</text><line x1="428" y1="194" x2="472" y2="194" stroke="#4A5C82" stroke-width="3" marker-end="url(#slt-f1-arrow)"/><rect x="480" y="170" width="300" height="48" rx="8" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="496" y="202" font-size="22" fill="#10265A">全ホスト名を含む</text><rect x="55" y="231" width="370" height="48" rx="8" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="72" y="263" font-size="22" fill="#10265A">4 チェーンを確かめる</text><line x1="428" y1="255" x2="472" y2="255" stroke="#4A5C82" stroke-width="3" marker-end="url(#slt-f1-arrow)"/><rect x="480" y="231" width="300" height="48" rx="8" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="496" y="263" font-size="22" fill="#10265A">return code: 0 (ok)</text><rect x="55" y="292" width="370" height="48" rx="8" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="72" y="324" font-size="22" fill="#10265A">5 TLSの版を試す</text><line x1="428" y1="316" x2="472" y2="316" stroke="#4A5C82" stroke-width="3" marker-end="url(#slt-f1-arrow)"/><rect x="480" y="292" width="300" height="48" rx="8" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="496" y="324" font-size="22" fill="#10265A">1.0と1.1は接続不可</text><rect x="55" y="353" width="370" height="48" rx="8" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="72" y="385" font-size="22" fill="#10265A">6 HTTPとHSTSを見る</text><line x1="428" y1="377" x2="472" y2="377" stroke="#4A5C82" stroke-width="3" marker-end="url(#slt-f1-arrow)"/><rect x="480" y="353" width="300" height="48" rx="8" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="496" y="385" font-size="22" fill="#10265A">301転送とHSTSあり</text></svg><figcaption>図1 証明書の確認の流れ。上から順に確かめ、右の基準をすべて満たせば合格です。</figcaption></figure>
<p>6項目をまとめて外から確かめるなら、当社の無料ツール『<a href="https://slt-inc.jp/service/security-checker/">Webサイトのセキュリティチェック</a>』も使えます。URLを入れるだけで、証明書の期限、ホスト名、中間証明書の不足、古いTLSや弱い暗号、HTTPSへの転送などを確認できます(登録不要)。</p>
<p>外から見える設定を受動的に調べる検査のため、<a href="https://slt-inc.jp/glossary/vulnerability-assessment/">脆弱性診断</a>の代わりにはなりません。役割の違いは『<a href="https://slt-inc.jp/article/vulnerability-assessment-vs-simple-check/">簡易チェックと脆弱性診断の違い</a>』に、証明書以外の点検項目は『<a href="https://slt-inc.jp/article/website-security-check-items/">Webサイトのセキュリティチェック項目30選</a>』にまとめています。</p>

<h2>証明書のチェーンの仕組み(ルート、中間、サーバー証明書)</h2>
<p>ブラウザは、サーバー証明書から中間証明書をたどり、端末に入っているルート証明書に行き着けたときだけ証明書を信頼します。サーバーが送るのはサーバー証明書と中間証明書で、ルート証明書は送らなくてかまいません(TLS 1.3の仕様、RFC 8446)。</p>
<p>ルート証明書は認証局の大本で、OSやブラウザの信頼ストアに最初から入っています。中間証明書はルート証明書の署名を受けた認証局の証明書で、サーバー証明書に署名する役割です。サーバー証明書はドメインごとに発行され、SAN(サブジェクトの代替名)に対象のホスト名が並びます。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 400" xmlns="http://www.w3.org/2000/svg"><title>証明書のチェーンの構造と、サーバーが送る範囲</title><desc>ルート証明書が中間証明書に署名し、中間証明書がサーバー証明書に署名する3段の構造。中間証明書とサーバー証明書を赤い破線で囲み、サーバーが送る範囲であることを示す。ルート証明書は端末の信頼ストアにあり、サーバーは送らなくてよい。</desc><defs><marker id="slt-f2-arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="5" markerHeight="5" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#10265A"/></marker></defs><rect x="60" y="24" width="300" height="72" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="210" y="68" font-size="24" font-weight="bold" fill="#10265A" text-anchor="middle">ルート証明書</text><line x1="210" y1="98" x2="210" y2="158" stroke="#10265A" stroke-width="3" marker-end="url(#slt-f2-arrow)"/><text x="226" y="136" font-size="22" fill="#10265A">署名</text><rect x="40" y="146" width="340" height="244" rx="14" fill="none" stroke="#D00A0A" stroke-width="3" stroke-dasharray="10 8"/><rect x="60" y="164" width="300" height="72" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="210" y="208" font-size="24" font-weight="bold" fill="#10265A" text-anchor="middle">中間証明書</text><line x1="210" y1="238" x2="210" y2="298" stroke="#10265A" stroke-width="3" marker-end="url(#slt-f2-arrow)"/><text x="226" y="276" font-size="22" fill="#10265A">署名</text><rect x="60" y="304" width="300" height="72" rx="10" fill="#FFFFFF" stroke="#10265A" stroke-width="3"/><text x="210" y="348" font-size="24" font-weight="bold" fill="#10265A" text-anchor="middle">サーバー証明書</text><text x="400" y="54" font-size="22" fill="#10265A">端末の信頼ストアにある</text><text x="400" y="86" font-size="22" fill="#10265A">サーバーは送らなくてよい</text><line x1="382" y1="225" x2="396" y2="225" stroke="#D00A0A" stroke-width="3"/><text x="400" y="232" font-size="22" font-weight="bold" fill="#10265A">サーバーが送る範囲</text><text x="400" y="264" font-size="22" fill="#10265A">(fullchain.pemの中身)</text><text x="400" y="328" font-size="22" fill="#10265A">中間証明書が欠けると</text><text x="400" y="360" font-size="22" fill="#10265A">curlやアプリで失敗する</text></svg><figcaption>図2 チェーンの構造。ルート証明書が中間証明書に、中間証明書がサーバー証明書に署名します。サーバーが送るのは赤い破線の範囲で、ブラウザはサーバー証明書から上へたどり、端末にあるルート証明書で検証を終えます。</figcaption></figure>
<p>Certbotで取得した場合は、サーバー証明書と中間証明書をこの順につないだ <code>fullchain.pem</code> をWebサーバーに設定します。</p>
<h3>PCのブラウザで開けても、チェーンの欠落は隠れる</h3>
<p>中間証明書を送っていないサーバーでも、PCのブラウザでは警告が出ないことがあります。Chromeは足りない中間証明書を証明書内の情報(AIA)から取りに行き、Firefoxは信頼された中間証明書をあらかじめ取り込んでいるためです。</p>
<p>一方、curlやOpenSSLで通信するプログラムは、足りない中間証明書を自動では補いません。同じ設定でも、外部システムからのAPI接続や監視ツールだけが『unable to get local issuer certificate』で失敗します。</p>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>『自分のPCのブラウザで開けた』は、チェーンが正しい証拠になりません。証明書を差し替えたら、opensslかcurlで外から判定します。</p></div>

<h2>ブラウザでSSL証明書を確認する手順(Chrome、Edge、Firefox、Safari)</h2>
<p>ブラウザでは、アドレスバー左端のアイコンから証明書の画面を開き、発行先、発行元、有効期間を確かめます。ChromeとEdgeは同じ形式の画面で、Firefoxはチェーンの証明書をタブで切り替えて表示します。</p>
<h3>Chromeで証明書を開く手順</h3>
<ol class="slt-steps">
<li><strong>アイコンを開く</strong>アドレスバー左端の『サイト情報を表示』アイコンをクリックします。</li>
<li><strong>接続の情報を開く</strong>『この接続は保護されています』をクリックします。</li>
<li><strong>証明書の画面を開く</strong>『証明書は有効です』をクリックすると、証明書の画面が開きます。</li>
<li><strong>期限と発行元を読む</strong>『全般』タブで、発行先、発行元、有効期間(発行日と有効期限)を確かめます。</li>
<li><strong>チェーンとSANを読む</strong>『詳細』タブの『証明書の階層』でチェーンを、『証明書のフィールド』の『証明書のサブジェクトの代替名』でSANを確かめます。</li>
</ol>
<h3>Edge、Firefox、Safariでの開き方</h3>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>ブラウザ</th><th>証明書を開く手順</th><th>確かめられること</th></tr></thead><tbody>
<tr><td>Edge</td><td>鍵のアイコン → 『接続がセキュリティで保護されています』 → 証明書のアイコン(『証明書を表示』)</td><td>Chromeと同じく、『全般』で期限、『詳細』の『証明書の階層』でチェーン</td></tr>
<tr><td>Firefox</td><td>鍵のアイコン → 『安全な接続』 → 『詳細を表示』 → 『セキュリティ』の『証明書を表示&#8230;』</td><td>証明書ごとのタブ、『有効期間』の『終了日時』、『主体者代替名』の『DNS 名』</td></tr>
<tr><td>Safari(Mac)</td><td>メニューバーの『Safari』 → 『接続セキュリティの詳細』</td><td>暗号化の有無。証明書の警告が出たときは『証明書を表示』で内容を確認</td></tr>
</tbody></table></div>
<h3>デベロッパーツールでTLSの版と暗号を見る</h3>
<p>TLSの版と暗号は、Chromeのデベロッパーツールの『セキュリティ』パネルで確かめられます。デベロッパーツールを開いてCtrl+Shift+P(MacはCommand+Shift+P)を押し、『セキュリティを表示』と入力すると移動できます。</p>
<p>『接続』の欄には、TLSの版(例: TLS 1.3)、鍵交換(例: X25519MLKEM768)、暗号(例: AES_128_GCM)が並びます。古い版や弱い方式を使っていると『廃止された接続設定』と表示されるので、見直しの目安になります。</p>

<h2>opensslでSSL証明書の有効期限、発行者、SANを確認する</h2>
<p><code>openssl s_client</code> でサーバーから証明書を受け取り、<code>openssl x509</code> で期限、発行者、SANを表示します。Linuxのサーバー上のほか、WindowsではGit for Windowsに付属するGit Bashでも同じコマンドが使えます。</p>
<pre class="slt-code"><code>openssl s_client -connect example.com:443 -servername example.com \
  &lt;/dev/null 2&gt;/dev/null \
  | openssl x509 -noout -subject -issuer -dates -ext subjectAltName</code></pre>
<p>出力の例です(値は説明用です)。</p>
<pre class="slt-code"><code>subject=CN=example.com
issuer=C=JP, O=Example Trust, CN=Example Intermediate CA R1
notBefore=Sep 20 00:00:00 2026 GMT
notAfter=Dec 18 23:59:59 2026 GMT
X509v3 Subject Alternative Name:
    DNS:example.com, DNS:www.example.com</code></pre>
<h3>openssl x509の出力の読み方</h3>
<ul>
<li><code>subject</code>: 証明書の主体者です。CN=の値は参考で、名前の照合にはSANが使われます(RFC 9525)。</li>
<li><code>issuer</code>: この証明書に署名した中間認証局です。</li>
<li><code>notBefore</code>、<code>notAfter</code>: 有効期間の始まりと終わりです。GMT表記なので、日本時間は9時間足します(例の期限は日本時間の2026年12月19日8時59分59秒)。</li>
<li><code>X509v3 Subject Alternative Name</code>: 証明書が有効なホスト名の一覧です。wwwの有無やサブドメインを含め、使う名前がすべて入っているかを見ます。</li>
</ul>
<p>特定の名前が含まれるかは、OpenSSL 3系なら <code>-checkhost</code> で判定できます。サーバー上の証明書ファイルは、<code>-checkend</code> に秒数を渡すと、期限までの残りがそれより短いかを終了コードで返します。</p>
<pre class="slt-code"><code>openssl s_client -connect example.com:443 -servername example.com \
  &lt;/dev/null 2&gt;/dev/null | openssl x509 -noout -checkhost www.example.com
# 例: Hostname www.example.com does match certificate

# 残り30日(2,592,000秒)を切っていれば終了コード1(Certificate will expire)
sudo openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem \
  -noout -checkend 2592000</code></pre>
<div class="slt-callout is-note"><p class="slt-callout-title">補足</p><p><code>-ext</code> は OpenSSL 1.1.1 で加わったオプションです。それより古い版では、<code>-text</code> の出力から『DNS:』で始まる行を探します。</p></div>

<h2>opensslでチェーンの欠落と名前の不一致を判定する</h2>
<p>チェーンは、<code>s_client</code> が表示する証明書の一覧と、最後の『Verify return code』で判定します。0 (ok) なら合格で、中間証明書が欠けていると21になります。</p>
<pre class="slt-code"><code>openssl s_client -connect example.com:443 -servername example.com \
  -verify_hostname example.com &lt;/dev/null 2&gt;/dev/null \
  | grep -E '^ [0-9] s:|^   i:|^Verify return code'</code></pre>
<p>出力の例です。正常なときは、0番のサーバー証明書の発行者(i:)と、1番の中間証明書の主体者(s:)が同じ名前でつながります。中間証明書が欠けていると、1番の行が無く、21が返ります。</p>
<pre class="slt-code"><code># 正常な例
 0 s:CN=example.com
   i:C=JP, O=Example Trust, CN=Example Intermediate CA R1
 1 s:C=JP, O=Example Trust, CN=Example Intermediate CA R1
   i:C=JP, O=Example Trust, CN=Example Root CA
Verify return code: 0 (ok)

# 中間証明書が欠けている例
 0 s:CN=example.com
   i:C=JP, O=Example Trust, CN=Example Intermediate CA R1
Verify return code: 21 (unable to verify the first certificate)</code></pre>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>表示</th><th>意味</th><th>主な対処</th></tr></thead><tbody>
<tr><td>0 (ok)</td><td>検証に成功</td><td>対処は不要</td></tr>
<tr><td>10 (certificate has expired)</td><td>期限切れ</td><td>更新し、Webサーバーを再読み込みする</td></tr>
<tr><td>18 (self-signed certificate)</td><td>自己署名の証明書</td><td>公的な認証局の証明書に替える</td></tr>
<tr><td>20 (unable to get local issuer certificate)</td><td>発行元をたどれない</td><td>中間証明書を送る。手元の信頼ストアが古い場合もある</td></tr>
<tr><td>21 (unable to verify the first certificate)</td><td>サーバー証明書しか届いていない</td><td>中間証明書を含むfullchainを設定する</td></tr>
<tr><td>62 (hostname mismatch)</td><td>名前の不一致(-verify_hostname 指定時)</td><td>SANに名前を加えて再発行する</td></tr>
</tbody></table></div>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p><code>s_client</code> は検証に失敗しても接続を続け、終了コード0で終わります。判定は『Verify return code』の行で行い、スクリプトでは <code>-verify_return_error</code> を付けて失敗を終了コードに反映させます。</p><p>また、<code>-servername</code> は接続先の名前を伝える指定(SNI)で、名前の照合はしません。名前の不一致を判定するには <code>-verify_hostname</code> を付けます。</p></div>
<h3>複数台のサーバーを1台ずつ確かめる</h3>
<p>ロードバランサーの配下に複数台があると、1台だけ古い証明書が残ることがあります。<code>-connect</code> に各サーバーのIPアドレス、<code>-servername</code> に本来のホスト名を指定すると、台ごとに確かめられます。</p>
<pre class="slt-code"><code># 203.0.113.10 は説明用のアドレス。台ごとに書き換えて実行する
openssl s_client -connect 203.0.113.10:443 -servername www.example.com \
  &lt;/dev/null 2&gt;/dev/null | openssl x509 -noout -enddate</code></pre>
<p>CDNを使っている場合は、利用者に届くCDNの証明書と、CDNが接続する元サーバー(オリジン)の証明書が別物です。両方を監視の対象に入れます。</p>

<h2>curl -vで証明書とTLSの状態を確認する</h2>
<p><code>curl -v</code> は、使われたTLSの版と暗号、証明書の期限、SANの照合、検証の結果を1回で表示します。サーバー上での動作確認や、ブラウザと結果を比べたいときに向いています。</p>
<pre class="slt-code"><code>curl -sv -o /dev/null https://example.com/ 2&gt;&amp;1 \
  | grep -E 'SSL connection|subject|(start|expire) date|issuer|verified|verify ok'</code></pre>
<p>出力の例です(値は説明用です)。</p>
<pre class="slt-code"><code>* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / …
*   subject: CN=example.com
*   start date: Sep 20 00:00:00 2026 GMT
*   expire date: Dec 18 23:59:59 2026 GMT
*   issuer: C=JP; O=Example Trust; CN=Example Intermediate CA R1
*   subjectAltName: "example.com" matches cert's "example.com"
* SSL certificate verified via OpenSSL.</code></pre>
<p>『SSL connection using』の行がTLSの版と暗号、『expire date』が期限(GMT)、『subjectAltName』がSANの照合結果です。行末の鍵交換などの表示は、curlとTLSライブラリの組み合わせで変わります。curl 8.5など少し前の版では、最後の行が『SSL certificate verify ok.』と表示されます。</p>
<p>検証に失敗するとcurlは終了コード60で止まり、原因を英語で表示します(主な文言は後の表を参照)。</p>
<h3>Windows標準のcurlで確かめるとき</h3>
<p>Windowsに標準で入っている <code>curl.exe</code> は、Windowsの暗号機能(Schannel)で通信するため、<code>-v</code> を付けても証明書の期限や発行者が出ません。PowerShellで次のように <code>-w "%{certs}"</code> を使うと、証明書の主体者と期限を書き出せます。</p>
<pre class="slt-code"><code>curl.exe -s -o NUL -w "%{certs}" https://example.com/ |
  Select-String '^(Subject|Expire Date):'</code></pre>
<p>最初の2行がサーバー証明書の主体者と期限です(例: Expire Date:2026-12-18 23:59:59 GMT)。チェーンの欠落や名前の照合は、Git for Windowsに付属するopensslで、前の節のコマンドを使って確かめます。</p>

<h2>TLSの版と暗号スイートを確かめ、TLS 1.0と1.1を止める</h2>
<p>TLS 1.0と1.1はRFC 8996で廃止されており、TLS 1.2と1.3だけを有効にするのが現在の基準です。版を指定して接続を試し、1.2と1.3は接続でき、1.0と1.1は拒否されれば合格です。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>版</th><th>現在の扱い</th><th>根拠</th></tr></thead><tbody>
<tr><td>SSL 3.0</td><td>使用禁止</td><td>RFC 7568(2015年6月)</td></tr>
<tr><td>TLS 1.0</td><td>廃止</td><td><a href="https://www.rfc-editor.org/rfc/rfc8996">RFC 8996</a>(2021年3月)</td></tr>
<tr><td>TLS 1.1</td><td>廃止</td><td>RFC 8996(2021年3月)</td></tr>
<tr><td>TLS 1.2</td><td>対応が必須。2026年7月に機能を凍結</td><td>RFC 9325、<a href="https://www.rfc-editor.org/rfc/rfc9851">RFC 9851</a></td></tr>
<tr><td>TLS 1.3</td><td>対応を推奨し、優先して使う</td><td>RFC 9325、RFC 8446</td></tr>
</tbody></table></div>
<pre class="slt-code"><code># 1.2と1.3は、接続できれば合格(Protocol version の行を見る)
openssl s_client -connect example.com:443 -servername example.com \
  -tls1_2 -brief &lt;/dev/null
openssl s_client -connect example.com:443 -servername example.com \
  -tls1_3 -brief &lt;/dev/null
# 1.1は、拒否されれば合格(OpenSSL 3系は SECLEVEL=0 の指定が必要)
openssl s_client -connect example.com:443 -servername example.com \
  -tls1_1 -cipher 'DEFAULT:@SECLEVEL=0' &lt;/dev/null</code></pre>
<p>1.2と1.3で『Protocol version: TLSv1.2』のように表示されれば、その版で接続できています。1.1の試験で『alert protocol version』を含むエラーが出れば、サーバーが古い版を拒否しています。1.0の確認は、<code>-tls1</code> を指定する同じ手順です。</p>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>OpenSSL 3系は、既定の安全水準(SECLEVEL)でTLS 1.0と1.1を手元側で無効にしています。指定なしで <code>-tls1_1</code> を試すと『no protocols available』と出ますが、これは手元のOpenSSLが送信を止めただけで、サーバーの設定の結果ではありません。</p><p>接続できた場合に出る『New, TLSv1.0, Cipher is …』の行は、暗号スイートが最初に定義された版を表します。実際に使われた版は『Protocol』の行で読みます。</p></div>
<h3>暗号スイートの考え方</h3>
<p>TLS 1.2の暗号スイートは、鍵交換、認証、暗号、ハッシュの組を1つの名前で表します。<code>ECDHE-RSA-AES128-GCM-SHA256</code> なら、鍵交換がECDHE、認証がRSA、暗号がAES-128-GCM、ハッシュがSHA-256です。</p>
<p>TLS 1.3の暗号スイートは、<code>TLS_AES_128_GCM_SHA256</code> のように暗号とハッシュだけを表します。鍵交換は『グループ』(X25519など)として別に決まり、どの暗号スイートも認証付き暗号(AEAD)です(RFC 8446)。</p>
<p>TLS 1.2で避けるものは、IETFの推奨文書RFC 9325が示しています。</p>
<ul>
<li>RC4: 使用禁止</li>
<li>3DES: 実効の強さが128ビットに届かない</li>
<li><code>TLS_RSA_WITH_</code>で始まる静的なRSA鍵交換: 前方秘匿性がない</li>
<li>CBCモード: encrypt_then_mac拡張を使えない場合は避ける</li>
<li><code>TLS_DHE_</code>で始まるDHE: TLS 1.2では避ける</li>
</ul>
<h3>Mozilla推奨(Intermediate)に合わせた設定例</h3>
<p>サーバー設定の推奨値には、Mozillaの『<a href="https://wiki.mozilla.org/Security/Server_Side_TLS">Server Side TLS</a>』が広く使われてきました。このガイドはMozilla外のコミュニティ作業部会TLSRefへ移り、Mozillaのページは移管先を案内しています。</p>
<p>2026年4月の6.0版で、古い端末向けの『Old』は廃止されました。一般の公開サイト向けの『Intermediate』の推奨値は次のとおりです。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>項目</th><th>Intermediate(6.0版)の推奨値</th></tr></thead><tbody>
<tr><td>TLSの版</td><td>TLS 1.2、TLS 1.3</td></tr>
<tr><td>TLS 1.3の暗号</td><td>AES-128-GCM、AES-256-GCM、ChaCha20-Poly1305の3種(OpenSSLの既定と同じ)</td></tr>
<tr><td>TLS 1.2の暗号</td><td>鍵交換ECDHE、認証ECDSAまたはRSA、暗号AES-128-GCM、AES-256-GCM、ChaCha20-Poly1305の組み合わせ6種</td></tr>
<tr><td>鍵交換のグループ</td><td>X25519MLKEM768、X25519、prime256v1、secp384r1</td></tr>
<tr><td>証明書</td><td>ECDSA(P-256)またはRSA(2048ビット)。有効期間は90日を推奨</td></tr>
<tr><td>暗号の優先順位</td><td>クライアント側の順序に従う</td></tr>
<tr><td>HSTS</td><td>max-age=63072000(2年)</td></tr>
</tbody></table></div>
<pre class="slt-code"><code># nginx: 次の3行は http ブロックに置く
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE+AESGCM:ECDHE+CHACHA20:!PSK;
ssl_prefer_server_ciphers off;

# HTTPSの server ブロックに置く
add_header Strict-Transport-Security "max-age=63072000" always;</code></pre>
<pre class="slt-code"><code># Apache(mod_ssl)
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite ECDHE+AESGCM:ECDHE+CHACHA20:!PSK
SSLHonorCipherOrder off
Header always set Strict-Transport-Security "max-age=63072000"</code></pre>
<p><code>ECDHE+AESGCM:ECDHE+CHACHA20:!PSK</code> は、表のTLS 1.2の6種だけに絞り込む短い書き方です(並び順は異なります)。使う前に、次のコマンドで6種に展開されるかを確かめます。</p>
<pre class="slt-code"><code># TLSv1.2の6行と、TLSv1.3の3行が表示されれば想定どおり
openssl ciphers -v -tls1_2 'ECDHE+AESGCM:ECDHE+CHACHA20:!PSK'</code></pre>
<p>nginxの <code>ssl_protocols</code> は、serverブロックだけに書くと既定のサーバーの値が使われる場合があるため、httpブロックに置きます。鍵交換のグループは、OpenSSL 3.5以降なら既定でX25519MLKEM768を優先するので、多くの場合は指定不要です。CDNを使っている場合は、CDN側の最小のTLSバージョンの設定が利用者との通信を決めます。</p>

<h2>HTTPからHTTPSへの転送、HSTS、混在コンテンツを確かめる</h2>
<p>HTTPのURLは301でHTTPSの同じURLへ転送し、HTTPSの応答には<a href="https://slt-inc.jp/glossary/hsts/">HSTS</a>(Strict-Transport-Security)のヘッダーを付けます。2026年9月公開のChrome 154では、HTTPの接続を開く前に確認を求める警告が既定で有効になりました(<a href="https://chromestatus.com/release-notes/154">Chrome 154のリリースノート</a>)。</p>
<p>Googleの発表では、警告の対象は最近訪れていない公開サイトで、社内などのプライベートなアドレスは対象外です。HTTPSに対応していないホスト名は、サブドメインも含めて警告の対象になります。</p>
<pre class="slt-code"><code># スキームを省くと、curlはHTTP(80番ポート)で接続する
curl -sI example.com | grep -i -E '^HTTP|^location'
curl -sI www.example.com | grep -i -E '^HTTP|^location'
# HTTPSの応答にHSTSが付いているか
curl -sI https://example.com/ | grep -i strict-transport-security</code></pre>
<p>出力の例です。</p>
<pre class="slt-code"><code>HTTP/1.1 301 Moved Permanently
Location: https://example.com/
HTTP/1.1 301 Moved Permanently
Location: https://www.example.com/
strict-transport-security: max-age=63072000</code></pre>
<p>合格の基準は、HTTPの各ホスト名が301(恒久的な転送)でHTTPSへ移ることと、HTTPSの応答にHSTSがあることです。HSTSは<a href="https://slt-inc.jp/glossary/security-headers/">セキュリティヘッダー</a>の1つで、設定の手順は『<a href="https://slt-inc.jp/article/security-headers-setup/">セキュリティヘッダーの設定方法</a>』で詳しく扱っています。</p>
<h3>HSTSを入れると、証明書のエラーは回避できなくなる</h3>
<p>HSTSを記憶したブラウザは、max-ageの期間中に証明書のエラーが起きると、警告を回避して進む選択肢を出さずに接続を止めます(<a href="https://www.rfc-editor.org/rfc/rfc6797">RFC 6797</a>の8.4節、12.1節)。期限切れがそのまま全面的な停止になるため、HSTSは自動更新と監視が動いてから設定します。</p>
<p>HSTSのヘッダーは、HTTPSの応答でエラーなく受け取ったときだけ有効になり、HTTPの応答に付けてはいけません。<code>max-age=0</code> を送ると、ブラウザに記憶された設定を消せます。</p>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p><code>includeSubDomains</code> は、すべてのサブドメインがHTTPSで正しく応答することを確かめてから付けます。有効な証明書の無いサブドメインが1つでもあると、そこには接続できなくなります。TLSRefの設定生成ツールの出力には <code>includeSubDomains</code> が入っているので、貼り付ける前の確認が欠かせません。</p></div>
<h3>混在コンテンツを見つけて直す</h3>
<p><a href="https://slt-inc.jp/glossary/mixed-content/">混在コンテンツ</a>は、HTTPSのページの中で画像やスクリプトをHTTPで読み込んでいる状態です。現在のブラウザは、画像、音声、動画をHTTPSへ自動で切り替え、スクリプト、CSS、iframeなどはブロックします(<a href="https://developer.mozilla.org/ja/docs/Web/Security/Mixed_content">MDNの解説</a>)。</p>
<p>見つけるには、デベロッパーツールのコンソールで『Mixed Content』で始まる警告を探し、読み込み元のURLをHTTPSに書き換えます。直しきるまでの応急処置として、<a href="https://slt-inc.jp/glossary/csp/">CSP</a>の <code>upgrade-insecure-requests</code> でまとめてHTTPSへ切り替える方法もあります。</p>

<h2>期限切れのときの影響と、すぐやる対処</h2>
<p>期限が切れると、ブラウザは画面全体の警告を出し、API連携やアプリの通信も検証エラーで止まります。まず外から配信中の証明書を確かめ、更新、再読み込み、全台での再確認の順に進めます。</p>
<p>Chromeは『この接続ではプライバシーが保護されません』、Firefoxは『警告: 潜在的なセキュリティリスクあり』という画面に、原因を示すコードを出します。主なコードとcurlの文言は次のとおりです。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>原因</th><th>Chromeの表示</th><th>Firefoxの表示</th><th>curlの表示(OpenSSL系)</th></tr></thead><tbody>
<tr><td>期限切れ(端末の時計のずれでも出る)</td><td>NET::ERR_CERT_DATE_INVALID</td><td>SEC_ERROR_EXPIRED_CERTIFICATE</td><td>certificate has expired</td></tr>
<tr><td>名前の不一致</td><td>NET::ERR_CERT_COMMON_NAME_INVALID</td><td>SSL_ERROR_BAD_CERT_DOMAIN</td><td>no alternative certificate subject name matches target hostname</td></tr>
<tr><td>発行元をたどれない(中間証明書の欠落など)</td><td>NET::ERR_CERT_AUTHORITY_INVALID</td><td>SEC_ERROR_UNKNOWN_ISSUER</td><td>unable to get local issuer certificate</td></tr>
</tbody></table></div>
<p>ChromeとFirefoxは、中間証明書を補えた場合は3行目の警告を出しません。対処は次の順で進めます。</p>
<ol class="slt-steps">
<li><strong>配信中の証明書を確かめる</strong><code>s_client</code> で <code>notAfter</code> を読み、どのホスト名の、どのサーバーで切れているかを特定します。</li>
<li><strong>サーバー上のファイルと比べる</strong>ファイルの期限が新しいのに配信が古いなら、更新は済んでいて再読み込みが漏れています。</li>
<li><strong>証明書を更新する</strong>ACMEなら <code>certbot renew</code> などで更新し、有料の証明書は再発行して差し替えます。</li>
<li><strong>設定を確かめて再読み込みする</strong><code>nginx -t</code> で構文を確かめてから、<code>systemctl reload nginx</code> で反映します。</li>
<li><strong>全ホスト名、全台、CDNで確かめる</strong>wwwの有無、サブドメイン、各サーバー、CDNの証明書を外から確かめます。</li>
<li><strong>止まった原因を直す</strong><code>certbot renew --dry-run</code> で失敗を再現し、80番ポートの遮断、DNSの変更、権限の不足などを直します。</li>
</ol>
<pre class="slt-code"><code># 配信中の証明書の期限
openssl s_client -connect example.com:443 -servername example.com \
  &lt;/dev/null 2&gt;/dev/null | openssl x509 -noout -enddate
# サーバー上のファイルの期限(Certbotの例)
sudo openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem \
  -noout -enddate
# 更新し、構文を確かめてから再読み込み(nginxの例)
sudo certbot renew
sudo nginx -t &amp;&amp; sudo systemctl reload nginx</code></pre>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>Let&#8217;s EncryptのHTTP-01による確認は、80番ポートでしか行えません。HTTPSへの転送は問題ありませんが、80番ポートを閉じると更新が失敗します。</p></div>
<p>更新したのに古い証明書が出るときの原因は、再読み込みの漏れ、別の台に残った古い証明書、別に管理しているCDNの証明書、設定が別のファイルを指している、のいずれかです。直したあとは、無料の『<a href="https://slt-inc.jp/service/security-checker/">Webサイトのセキュリティチェック</a>』でも外から結果を確かめられます。原因を切り分けられないときや、更新の自動化を設計し直したいときは、<a href="https://slt-inc.jp/inquiry/">お問い合わせフォーム</a>から相談を受け付けています。</p>

<h2>自動更新(ACME)と期限の監視を仕組みにする</h2>
<p>更新は、ACME(RFC 8555)に対応した認証局とクライアントで自動にし、Webサーバーの再読み込みまでを含めます。そのうえで、自動更新が止まったことに気づけるよう、外から期限を調べる監視を別に置きます。</p>
<p>Certbotは4.0以降、残りが有効期間の3分の1を切った証明書を更新します。<code>--deploy-hook "systemctl reload nginx"</code> を付けると、更新できたときだけ再読み込みが走ります。事前の動作確認に使うのは <code>certbot renew --dry-run</code> です。</p>
<p>更新の時期を認証局から受け取るARI(RFC 9773、2025年6月発行)という仕組みもあり、Let&#8217;s Encryptはクライアントでの利用を勧めています。同社は2025年6月4日に期限切れの通知メールを終了したため、通知は自分で用意します。</p>
<pre class="slt-code"><code>#!/bin/sh
# 残り日数がしきい値を切った証明書と、検証に失敗したホストを表示する
DAYS=14
for host in example.com www.example.com; do
  cert=$(openssl s_client -connect "$host:443" -servername "$host" \
    -verify_hostname "$host" -verify_return_error &lt;/dev/null 2&gt;/dev/null \
    | openssl x509 2&gt;/dev/null)
  if [ -z "$cert" ]; then
    echo "NG $host: 接続、チェーン、名前、期限のいずれかで失敗"
  elif ! echo "$cert" | openssl x509 -noout -checkend $((DAYS * 86400)) &gt;/dev/null; then
    echo "NG $host: 残り${DAYS}日未満"
  else
    echo "OK $host"
  fi
done</code></pre>
<p>しきい値は、自動更新が動く時点より小さく、手で直す時間が残る値にします。90日の証明書は残り30日で自動更新が動くため、14日を切っていれば、自動更新が2週間以上止まっている合図です。cronで毎日動かし、NGの行が出たらチームに通知します。</p>
<ul class="slt-check">
<li>管理しているホスト名(www、サブドメイン、API、メール)と、その証明書の一覧がある</li>
<li>更新が自動で、更新後の再読み込みまで含まれている</li>
<li><code>certbot renew --dry-run</code> などの更新の試験が成功する</li>
<li>外からの期限の監視が毎日動き、通知が複数人に届く</li>
<li>2027年3月15日からの100日の上限に合わせ、手作業の更新が残っていない</li>
<li>サーバーの移転、CDNの導入、DNSの変更のあとに外から確かめる手順がある</li>
<li>HSTSを入れる前に、上の項目がすべて満たされている</li>
</ul>

<h2>有効期間の短縮の動向(2026年10月時点)</h2>
<p><a href="https://cabforum.org/2025/04/11/ballot-sc081v3-introduce-schedule-of-reducing-validity-and-data-reuse-periods/">CA/Browser Forumの決議SC-081v3</a>により、公的に信頼されるTLS証明書の最長有効期間は、2026年3月15日以降の発行分で200日になりました。2027年3月15日に100日、2029年3月15日に47日へ短くなります。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>証明書の発行日</th><th>最長の有効期間</th><th>ドメイン確認の再利用期間</th></tr></thead><tbody>
<tr><td>2026年3月15日より前</td><td>398日</td><td>398日</td></tr>
<tr><td>2026年3月15日から</td><td>200日</td><td>200日</td></tr>
<tr><td>2027年3月15日から</td><td>100日</td><td>100日</td></tr>
<tr><td>2029年3月15日から</td><td>47日</td><td>10日</td></tr>
</tbody></table></div>
<p>決議は2025年4月11日に可決され(提案はApple)、2026年10月4日付のBaseline Requirements 2.3.1版にもこの日程が入っています。日数はnotBeforeからnotAfterまでを含めて数え、1日は86,400秒です。</p>
<p>ドメイン確認の再利用期間は、認証局がドメインの管理権を確かめた結果を使い回せる日数です。2029年には10日になるため、更新のたびにDNSやHTTPでの確認を自動で通せる仕組みが前提になります。</p>
<p><a href="https://letsencrypt.org/2025/12/02/from-90-to-45">Let&#8217;s Encryptの発表</a>によると、既定の90日は2027年2月10日に64日、2028年2月16日に45日へ短くなります。希望者向けの45日の証明書(tlsserverプロファイル)は、2026年5月13日から選べるようになりました。同社は、更新を有効期間の約3分の2の時点で行い、60日ごとのような固定の間隔に頼らないよう求めています。</p>
<div class="slt-callout is-point"><p class="slt-callout-title">ポイント</p><p>手作業の更新は、上限が100日になる2027年3月15日以降は年4回以上、47日になる2029年3月15日以降は年8回以上の作業になります。人の記憶やカレンダーに頼る運用は、2027年3月より前に自動化へ切り替えます。</p></div>

<h2>よくある質問</h2>
<div class="slt-faq"><h3>SSL証明書とTLS証明書は、違うものですか？</h3><p>同じものです。暗号化の仕組みがSSLからTLSへ置き換わったあとも『SSL証明書』という呼び名が残っており、SSL 3.0はRFC 7568で使用が禁止されています。</p></div>
<div class="slt-faq"><h3>無料の証明書と有料の証明書で、暗号の強さは変わりますか？</h3><p>変わりません。暗号の強さはTLSの版、暗号スイート、鍵の種類で決まり、証明書の価格とは関係しません。違いは、認証局が確認する範囲(ドメインの管理権だけか、組織の実在までか)や、サポートの内容です。</p></div>
<div class="slt-faq"><h3>ワイルドカード証明書は、どの名前に使えますか？</h3><p>左端の1階層だけに使えます(RFC 9525)。*.example.com は www.example.com や shop.example.com に有効です。example.com 自体や a.b.example.com には使えないため、必要ならSANに別に含めます。</p></div>
<div class="slt-faq"><h3>社内システムの証明書も、200日以内にする必要がありますか？</h3><p>CA/Browser Forumの規定の対象は、OSやブラウザに最初から入っているルートにつながる、公的に信頼される証明書です。社内の認証局(プライベートCA)が発行する証明書はこの規定の対象外ですが、社内の方針や、使う機器とソフトウェアの制限は個別に確かめます。</p></div>
<div class="slt-faq"><h3>TLS 1.2は、近いうちに使えなくなりますか？</h3><p>廃止されてはおらず、IETFのRFC 9325はTLS 1.2への対応を必須としています。ただし2026年7月のRFC 9851で機能が凍結され、耐量子計算機暗号などの新機能はTLS 1.3にだけ加わります。TLS 1.3を優先して使える状態にしておくのが、現実的な備えです。</p></div>
<div class="slt-faq"><h3>OCSPステープリングの設定は、今も必要ですか？</h3><p>使っている認証局によります。Let&#8217;s Encryptは2025年8月6日にOCSPの提供を終え、失効の情報をCRLだけで公開しているため、同社の証明書ではOCSPステープリングは働きません。ほかの認証局の証明書では、<code>openssl x509 -noout -ocsp_uri</code> でOCSPの接続先が表示されるかを確かめてから判断します。</p></div>
<div class="slt-faq"><h3>出力にX25519MLKEM768と表示されるのは問題ですか？</h3><p>問題ありません。従来のX25519に、耐量子計算機暗号のML-KEMを組み合わせた鍵交換で、OpenSSL 3.5以降は既定でこれを優先します。MozillaのServer Side TLS(6.0版)でも推奨グループの先頭に置かれており、使われるのはTLS 1.3の接続です。</p></div>

<h2>関連記事</h2>
<div class="slt-related">
<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>
<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>
</div>

<div class="slt-cta"><p class="slt-cta-title">証明書と通信の設定を、外からまとめて確かめる</p><p>URLを入れるだけで、証明書の期限、ホスト名、中間証明書の不足、古いTLSと弱い暗号、HTTPSへの転送、HSTS、混在コンテンツを確認できます。登録は不要で、無料です。診断できるのは、管理権限のあるサイトに限ります。</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": "SSL証明書とTLS証明書は、違うものですか？", "acceptedAnswer": {"@type": "Answer", "text": "同じものです。暗号化の仕組みがSSLからTLSへ置き換わったあとも『SSL証明書』という呼び名が残っており、SSL 3.0はRFC 7568で使用が禁止されています。"}}, {"@type": "Question", "name": "無料の証明書と有料の証明書で、暗号の強さは変わりますか？", "acceptedAnswer": {"@type": "Answer", "text": "変わりません。暗号の強さはTLSの版、暗号スイート、鍵の種類で決まり、証明書の価格とは関係しません。違いは、認証局が確認する範囲(ドメインの管理権だけか、組織の実在までか)や、サポートの内容です。"}}, {"@type": "Question", "name": "ワイルドカード証明書は、どの名前に使えますか？", "acceptedAnswer": {"@type": "Answer", "text": "左端の1階層だけに使えます(RFC 9525)。*.example.com は www.example.com や shop.example.com に有効です。example.com 自体や a.b.example.com には使えないため、必要ならSANに別に含めます。"}}, {"@type": "Question", "name": "社内システムの証明書も、200日以内にする必要がありますか？", "acceptedAnswer": {"@type": "Answer", "text": "CA/Browser Forumの規定の対象は、OSやブラウザに最初から入っているルートにつながる、公的に信頼される証明書です。社内の認証局(プライベートCA)が発行する証明書はこの規定の対象外ですが、社内の方針や、使う機器とソフトウェアの制限は個別に確かめます。"}}, {"@type": "Question", "name": "TLS 1.2は、近いうちに使えなくなりますか？", "acceptedAnswer": {"@type": "Answer", "text": "廃止されてはおらず、IETFのRFC 9325はTLS 1.2への対応を必須としています。ただし2026年7月のRFC 9851で機能が凍結され、耐量子計算機暗号などの新機能はTLS 1.3にだけ加わります。TLS 1.3を優先して使える状態にしておくのが、現実的な備えです。"}}, {"@type": "Question", "name": "OCSPステープリングの設定は、今も必要ですか？", "acceptedAnswer": {"@type": "Answer", "text": "使っている認証局によります。Let's Encryptは2025年8月6日にOCSPの提供を終え、失効の情報をCRLだけで公開しているため、同社の証明書ではOCSPステープリングは働きません。ほかの認証局の証明書では、openssl x509 -noout -ocsp_uri でOCSPの接続先が表示されるかを確かめてから判断します。"}}, {"@type": "Question", "name": "出力にX25519MLKEM768と表示されるのは問題ですか？", "acceptedAnswer": {"@type": "Answer", "text": "問題ありません。従来のX25519に、耐量子計算機暗号のML-KEMを組み合わせた鍵交換で、OpenSSL 3.5以降は既定でこれを優先します。MozillaのServer Side TLS(6.0版)でも推奨グループの先頭に置かれており、使われるのはTLS 1.3の接続です。"}}]}</script><p>The post <a href="https://slt-inc.jp/article/ssl-tls-certificate-check/">SSL/TLS証明書のチェック方法|有効期限・チェーン・通信方式の確認手順</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>
