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

<image>
	<url>https://slt-inc.jp/wp-content/uploads/2025/03/cropped-エスライン_テクノロジーズ_-_新ロゴ2025-removebg-32x32.png</url>
	<title>Webサイトセキュリティ - 総合デジタルマーケティング企業 エスライン・テクノロジーズ</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>.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>セキュリティヘッダーの設定方法｜HSTS・CSPの設定例つき</title>
		<link>https://slt-inc.jp/article/security-headers-setup/</link>
		
		<dc:creator><![CDATA[slt]]></dc:creator>
		<pubDate>Wed, 30 Sep 2026 00:47:00 +0000</pubDate>
				<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[記事]]></category>
		<category><![CDATA[CSP]]></category>
		<category><![CDATA[HSTS]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[Webサイトセキュリティ]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[セキュリティヘッダー]]></category>
		<category><![CDATA[セキュリティ対策]]></category>
		<guid isPermaLink="false">https://slt-inc.jp/?p=24853</guid>

					<description><![CDATA[<p><a class="glossaryLink"  aria-describedby="tt"  data-cmtooltip="&#60;div class=glossaryItemBody&#62;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#12392;&#12399;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#12399;&#12289;Web&#12469;&#12540;&#12496;&#12540;&#12364;HTTP&#12398;&#24540;&#31572;&#12395;&#20184;&#12369;&#12390;&#12289;&#12502;&#12521;&#12454;&#12470;&#12395;&#20633;&#12431;&#12387;&#12383;&#38450;&#24481;&#27231;&#33021;&#12434;&#26377;&#21177;&#12395;&#12373;&#12379;&#12427;HTTP&#12504;&#12483;&#12480;&#12540;&#12398;&#32207;&#31216;&#12391;&#12377;&#12290;&#12469;&#12540;&#12496;&#12540;&#12398;&#35373;&#23450;&#12434;&#36275;&#12377;&#12384;&#12369;&#12391;&#12289;&#12450;&#12503;&#12522;&#12465;&#12540;&#12471;&#12519;&#12531;&#12398;&#12467;&#12540;&#12489;&#12434;&#22793;&#12360;&#12378;&#12395;&#12289;&#23432;&#12426;&#12434;1&#23652;&#22679;&#12420;&#12379;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#12364;&#24517;&#35201;&#12394;&#29702;&#30001;XSS&#12289;&#12463;&#12522;&#12483;&#12463;&#12472;&#12515;&#12483;&#12461;&#12531;&#12464;&#12289;&#36890;&#20449;&#12398;&#12480;&#12454;&#12531;&#12464;&#12524;&#12540;&#12489;&#12289;&#12501;&#12449;&#12452;&#12523;&#31278;&#21029;&#12398;&#35492;&#35469;&#12392;&#12356;&#12387;&#12383;&#25915;&#25731;&#12399;&#12289;&#12502;&#12521;&#12454;&#12470;&#20596;&#12398;&#27231;&#33021;&#12391;&#38450;&#12370;&#12427;&#12418;&#12398;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#12383;&#12384;&#12375;&#12289;&#27231;&#33021;&#12399;&#12289;&#12469;&#12540;&#12496;&#12540;&#12364;&#25351;&#31034;&#12434;&#20986;&#12375;&#12390;&#21021;&#12417;&#12390;&#20685;&#12365;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#12399;&#12289;&#33030;&#24369;&#24615;&#12381;&#12398;&#12418;&#12398;&#12434;&#30452;&#12377;&#12418;&#12398;&#12391;&#12399;&#12394;&#12367;&#12289;&#34987;&#23475;&#12434;&#25233;&#12360;&#12427;&#35036;&#21161;&#12391;&#12377;&#12290;&#35386;&#26029;&#12484;&#12540;&#12523;&#12364;&#26368;&#21021;&#12395;&#30906;&#35469;&#12377;&#12427;&#38917;&#30446;&#12391;&#12418;&#12354;&#12426;&#12289;&#26410;&#35373;&#23450;&#12398;&#25351;&#25688;&#12364;&#20986;&#12420;&#12377;&#12356;&#37096;&#20998;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#12398;&#20181;&#32068;&#12415;&#38;lt;table&#38;gt;&#38;lt;thead&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;th&#38;gt;&#12504;&#12483;&#12480;&#12540;&#38;lt;/th&#38;gt;&#38;lt;th&#38;gt;&#24441;&#21106;&#38;lt;/th&#38;gt;&#38;lt;th&#38;gt;&#20516;&#12398;&#20363;&#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;Strict-Transport-Security&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;HTTPS&#12391;&#12398;&#25509;&#32154;&#12434;&#24375;&#21046;&#12377;&#12427;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;max-age=31536000&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;Content-Security-Policy&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#35501;&#12415;&#36796;&#12415;&#20803;&#12434;&#21046;&#38480;&#12375;&#12289;XSS&#12398;&#34987;&#23475;&#12434;&#25233;&#12360;&#12427;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;default-src &#38;#039;self&#38;#039;&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;X-Frame-Options&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;iframe&#12408;&#12398;&#22475;&#12417;&#36796;&#12415;&#12434;&#21046;&#38480;&#12377;&#12427;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;SAMEORIGIN&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;X-Content-Type-Options&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#12501;&#12449;&#12452;&#12523;&#31278;&#21029;&#12398;&#25512;&#28204;&#12434;&#27490;&#12417;&#12427;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;nosniff&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;Referrer-Policy&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#21442;&#29031;&#20803;URL&#12398;&#36865;&#20449;&#31684;&#22258;&#12434;&#27770;&#12417;&#12427;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;strict-origin-when-cross-origin&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;Permissions-Policy&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#12502;&#12521;&#12454;&#12470;&#27231;&#33021;&#12398;&#21033;&#29992;&#12434;&#21046;&#38480;&#12377;&#12427;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;camera=(), microphone=()&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/tbody&#38;gt;&#38;lt;/table&#38;gt;&#12377;&#12391;&#12395;&#24441;&#30446;&#12434;&#32066;&#12360;&#12383;&#12418;&#12398;&#12418;&#12354;&#12426;&#12414;&#12377;&#12290;&#38;lt;code&#38;gt;X-XSS-Protection&#38;lt;/code&#38;gt; &#12399;&#12289;OWASP&#12364;&#20184;&#12369;&#12394;&#12356;&#12424;&#12358;&#21223;&#12417;&#12390;&#12356;&#12414;&#12377;&#12290;&#38;lt;code&#38;gt;Expect-CT&#38;lt;/code&#38;gt; &#12392; &#38;lt;code&#38;gt;Public-Key-Pins&#38;lt;/code&#38;gt; &#12418;&#12289;&#20351;&#12356;&#12414;&#12379;&#12435;&#12290;&#36870;&#12395;&#12289;&#38;lt;code&#38;gt;Server&#38;lt;/code&#38;gt; &#12420; &#38;lt;code&#38;gt;X-Powered-By&#38;lt;/code&#38;gt; &#12395;&#12496;&#12540;&#12472;&#12519;&#12531;&#30058;&#21495;&#12364;&#20986;&#12390;&#12356;&#12427;&#22580;&#21512;&#12399;&#12289;&#28040;&#12377;&#12363;&#12289;&#31777;&#32032;&#12395;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#12398;&#30906;&#35469;&#26041;&#27861;&#38283;&#30330;&#32773;&#12484;&#12540;&#12523;&#12398;&#12300;&#12493;&#12483;&#12488;&#12527;&#12540;&#12463;&#12301;&#12479;&#12502;&#12391;&#12289;HTML&#25991;&#26360;&#12398;&#12300;&#12524;&#12473;&#12509;&#12531;&#12473;&#12504;&#12483;&#12480;&#12540;&#12301;&#12434;&#38283;&#12365;&#12414;&#12377;&#12290;&#12467;&#12510;&#12531;&#12489;&#12391;&#12399;&#12289;&#24540;&#31572;&#12504;&#12483;&#12480;&#12540;&#12434;&#12377;&#12409;&#12390;&#34920;&#31034;&#12391;&#12365;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;curl -s -D - -o /dev/null https://example.com/&#38;lt;/code&#38;gt; Windows&#12398;PowerShell&#12391;&#12399; &#38;lt;code&#38;gt;curl.exe -s -D - -o NUL https://example.com/&#38;lt;/code&#38;gt; &#12391;&#12377;&#12290;&#34920;&#12398;6&#12388;&#12398;&#12358;&#12385;&#12289;&#12393;&#12428;&#12364;&#36820;&#12387;&#12390;&#12356;&#12394;&#12356;&#12363;&#12434;&#35211;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#12398;&#35373;&#23450;&#20363;CSP&#12399;&#12289;&#27573;&#38542;&#30340;&#12394;&#23566;&#20837;&#12364;&#24517;&#35201;&#12394;&#12383;&#12417;&#12289;&#12371;&#12371;&#12395;&#12399;&#21547;&#12417;&#12390;&#12356;&#12414;&#12379;&#12435;&#12290;CSP&#12398;&#35299;&#35500;&#12398;&#25163;&#38918;&#12391;&#12289;&#21029;&#12395;&#36914;&#12417;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;Apache(.htaccess)&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;&#38;amp;lt;IfModule mod_headers.c&#38;amp;gt;    Header always set Strict-Transport-Security &#38;quot;max-age=31536000&#38;quot; env=HTTPS    Header always set X-Content-Type-Options &#38;quot;nosniff&#38;quot;    Header always set X-Frame-Options &#38;quot;SAMEORIGIN&#38;quot;    Header always set Referrer-Policy &#38;quot;strict-origin-when-cross-origin&#38;quot;    Header always set Permissions-Policy &#38;quot;camera=(), microphone=(), geolocation=()&#38;quot;&#38;amp;lt;/IfModule&#38;amp;gt;&#38;lt;/code&#38;gt; nginx&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;add_header Strict-Transport-Security &#38;quot;max-age=31536000&#38;quot; always;add_header X-Content-Type-Options &#38;quot;nosniff&#38;quot; always;add_header X-Frame-Options &#38;quot;SAMEORIGIN&#38;quot; always;add_header Referrer-Policy &#38;quot;strict-origin-when-cross-origin&#38;quot; always;add_header Permissions-Policy &#38;quot;camera=(), microphone=(), geolocation=()&#38;quot; always;&#38;lt;/code&#38;gt; WordPress(&#23376;&#12486;&#12540;&#12510;&#12398;functions.php)&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;add_action(&#38;#039;send_headers&#38;#039;, function () {    header(&#38;#039;X-Content-Type-Options: nosniff&#38;#039;);    header(&#38;#039;X-Frame-Options: SAMEORIGIN&#38;#039;);    header(&#38;#039;Referrer-Policy: strict-origin-when-cross-origin&#38;#039;);    header(&#38;#039;Permissions-Policy: camera=(), microphone=(), geolocation=()&#38;#039;);    if (is_ssl()) {        header(&#38;#039;Strict-Transport-Security: max-age=31536000&#38;#039;);    }});&#38;lt;/code&#38;gt; &#12424;&#12367;&#12354;&#12427;&#38291;&#36949;&#12356;&#12392;&#27880;&#24847;&#28857;nginx&#12391;&#12399;&#12289;&#38;lt;code&#38;gt;location&#38;lt;/code&#38;gt; &#12502;&#12525;&#12483;&#12463;&#12398;&#20013;&#12395;&#21029;&#12398; &#38;lt;code&#38;gt;add_header&#38;lt;/code&#38;gt; &#12364;1&#12388;&#12391;&#12418;&#12354;&#12427;&#12392;&#12289;&#19978;&#12398;&#38542;&#23652;&#12398; &#38;lt;code&#38;gt;add_header&#38;lt;/code&#38;gt; &#12399;&#24341;&#12365;&#32153;&#12364;&#12428;&#12414;&#12379;&#12435;&#12290;&#35373;&#23450;&#24460;&#12395;&#12289;&#20195;&#34920;&#30340;&#12394;URL&#12391;&#23455;&#38555;&#12398;&#24540;&#31572;&#12434;&#30906;&#12363;&#12417;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;code&#38;gt;always&#38;lt;/code&#38;gt; &#12434;&#20184;&#12369;&#12394;&#12356;&#12392;&#12289;404&#12420;500&#12394;&#12393;&#12398;&#12456;&#12521;&#12540;&#24540;&#31572;&#12395;&#12399;&#12289;&#12504;&#12483;&#12480;&#12540;&#12364;&#20184;&#12365;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;WordPress&#12398;&#12461;&#12515;&#12483;&#12471;&#12517;&#12503;&#12521;&#12464;&#12452;&#12531;&#12364;&#12289;&#38745;&#30340;&#12394;HTML&#12434;PHP&#12434;&#36890;&#12373;&#12378;&#12395;&#36820;&#12375;&#12390;&#12356;&#12427;&#22580;&#21512;&#12289;PHP&#12391;&#20184;&#12369;&#12383;&#12504;&#12483;&#12480;&#12540;&#12399;&#20986;&#12414;&#12379;&#12435;&#12290;&#12469;&#12540;&#12496;&#12540;&#35373;&#23450;&#12391;&#20184;&#12369;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#12504;&#12483;&#12480;&#12540;&#12434;&#20184;&#12369;&#12390;&#12418;&#12289;&#33030;&#24369;&#24615;&#12399;&#28040;&#12360;&#12414;&#12379;&#12435;&#12290;&#26356;&#26032;&#12420;&#20837;&#21147;&#20516;&#12398;&#20966;&#29702;&#12398;&#20462;&#27491;&#12392;&#12289;&#32068;&#12415;&#21512;&#12431;&#12379;&#12390;&#34892;&#12356;&#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;&#19978;&#12398;6&#12388;&#12398;&#12504;&#12483;&#12480;&#12540;&#12398;&#26377;&#28961;&#12392;&#12289;&#20516;&#12398;&#24369;&#12373;&#12289;&#12496;&#12540;&#12472;&#12519;&#12531;&#30058;&#21495;&#12434;&#34920;&#12395;&#20986;&#12375;&#12390;&#12356;&#12427;&#12504;&#12483;&#12480;&#12540;&#12289;CORS&#12398;&#35373;&#23450;&#12398;&#32233;&#12373;&#12434;&#35386;&#26029;&#12375;&#12414;&#12377;&#12290;URL&#12434;&#20837;&#12428;&#12427;&#12384;&#12369;&#12391;&#12289;&#12467;&#12510;&#12531;&#12489;&#12394;&#12375;&#12391;&#19968;&#35239;&#12391;&#12365;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38306;&#36899;&#29992;&#35486;HSTS&#38;lt;br/&#38;gt;CSP&#38;lt;br/&#38;gt;X-Frame-Options&#38;lt;br/&#38;gt;X-Content-Type-Options&#38;lt;br/&#38;gt;Referrer-Policy&#38;lt;br/&#38;gt;Permissions-Policy&#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;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540; &#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/security-headers/"  data-gt-translate-attributes='[{"attribute":"data-cmtooltip", "format":"html"}]'  tabindex='0' role='link'>&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;</a>&#12398;&#35373;&#23450;&#26041;&#27861;&#12434;&#12289;Apache&#12289;nginx&#12289;WordPress&#12289;Cloudflare&#12398;&#35373;&#23450;&#20363;&#12388;&#12365;&#12391;&#35299;&#35500;&#12375;&#12414;&#12377;&#12290;always&#12398;&#20184;&#12369;&#24536;&#12428;&#12420;&#32153;&#25215;&#12391;&#12504;&#12483;&#12480;&#12540;&#12364;&#28040;&#12360;&#12427;&#33853;&#12392;&#12375;&#31348;&#12289;<a class="glossaryLink"  aria-describedby="tt"  data-cmtooltip="&#60;div class=glossaryItemBody&#62;HSTS&#12392;&#12399;HSTS(HTTP Strict Transport Security)&#12399;&#12289;&#12300;&#12371;&#12398;&#12469;&#12452;&#12488;&#12395;&#12399;&#12289;&#20170;&#24460;&#12399;&#24517;&#12378;HTTPS&#12391;&#25509;&#32154;&#12377;&#12427;&#12301;&#12392;&#12502;&#12521;&#12454;&#12470;&#12395;&#35226;&#12360;&#12373;&#12379;&#12427;&#20181;&#32068;&#12415;&#12391;&#12377;&#12290;&#12469;&#12540;&#12496;&#12540;&#12364;HTTPS&#12398;&#24540;&#31572;&#12395; &#38;lt;code&#38;gt;Strict-Transport-Security&#38;lt;/code&#38;gt; &#12504;&#12483;&#12480;&#12540;&#12434;&#20184;&#12369;&#12427;&#12392;&#26377;&#21177;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;&#20181;&#27096;&#12399;RFC 6797&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;HSTS&#12364;&#24517;&#35201;&#12394;&#29702;&#30001;&#12469;&#12452;&#12488;&#12434;HTTPS&#21270;&#12375;&#12390;&#12418;&#12289;&#21033;&#29992;&#32773;&#12364; &#38;lt;code&#38;gt;http://&#38;lt;/code&#38;gt; &#12391;&#12450;&#12489;&#12524;&#12473;&#12434;&#20837;&#21147;&#12375;&#12383;&#12426;&#12289;&#21476;&#12356;&#12522;&#12531;&#12463;&#12363;&#12425;&#35370;&#12428;&#12383;&#12426;&#12377;&#12427;&#12392;&#12289;&#26368;&#21021;&#12398;1&#22238;&#12399;HTTP&#12391;&#25509;&#32154;&#12375;&#12414;&#12377;&#12290;&#12371;&#12398;&#36890;&#20449;&#12399;&#26263;&#21495;&#21270;&#12373;&#12428;&#12390;&#12356;&#12414;&#12379;&#12435;&#12290;&#20844;&#34886;Wi-Fi&#12394;&#12393;&#12391;&#12399;&#12289;&#36890;&#20449;&#12398;&#36884;&#20013;&#12395;&#12356;&#12427;&#31532;&#19977;&#32773;&#12364;HTTPS&#12408;&#12398;&#20999;&#12426;&#26367;&#12360;&#12434;&#22952;&#12370;&#12289;&#20605;&#12398;&#12506;&#12540;&#12472;&#12434;&#35211;&#12379;&#12427;&#12371;&#12392;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;HSTS&#12434;&#26377;&#21177;&#12395;&#12377;&#12427;&#12392;&#12289;&#12502;&#12521;&#12454;&#12470;&#12399;&#35352;&#25014;&#12375;&#12390;&#12356;&#12427;&#26399;&#38291;&#12289;HTTP&#12391;&#12398;&#25509;&#32154;&#12434;&#33258;&#20998;&#12391;HTTPS&#12395;&#35501;&#12415;&#26367;&#12360;&#12414;&#12377;&#12290;&#35388;&#26126;&#26360;&#12395;&#12456;&#12521;&#12540;&#12364;&#12354;&#12427;&#22580;&#21512;&#12418;&#12289;&#21033;&#29992;&#32773;&#12364;&#35686;&#21578;&#12434;&#28961;&#35222;&#12375;&#12390;&#20808;&#12408;&#36914;&#12416;&#12371;&#12392;&#12399;&#12391;&#12365;&#12394;&#12367;&#12394;&#12426;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;HSTS&#12398;&#20181;&#32068;&#12415;&#38;lt;ol&#38;gt;&#12502;&#12521;&#12454;&#12470;&#12364;HTTPS&#12391;&#12469;&#12452;&#12488;&#12395;&#25509;&#32154;&#12375;&#12289;&#24540;&#31572;&#12395;HSTS&#12504;&#12483;&#12480;&#12540;&#12364;&#21547;&#12414;&#12428;&#12427;&#12290;&#38;lt;br/&#38;gt;&#12502;&#12521;&#12454;&#12470;&#12364;&#12289;&#12381;&#12398;&#12489;&#12513;&#12452;&#12531;&#12392;&#26377;&#21177;&#26399;&#38291;(max-age)&#12434;&#35352;&#25014;&#12377;&#12427;&#12290;&#38;lt;br/&#38;gt;&#26399;&#38291;&#20869;&#12399;&#12289;HTTP&#12398;&#12450;&#12489;&#12524;&#12473;&#12434;&#20869;&#37096;&#12391;HTTPS&#12395;&#32622;&#12365;&#25563;&#12360;&#12390;&#12363;&#12425;&#25509;&#32154;&#12377;&#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;&#25351;&#23450;&#38;lt;/th&#38;gt;&#38;lt;th&#38;gt;&#24847;&#21619;&#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;&#38;lt;code&#38;gt;max-age=31536000&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#35352;&#25014;&#12377;&#12427;&#31186;&#25968;&#12290;31536000&#31186;&#12399;1&#24180;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;includeSubDomains&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#12469;&#12502;&#12489;&#12513;&#12452;&#12531;&#12395;&#12418;&#36969;&#29992;&#12377;&#12427;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;preload&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#12502;&#12521;&#12454;&#12470;&#12395;&#32068;&#12415;&#36796;&#12414;&#12428;&#12427;HSTS&#12522;&#12473;&#12488;&#12408;&#12398;&#30331;&#37682;&#12434;&#24076;&#26395;&#12377;&#12427;(&#21029;&#36884;&#30003;&#35531;&#12364;&#24517;&#35201;)&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/tbody&#38;gt;&#38;lt;/table&#38;gt;HTTP&#12398;&#24540;&#31572;&#12395;&#20184;&#12356;&#12383;&#12504;&#12483;&#12480;&#12540;&#12399;&#28961;&#35222;&#12373;&#12428;&#12414;&#12377;&#12290;&#12414;&#12383;&#12289;&#35352;&#25014;&#12377;&#12427;&#21069;&#12398;&#21021;&#22238;&#35370;&#21839;&#12399;&#20445;&#35703;&#12373;&#12428;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;HSTS&#12398;&#30906;&#35469;&#26041;&#27861;&#12502;&#12521;&#12454;&#12470;&#12398;&#38283;&#30330;&#32773;&#12484;&#12540;&#12523;(F12)&#12391;&#12300;&#12493;&#12483;&#12488;&#12527;&#12540;&#12463;&#12301;&#12479;&#12502;&#12434;&#38283;&#12365;&#12289;&#12506;&#12540;&#12472;&#12434;&#20877;&#35501;&#12415;&#36796;&#12415;&#12375;&#12390;&#12289;&#26368;&#19978;&#27573;&#12398;HTML&#25991;&#26360;&#12398;&#12524;&#12473;&#12509;&#12531;&#12473;&#12504;&#12483;&#12480;&#12540;&#12395; &#38;lt;code&#38;gt;strict-transport-security&#38;lt;/code&#38;gt; &#12364;&#12354;&#12427;&#12363;&#12434;&#35211;&#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;curl -s -D - -o /dev/null https://example.com/ &#124; grep -i &#38;#039;^strict-transport-security&#38;#039;&#38;lt;/code&#38;gt; &#20309;&#12418;&#34920;&#31034;&#12373;&#12428;&#12394;&#12369;&#12428;&#12400;&#26410;&#35373;&#23450;&#12391;&#12377;&#12290;Windows&#12398;PowerShell&#12391;&#12399; &#38;lt;code&#38;gt;curl.exe -s -D - -o NUL https://example.com/ &#124; Select-String strict-transport-security&#38;lt;/code&#38;gt; &#12434;&#20351;&#12356;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;HSTS&#12398;&#35373;&#23450;&#20363;HTTPS&#12391;&#36820;&#12377;&#24540;&#31572;&#12395;&#12384;&#12369;&#20184;&#12369;&#12414;&#12377;&#12290;&#21021;&#12417;&#12390;&#26377;&#21177;&#12395;&#12377;&#12427;&#12392;&#12365;&#12399;&#12289;&#25968;&#20516;&#12434;300(5&#20998;)&#12394;&#12393;&#12398;&#30701;&#12356;&#20516;&#12395;&#12375;&#12390;&#22987;&#12417;&#12289;&#21839;&#38988;&#12364;&#12394;&#12369;&#12428;&#12400;&#27573;&#38542;&#30340;&#12395;&#24310;&#12400;&#12375;&#12414;&#12377;&#12290;hstspreload.org&#12399;&#12289;5&#20998;&#12289;1&#36913;&#38291;&#12289;1&#12363;&#26376;&#12392;&#24310;&#12400;&#12375;&#12289;&#26368;&#32066;&#30340;&#12395;1&#24180;(31536000&#31186;)&#20197;&#19978;&#12395;&#12377;&#12427;&#25163;&#38918;&#12434;&#31034;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;&#20197;&#19979;&#12399;&#26368;&#32066;&#30340;&#12394;&#20516;&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt;Apache(.htaccess)&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;&#38;amp;lt;IfModule mod_headers.c&#38;amp;gt;    Header always set Strict-Transport-Security &#38;quot;max-age=31536000&#38;quot; env=HTTPS&#38;amp;lt;/IfModule&#38;amp;gt;&#38;lt;/code&#38;gt; nginx(HTTPS&#12398;server&#12502;&#12525;&#12483;&#12463;)&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;add_header Strict-Transport-Security &#38;quot;max-age=31536000&#38;quot; always;&#38;lt;/code&#38;gt; WordPress(&#23376;&#12486;&#12540;&#12510;&#12398;functions.php)&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;add_action(&#38;#039;send_headers&#38;#039;, function () {    if (is_ssl()) {        header(&#38;#039;Strict-Transport-Security: max-age=31536000&#38;#039;);    }});&#38;lt;/code&#38;gt; &#12424;&#12367;&#12354;&#12427;&#38291;&#36949;&#12356;&#12392;&#27880;&#24847;&#28857;&#26368;&#21021;&#12363;&#12425;&#38263;&#12356;&#26399;&#38291;&#12434;&#25351;&#23450;&#12377;&#12427;&#12392;&#12289;&#35388;&#26126;&#26360;&#12398;&#26399;&#38480;&#20999;&#12428;&#12420;&#35373;&#23450;&#12511;&#12473;&#12364;&#36215;&#12365;&#12383;&#12392;&#12365;&#12289;&#12381;&#12398;&#26399;&#38291;&#12356;&#12387;&#12401;&#12356;&#12469;&#12452;&#12488;&#12434;&#38283;&#12369;&#12394;&#12356;&#21033;&#29992;&#32773;&#12364;&#20986;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;code&#38;gt;includeSubDomains&#38;lt;/code&#38;gt; &#12399;&#12289;&#31038;&#20869;&#29992;&#12420;&#12486;&#12473;&#12488;&#29992;&#12434;&#21547;&#12416;&#12377;&#12409;&#12390;&#12398;&#12469;&#12502;&#12489;&#12513;&#12452;&#12531;&#12364;HTTPS&#12391;&#21205;&#12367;&#12392;&#30906;&#12363;&#12417;&#12390;&#12363;&#12425;&#20184;&#12369;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;code&#38;gt;preload&#38;lt;/code&#38;gt; &#12399;&#12289;&#21462;&#12426;&#28040;&#12375;&#12395;&#12502;&#12521;&#12454;&#12470;&#12398;&#26356;&#26032;&#12434;&#24453;&#12388;&#12383;&#12417;&#12289;&#25968;&#12363;&#26376;&#12363;&#12363;&#12427;&#12371;&#12392;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;hstspreload.org&#12398;&#35201;&#20214;(max-age&#12364;1&#24180;&#20197;&#19978;&#12289;includeSubDomains&#12289;preload)&#12434;&#28288;&#12383;&#12375;&#12289;HTTPS&#12434;&#38263;&#12367;&#32173;&#25345;&#12391;&#12365;&#12427;&#22580;&#21512;&#12384;&#12369;&#30003;&#35531;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;HTTP&#12363;&#12425;HTTPS&#12408;&#12398;301&#36578;&#36865;&#12399;&#21029;&#12395;&#24517;&#35201;&#12391;&#12377;&#12290;HSTS&#12384;&#12369;&#12391;&#12399;&#12289;&#21021;&#22238;&#12398;HTTP&#25509;&#32154;&#12399;&#38450;&#12370;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;CDN&#12420;&#12522;&#12496;&#12540;&#12473;&#12503;&#12525;&#12461;&#12471;&#12398;&#32972;&#24460;&#12391;&#12399;&#12289;&#12504;&#12483;&#12480;&#12540;&#12364;&#21033;&#29992;&#32773;&#12414;&#12391;&#23626;&#12356;&#12390;&#12356;&#12427;&#12363;&#12434;&#12289;&#20844;&#38283;URL&#12391;&#23455;&#38555;&#12395;&#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;URL&#12434;&#20837;&#21147;&#12377;&#12427;&#12392;&#12289;HSTS&#12504;&#12483;&#12480;&#12540;&#12398;&#26377;&#28961;&#12392;max-age&#12398;&#38263;&#12373;&#12289;HTTP&#12363;&#12425;HTTPS&#12408;&#12398;&#36578;&#36865;&#12398;&#29366;&#24907;&#12434;&#35386;&#26029;&#12375;&#12414;&#12377;&#12290;&#32080;&#26524;&#12395;&#12399;&#12289;&#21028;&#26029;&#12398;&#26681;&#25312;&#12392;&#12394;&#12387;&#12383;&#24540;&#31572;&#12398;&#20869;&#23481;&#12364;&#31034;&#12373;&#12428;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38306;&#36899;&#29992;&#35486;SSL/TLS&#35388;&#26126;&#26360;&#38;lt;br/&#38;gt;TLS&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#38;lt;br/&#38;gt;&#28151;&#22312;&#12467;&#12531;&#12486;&#12531;&#12484;&#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;HSTS &#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/hsts/"  data-gt-translate-attributes='[{"attribute":"data-cmtooltip", "format":"html"}]'  tabindex='0' role='link'>HSTS</a>&#12392;<a class="glossaryLink"  aria-describedby="tt"  data-cmtooltip="&#60;div class=glossaryItemBody&#62;CSP&#12392;&#12399;CSP(Content Security Policy&#12289;&#12467;&#12531;&#12486;&#12531;&#12484;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12509;&#12522;&#12471;&#12540;)&#12399;&#12289;&#12506;&#12540;&#12472;&#12364;&#35501;&#12415;&#36796;&#12435;&#12391;&#12424;&#12356;&#12473;&#12463;&#12522;&#12503;&#12488;&#12289;&#30011;&#20687;&#12289;&#12473;&#12479;&#12452;&#12523;&#12471;&#12540;&#12488;&#12394;&#12393;&#12398;&#21462;&#24471;&#20803;&#12434;&#12289;&#12469;&#12540;&#12496;&#12540;&#12364;&#12502;&#12521;&#12454;&#12470;&#12395;&#25351;&#31034;&#12377;&#12427;&#20181;&#32068;&#12415;&#12391;&#12377;&#12290;&#38;lt;code&#38;gt;Content-Security-Policy&#38;lt;/code&#38;gt; &#12504;&#12483;&#12480;&#12540;&#12391;&#25351;&#23450;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;CSP&#12364;&#24517;&#35201;&#12394;&#29702;&#30001;&#20837;&#21147;&#20516;&#12398;&#20966;&#29702;&#12395;&#19981;&#20633;&#12364;&#12354;&#12426;&#12289;&#25915;&#25731;&#32773;&#12398;&#12473;&#12463;&#12522;&#12503;&#12488;&#12364;&#12506;&#12540;&#12472;&#12395;&#28151;&#20837;&#12377;&#12427;&#12392;&#12289;XSS&#12364;&#25104;&#31435;&#12375;&#12414;&#12377;&#12290;CSP&#12391;&#35377;&#21487;&#12375;&#12383;&#21462;&#24471;&#20803;&#20197;&#22806;&#12398;&#12473;&#12463;&#12522;&#12503;&#12488;&#12434;&#27490;&#12417;&#12390;&#12362;&#12369;&#12400;&#12289;&#28151;&#20837;&#12375;&#12390;&#12418;&#23455;&#34892;&#12373;&#12428;&#12378;&#12289;&#22806;&#37096;&#12408;&#12398;&#36865;&#20449;&#20808;&#12418;&#32094;&#12428;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;CSP&#12399;&#12289;&#26681;&#26412;&#23550;&#31574;&#12398;&#20195;&#12431;&#12426;&#12395;&#12399;&#12394;&#12426;&#12414;&#12379;&#12435;&#12290;&#20986;&#21147;&#26178;&#12398;&#12456;&#12473;&#12465;&#12540;&#12503;&#12394;&#12393;&#12398;&#20462;&#27491;&#12434;&#34892;&#12387;&#12383;&#12358;&#12360;&#12391;&#12289;&#34987;&#23475;&#12434;&#23567;&#12373;&#12367;&#12377;&#12427;&#12383;&#12417;&#12398;&#20108;&#37325;&#12398;&#20633;&#12360;&#12392;&#12375;&#12390;&#20351;&#12356;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;CSP&#12398;&#20181;&#32068;&#12415;&#12504;&#12483;&#12480;&#12540;&#12398;&#20516;&#12399;&#12289;&#12300;&#12487;&#12451;&#12524;&#12463;&#12486;&#12451;&#12502;(&#21046;&#24481;&#12377;&#12427;&#23550;&#35937;)&#12392;&#35377;&#21487;&#12377;&#12427;&#21462;&#24471;&#20803;&#12301;&#12434;&#12289;&#12475;&#12511;&#12467;&#12525;&#12531;&#12391;&#21306;&#20999;&#12387;&#12390;&#20006;&#12409;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;table&#38;gt;&#38;lt;thead&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;th&#38;gt;&#12487;&#12451;&#12524;&#12463;&#12486;&#12451;&#12502;&#38;lt;/th&#38;gt;&#38;lt;th&#38;gt;&#21046;&#24481;&#12377;&#12427;&#23550;&#35937;&#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;&#38;lt;code&#38;gt;default-src&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#20491;&#21029;&#12398;&#25351;&#23450;&#12364;&#12394;&#12356;&#35501;&#12415;&#36796;&#12415;&#20840;&#33324;&#12398;&#26082;&#23450;&#20516;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;script-src&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;JavaScript&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;style-src&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;CSS&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;img-src&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#30011;&#20687;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;connect-src&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;fetch&#12420;XMLHttpRequest&#12398;&#36890;&#20449;&#20808;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;object-src&#38;lt;/code&#38;gt;&#12289;&#38;lt;code&#38;gt;base-uri&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#12503;&#12521;&#12464;&#12452;&#12531;&#12398;&#22475;&#12417;&#36796;&#12415;&#12289;base&#12479;&#12464;&#12395;&#12424;&#12427;&#22522;&#28310;URL&#12398;&#26360;&#12365;&#25563;&#12360;&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;tr&#38;gt;&#38;lt;td&#38;gt;&#38;lt;code&#38;gt;frame-ancestors&#38;lt;/code&#38;gt;&#38;lt;/td&#38;gt;&#38;lt;td&#38;gt;&#12371;&#12398;&#12506;&#12540;&#12472;&#12434;iframe&#12391;&#22475;&#12417;&#36796;&#12417;&#12427;&#20803;(&#12463;&#12522;&#12483;&#12463;&#12472;&#12515;&#12483;&#12461;&#12531;&#12464;&#23550;&#31574;)&#38;lt;/td&#38;gt;&#38;lt;/tr&#38;gt;&#38;lt;/tbody&#38;gt;&#38;lt;/table&#38;gt;&#21462;&#24471;&#20803;&#12395;&#12399;&#12289;&#38;lt;code&#38;gt;&#38;#039;self&#38;#039;&#38;lt;/code&#38;gt;(&#33258;&#12469;&#12452;&#12488;)&#12289;&#38;lt;code&#38;gt;&#38;#039;none&#38;#039;&#38;lt;/code&#38;gt;(&#12377;&#12409;&#12390;&#31105;&#27490;)&#12289;&#38;lt;code&#38;gt;https://cdn.example.com&#38;lt;/code&#38;gt; &#12398;&#12424;&#12358;&#12394;&#12507;&#12473;&#12488;&#21517;&#12434;&#26360;&#12365;&#12414;&#12377;&#12290;&#12452;&#12531;&#12521;&#12452;&#12531;&#12398;&#12473;&#12463;&#12522;&#12503;&#12488;&#12434;&#20491;&#21029;&#12395;&#35377;&#21487;&#12377;&#12427; &#38;lt;code&#38;gt;&#38;#039;nonce-...&#38;#039;&#38;lt;/code&#38;gt; &#12420; &#38;lt;code&#38;gt;&#38;#039;sha256-...&#38;#039;&#38;lt;/code&#38;gt; &#12418;&#20351;&#12360;&#12414;&#12377;&#12290;&#38;lt;code&#38;gt;frame-ancestors&#38;lt;/code&#38;gt;&#12289;&#38;lt;code&#38;gt;base-uri&#38;lt;/code&#38;gt;&#12289;&#38;lt;code&#38;gt;form-action&#38;lt;/code&#38;gt; &#12399; &#38;lt;code&#38;gt;default-src&#38;lt;/code&#38;gt; &#12391;&#12399;&#20195;&#29992;&#12373;&#12428;&#12394;&#12356;&#12383;&#12417;&#12289;&#20491;&#21029;&#12395;&#26360;&#12365;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;CSP&#12398;&#30906;&#35469;&#26041;&#27861;&#38283;&#30330;&#32773;&#12484;&#12540;&#12523;&#12398;&#12300;&#12493;&#12483;&#12488;&#12527;&#12540;&#12463;&#12301;&#12479;&#12502;&#12391;&#12524;&#12473;&#12509;&#12531;&#12473;&#12504;&#12483;&#12480;&#12540;&#12434;&#35211;&#12427;&#12363;&#12289;&#27425;&#12398;&#12467;&#12510;&#12531;&#12489;&#12434;&#23455;&#34892;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;curl -s -D - -o /dev/null https://example.com/ &#124; grep -i &#38;#039;^content-security-policy&#38;#039;&#38;lt;/code&#38;gt; &#12509;&#12522;&#12471;&#12540;&#12395;&#21453;&#12375;&#12383;&#35501;&#12415;&#36796;&#12415;&#12399;&#12289;&#38283;&#30330;&#32773;&#12484;&#12540;&#12523;&#12398;&#12300;&#12467;&#12531;&#12477;&#12540;&#12523;&#12301;&#12395;&#12300;Refused to load ...&#12301;&#12394;&#12393;&#12398;&#24418;&#12391;&#35352;&#37682;&#12373;&#12428;&#12414;&#12377;&#12290;&#38;lt;code&#38;gt;Content-Security-Policy-Report-Only&#38;lt;/code&#38;gt; &#12384;&#12369;&#12364;&#20986;&#12427;&#22580;&#21512;&#12399;&#12289;&#12414;&#12384;&#24375;&#21046;&#12373;&#12428;&#12390;&#12356;&#12414;&#12379;&#12435;&#12290;&#38;lt;br/&#38;gt;CSP&#12398;&#35373;&#23450;&#20363;&#12356;&#12365;&#12394;&#12426;&#24375;&#21046;&#12377;&#12427;&#12392;&#12289;&#12469;&#12452;&#12488;&#12398;&#34920;&#31034;&#12420;&#27231;&#33021;&#12364;&#22730;&#12428;&#12427;&#12371;&#12392;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&#12414;&#12378; &#38;lt;code&#38;gt;Content-Security-Policy-Report-Only&#38;lt;/code&#38;gt; &#12391;&#36949;&#21453;&#12398;&#35352;&#37682;&#12384;&#12369;&#12434;&#34892;&#12356;&#12289;&#12467;&#12531;&#12477;&#12540;&#12523;&#12398;&#36949;&#21453;&#12364;&#12394;&#12367;&#12394;&#12387;&#12390;&#12363;&#12425;&#12289;&#24375;&#21046;&#12398; &#38;lt;code&#38;gt;Content-Security-Policy&#38;lt;/code&#38;gt; &#12395;&#20999;&#12426;&#26367;&#12360;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;Apache(.htaccess)&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;Header always set Content-Security-Policy-Report-Only &#38;quot;default-src &#38;#039;self&#38;#039;; img-src &#38;#039;self&#38;#039; data: https:; object-src &#38;#039;none&#38;#039;; base-uri &#38;#039;self&#38;#039;&#38;quot;&#38;lt;/code&#38;gt; nginx&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;add_header Content-Security-Policy-Report-Only &#38;quot;default-src &#38;#039;self&#38;#039;; img-src &#38;#039;self&#38;#039; data: https:; object-src &#38;#039;none&#38;#039;; base-uri &#38;#039;self&#38;#039;&#38;quot; always;&#38;lt;/code&#38;gt; WordPress(&#23376;&#12486;&#12540;&#12510;&#12398;functions.php)&#12398;&#20363;&#12391;&#12377;&#12290;&#38;lt;br/&#38;gt; &#38;lt;code&#38;gt;add_action(&#38;#039;send_headers&#38;#039;, function () {    header(&#38;quot;Content-Security-Policy-Report-Only: default-src &#38;#039;self&#38;#039;; img-src &#38;#039;self&#38;#039; data: https:; object-src &#38;#039;none&#38;#039;; base-uri &#38;#039;self&#38;#039;&#38;quot;);});&#38;lt;/code&#38;gt; &#23455;&#38555;&#12398;&#12469;&#12452;&#12488;&#12391;&#12399;&#12289;&#35299;&#26512;&#12479;&#12464;&#12420;&#22475;&#12417;&#36796;&#12415;&#22320;&#22259;&#12394;&#12393;&#12398;&#22806;&#37096;&#12469;&#12540;&#12499;&#12473;&#12364;&#36949;&#21453;&#12392;&#12375;&#12390;&#35352;&#37682;&#12373;&#12428;&#12414;&#12377;&#12290;&#24517;&#35201;&#12394;&#12418;&#12398;&#12384;&#12369;&#12434;&#21462;&#24471;&#20803;&#12395;&#21152;&#12360;&#12390;&#12356;&#12365;&#12414;&#12377;&#12290;&#36949;&#21453;&#12398;&#22577;&#21578;&#12434;&#38598;&#12417;&#12383;&#12356;&#22580;&#21512;&#12399;&#12289;&#38;lt;code&#38;gt;report-to&#38;lt;/code&#38;gt; &#12420; &#38;lt;code&#38;gt;report-uri&#38;lt;/code&#38;gt; &#12391;&#36865;&#20449;&#20808;&#12434;&#25351;&#23450;&#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;script-src&#38;lt;/code&#38;gt; &#12395; &#38;lt;code&#38;gt;&#38;#039;unsafe-inline&#38;#039;&#38;lt;/code&#38;gt; &#12420; &#38;lt;code&#38;gt;*&#38;lt;/code&#38;gt;&#12289;&#38;lt;code&#38;gt;https:&#38;lt;/code&#38;gt; &#12434;&#20837;&#12428;&#12427;&#12392;&#12289;XSS&#12434;&#27490;&#12417;&#12427;&#21177;&#26524;&#12364;&#12411;&#12392;&#12435;&#12393;&#22833;&#12431;&#12428;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#35377;&#21487;&#12377;&#12427;&#21462;&#24471;&#20803;&#12434;&#20006;&#12409;&#12427;&#26041;&#24335;&#12399;&#12289;&#35373;&#35336;&#12392;&#32173;&#25345;&#12364;&#38627;&#12375;&#12367;&#12394;&#12426;&#12364;&#12385;&#12391;&#12377;&#12290;MDN&#12399;&#12289;nonce&#12420;&#12495;&#12483;&#12471;&#12517;&#12434;&#20351;&#12358;&#26041;&#24335;&#12434;&#21223;&#12417;&#12390;&#12356;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38;lt;code&#38;gt;&#38;amp;lt;meta http-equiv=&#38;quot;Content-Security-Policy&#38;quot;&#38;amp;gt;&#38;lt;/code&#38;gt; &#12391;&#12399;&#12289;&#38;lt;code&#38;gt;frame-ancestors&#38;lt;/code&#38;gt; &#12420; &#38;lt;code&#38;gt;report-uri&#38;lt;/code&#38;gt; &#12364;&#21177;&#12363;&#12378;&#12289;Report-Only&#12418;&#20351;&#12360;&#12414;&#12379;&#12435;&#12290;HTTP&#12504;&#12483;&#12480;&#12540;&#12391;&#25351;&#23450;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;Report-Only&#12398;&#20013;&#12398; &#38;lt;code&#38;gt;frame-ancestors&#38;lt;/code&#38;gt; &#12399;&#28961;&#35222;&#12373;&#12428;&#12414;&#12377;&#12290;&#12463;&#12522;&#12483;&#12463;&#12472;&#12515;&#12483;&#12461;&#12531;&#12464;&#23550;&#31574;&#12384;&#12369;&#12434;&#20808;&#12395;&#34892;&#12358;&#12394;&#12425;&#12289;&#24375;&#21046;&#12398; &#38;lt;code&#38;gt;Content-Security-Policy: frame-ancestors &#38;#039;self&#38;#039;&#38;lt;/code&#38;gt; &#12398;1&#34892;&#12363;&#12425;&#22987;&#12417;&#12425;&#12428;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;WordPress&#12398;&#31649;&#29702;&#30011;&#38754;&#12399;&#12452;&#12531;&#12521;&#12452;&#12531;&#12473;&#12463;&#12522;&#12503;&#12488;&#12434;&#22810;&#12367;&#20351;&#12356;&#12414;&#12377;&#12290;&#31649;&#29702;&#30011;&#38754;&#12395;&#12414;&#12391;&#24375;&#21046;&#12377;&#12427;&#21069;&#12395;&#12289;&#21205;&#20316;&#12434;&#30906;&#12363;&#12417;&#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;Content-Security-Policy&#12398;&#26377;&#28961;&#12392;&#12289;&#38;lt;code&#38;gt;script-src&#38;lt;/code&#38;gt; &#12395; &#38;lt;code&#38;gt;&#38;#039;unsafe-inline&#38;#039;&#38;lt;/code&#38;gt; &#12394;&#12393;&#12398;&#24369;&#12356;&#25351;&#23450;&#12364;&#27531;&#12387;&#12390;&#12356;&#12394;&#12356;&#12363;&#12434;&#35386;&#26029;&#12375;&#12414;&#12377;&#12290;Report-Only&#12384;&#12369;&#12391;&#24375;&#21046;&#12373;&#12428;&#12390;&#12356;&#12394;&#12356;&#29366;&#24907;&#12418;&#12289;&#21306;&#21029;&#12375;&#12390;&#31034;&#12375;&#12414;&#12377;&#12290;&#38;lt;br/&#38;gt;&#38306;&#36899;&#29992;&#35486;XSS(&#12463;&#12525;&#12473;&#12469;&#12452;&#12488;&#12473;&#12463;&#12522;&#12503;&#12486;&#12451;&#12531;&#12464;)&#38;lt;br/&#38;gt;&#12463;&#12522;&#12483;&#12463;&#12472;&#12515;&#12483;&#12461;&#12531;&#12464;&#38;lt;br/&#38;gt;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#12504;&#12483;&#12480;&#12540;&#38;lt;br/&#38;gt;SRI(&#12469;&#12502;&#12522;&#12477;&#12540;&#12473;&#23436;&#20840;&#24615;)&#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;CSP &#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/csp/"  data-gt-translate-attributes='[{"attribute":"data-cmtooltip", "format":"html"}]'  tabindex='0' role='link'>CSP</a>&#12398;&#27573;&#38542;&#23566;&#20837;&#12289;&#37325;&#35079;&#26178;&#12398;&#25201;&#12356;&#12289;&#30906;&#35469;&#12392;&#25147;&#12375;&#26041;&#12414;&#12391;&#12414;&#12392;&#12417;&#12390;&#12356;&#12414;&#12377;&#12290;</p>
<p>The post <a href="https://slt-inc.jp/article/security-headers-setup/">セキュリティヘッダーの設定方法｜HSTS・CSPの設定例つき</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>セキュリティヘッダーは、1つのヘッダーを1か所（原則はWebサーバー）だけで付けるのが基本です。X-Content-Type-Options、Referrer-Policy、X-Frame-Options、Permissions-Policyの4つは、確認後すぐに入れられます。HSTSはmax-age=300から段階的に延ばし、CSPはReport-Onlyで違反を集めてから強制に切り替えます。設定後は curl -I で、トップページ、存在しないURL、リダイレクトの応答に、各ヘッダーが1本ずつ付いているかを確かめてください。</p></div>

<h2>セキュリティヘッダーは影響の小さい順に4段階で入れる</h2>
<p>最初に入れるのは、表示が壊れにくいX-Content-Type-OptionsとReferrer-Policyです。次にX-Frame-OptionsとPermissions-Policy、3段階目にHSTS、最後にCSPを入れます。段階を分けておくと、表示や機能が壊れたときに原因のヘッダーを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>1</td><td>X-Content-Type-Options</td><td><code>nosniff</code></td><td>JavaScriptとCSSが正しいContent-Typeで返っているか</td></tr>
<tr><td>1</td><td>Referrer-Policy</td><td><code>strict-origin-when-cross-origin</code></td><td>外部サービスにURLのパスまで渡す連携がないか</td></tr>
<tr><td>2</td><td>X-Frame-Options</td><td><code>SAMEORIGIN</code></td><td>他サイトの枠（iframe）に自サイトを表示させていないか</td></tr>
<tr><td>2</td><td>Permissions-Policy</td><td><code>camera=(), microphone=(), geolocation=()</code></td><td>カメラ、マイク、位置情報を使う画面がないか</td></tr>
<tr><td>3</td><td>Strict-Transport-Security</td><td><code>max-age=300</code>から延ばし、最終は1年以上</td><td>全ページとサブドメインがHTTPSか、証明書の更新が自動か</td></tr>
<tr><td>4</td><td>Content-Security-Policy</td><td>Report-Onlyから始め、値はサイトごとに設計</td><td>外部のタグ、埋め込み、インラインスクリプトの一覧</td></tr>
</tbody></table></div>
<p><a href="https://slt-inc.jp/glossary/security-headers/">セキュリティヘッダー</a>の推奨値は、OWASPの<a href="https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html">HTTP Headers Cheat Sheet</a>を基準にし、X-Frame-Optionsだけは自サイト内の枠表示を残せる <code>SAMEORIGIN</code> にしています（OWASPは <code>DENY</code>）。段階1と同時に、ServerヘッダーとX-Powered-Byに出る版の表記も消します。</p>
<div class="slt-callout is-point"><p class="slt-callout-title">ポイント</p><p>各段階の後で、問い合わせフォーム、決済、地図、動画、アクセス解析など、外部と連携する画面を動かしてから次へ進みます。</p></div>

<h2>ヘッダーはどこで付き、ブラウザはどう使うか</h2>
<p>セキュリティヘッダーは、アプリ（WordPressなど）、Webサーバー、CDNのどこでも付けられ、ブラウザは手元に届いた応答のヘッダーに従って動作を変えます。ブラウザからは、どこで付いたヘッダーかを区別できません。1つのヘッダーを付ける場所を1か所に決めることが、重複と付け漏れを防ぐ近道です。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 400"><title>ヘッダーが付く場所とブラウザでの使われ方</title><desc>左の列に、アプリ、Webサーバー、CDNの3つの箱が上から順に並び、応答はこの順に通ってヘッダーが足される。右のブラウザは、届いたヘッダーに従ってHTTPSへの固定、読み込みの制限、他サイトの枠の拒否、使わない機能の停止を行う。下の赤枠は、同じヘッダーを2か所で付けるとブラウザに2本届くことを示す。</desc><defs><marker id="f1-arrow" viewBox="0 0 10 10" refX="9" 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="20" y="20" width="330" height="80" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="185" y="54" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">アプリ（PHPなど）</text><text x="185" y="88" text-anchor="middle" font-size="22" fill="#10265A">ページごとに付ける</text><line x1="185" y1="100" x2="185" y2="126" stroke="#10265A" stroke-width="3" marker-end="url(#f1-arrow)"/><rect x="20" y="130" width="330" height="80" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="185" y="164" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">Webサーバー</text><text x="185" y="198" text-anchor="middle" font-size="22" fill="#10265A">Apache、nginxで付ける</text><line x1="185" y1="210" x2="185" y2="236" stroke="#10265A" stroke-width="3" marker-end="url(#f1-arrow)"/><rect x="20" y="240" width="330" height="80" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="185" y="274" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">CDN</text><text x="185" y="308" text-anchor="middle" font-size="22" fill="#10265A">Cloudflareなどで上書き</text><line x1="350" y1="280" x2="464" y2="280" stroke="#10265A" stroke-width="4" marker-end="url(#f1-arrow)"/><text x="406" y="266" text-anchor="middle" font-size="22" fill="#10265A">応答</text><rect x="470" y="40" width="310" height="280" rx="10" fill="#FFFFFF" stroke="#10265A" stroke-width="3"/><text x="625" y="82" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">ブラウザ</text><line x1="500" y1="100" x2="750" y2="100" stroke="#4A5C82" stroke-width="3"/><text x="500" y="144" font-size="22" fill="#10265A">HTTPSに固定する</text><text x="500" y="188" font-size="22" fill="#10265A">読み込みを制限する</text><text x="500" y="232" font-size="22" fill="#10265A">他サイトの枠を拒否</text><text x="500" y="276" font-size="22" fill="#10265A">使わない機能を止める</text><rect x="20" y="338" width="760" height="52" rx="10" fill="#FFFFFF" stroke="#D00A0A" stroke-width="3"/><text x="400" y="372" text-anchor="middle" font-size="22" fill="#10265A">同じヘッダーを2か所で付けると、ブラウザに2本届く</text></svg><figcaption>図1 ヘッダーは、アプリ、Webサーバー、CDNの順に応答へ足されます。ブラウザは、HSTSならHTTPSへの固定、CSPなら読み込みの制限、X-Frame-Optionsなら枠の拒否、Permissions-Policyなら機能の停止を行います。同じヘッダーを2か所で付けると、2本届きます。</figcaption></figure>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>付ける場所</th><th>ヘッダーが付く応答</th><th>向いている場面</th><th>注意点</th></tr></thead><tbody>
<tr><td>Webサーバー（Apache、nginx）</td><td>静的ファイル、エラー、リダイレクトを含む全応答（alwaysを付けた場合）</td><td>基本の置き場所</td><td>アプリが同じヘッダーを出すと2本並ぶ</td></tr>
<tr><td>CDN（Cloudflareなど）</td><td>CDNを通る全応答</td><td>サーバーの設定を変えられないとき</td><td>「追加」の操作は既存の同名ヘッダーを残す</td></tr>
<tr><td>アプリ（WordPressなど）</td><td>アプリが生成したページだけ</td><td>応答ごとに値が変わるCSPのnonce</td><td>画像、CSS、サーバー側のリダイレクトには付かない</td></tr>
</tbody></table></div>
<div class="slt-callout is-point"><p class="slt-callout-title">ポイント</p><p>原則はWebサーバーで付け、CSPのnonceのように応答ごとに値を作るものだけをアプリで付けます。CDNは、サーバーの設定を変えられないときの代わりです。どのヘッダーをどこで付けたかは、一覧にして残します。</p></div>

<h2>各ヘッダーの設定値と推奨値</h2>
<p>段階1と2の4つは推奨値がほぼ決まっており、自サイトの使い方と突き合わせれば決められます。HSTSとCSPは、後の節の手順で扱います。</p>

<h3>X-Content-Type-Options: nosniff</h3>
<p><a href="https://slt-inc.jp/glossary/x-content-type-options/">X-Content-Type-Options</a>の値は <code>nosniff</code> だけで、Content-TypeがJavaScriptの種類でないスクリプトと、text/cssでないスタイルシートを読み込ませなくします。Chrome 146の場合、text/plainで返したJavaScriptは、nosniffが無いと実行され、付けると止まります。</p>
<p>入れる前に <code>curl -sI https://example.com/main.js</code> で、主なJavaScriptのContent-Typeを調べます。<code>text/javascript</code> などなら合格で、<code>text/plain</code> などならサーバーのMIMEタイプの設定を先に直します。</p>

<h3>Referrer-Policy: strict-origin-when-cross-origin</h3>
<p><a href="https://slt-inc.jp/glossary/referrer-policy/">Referrer-Policy</a>は、リンク先や外部の読み込み先へ、元のページのURLをどこまで伝えるかを決めます。推奨値は、同じオリジンにはURL全体を、別のオリジンには <code>https://example.com/</code> のようなオリジンだけを伝え、HTTPSからHTTPへは何も送りません。指定が無いときの既定値でもありますが、OWASPは明示するよう勧めています。</p>
<p>URLに会員番号などを含むサイトでは、<code>no-referrer</code> や <code>same-origin</code> も選べます。ただし、Google Maps Platformの公式文書によると、この2つではRefererが送られず、Refererで制限したAPIキーが要求を拒否する場合があります。</p>

<h3>X-Frame-Options と frame-ancestors の関係</h3>
<p><a href="https://slt-inc.jp/glossary/x-frame-options/">X-Frame-Options</a>は、自サイトのページを他サイトの枠（iframe）の中に表示させない指示で、<a href="https://slt-inc.jp/glossary/clickjacking/">クリックジャッキング</a>を防ぎます。値は、すべての枠を拒否する <code>DENY</code> と、すべての親が同じオリジンのときだけ許す <code>SAMEORIGIN</code> の2つです。特定のサイトを許す <code>ALLOW-FROM</code> は廃止され、現在のブラウザはこの値を含むヘッダー全体を無視します。</p>
<p>特定のサイトにだけ埋め込みを許す方法は、CSPの <code>frame-ancestors 'self' https://partner.example.jp</code> のような指定です。CSPの仕様（<a href="https://www.w3.org/TR/CSP3/">W3C CSP Level 3</a>）は、強制モードのCSPに frame-ancestors があれば、X-Frame-Optionsを無視すると定めています。Chrome 146でも、<code>X-Frame-Options: DENY</code> より frame-ancestors の許可が優先されます。</p>
<p>新旧のブラウザに対応するため、2つは併記できます。WordPressは管理画面やカスタマイザーで自サイトを枠の中に表示し、本体も <code>SAMEORIGIN</code> を付けるため、サーバー側もSAMEORIGINにそろえます。</p>

<h3>Permissions-Policy</h3>
<p><a href="https://slt-inc.jp/glossary/permissions-policy/">Permissions-Policy</a>は、カメラ、マイク、位置情報などのブラウザ機能を、そのページと埋め込んだiframeで使えるかを決めます。値は機能ごとに、<code>()</code> で全面禁止、<code>(self)</code> で自サイトだけ、<code>(self "https://map.example.jp")</code> で指定のオリジンにも許可します。旧仕様のFeature-Policyの <code>camera 'none'</code> は、<code>camera=()</code> と書き換えます。</p>
<p>止めるのは、使っていない機能だけです。店舗検索で位置情報を使うなら <code>geolocation=(self)</code> にし、決済でPayment Request APIを使うなら <code>payment</code> は止めません。</p>

<h3>付けないヘッダーと、消すヘッダー</h3>
<p>X-XSS-Protectionは廃止されたヘッダーで、OWASPは付けないか、付けるなら <code>0</code> にするよう勧めています。古いブラウザのXSS検出機能が、安全なサイトにかえって<a href="https://slt-inc.jp/glossary/xss/">XSS</a>の弱点を生む場合があったためです。ChromiumがVersion 107で廃止したExpect-CTも、付ける必要はありません。</p>
<p>ServerとX-Powered-Byに出る版の表記は、Apacheならhttpd.confの <code>ServerTokens Prod</code>（.htaccessでは不可）で消します。nginxは <code>server_tokens off;</code>、PHPはphp.iniの <code>expose_php = Off</code> です。版を隠すだけでは安全にならないとApacheの公式文書も述べており、<a href="https://slt-inc.jp/article/wordpress-vulnerability-check/">WordPressの本体とプラグインの更新</a>のような更新作業を優先します。</p>

<h2>Apache、nginx、WordPress、Cloudflareの設定例</h2>
<p>段階1と2の4つのヘッダーに、HSTSの最初の値（max-age=300）を加えた設定例です。どの環境でも、404などのエラー応答とリダイレクトにもヘッダーが付く書き方を選ぶことが要点です。</p>

<h3>Apache（.htaccess、VirtualHost）</h3>
<pre class="slt-code"><code># .htaccess、またはHTTPSのVirtualHostに書く
&lt;IfModule mod_headers.c&gt;
  # アプリが同名のヘッダーを出しても1本になるよう、unsetとalways setを対にする
  Header unset X-Content-Type-Options
  Header always set X-Content-Type-Options "nosniff"
  Header unset Referrer-Policy
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
  Header unset X-Frame-Options
  Header always set X-Frame-Options "SAMEORIGIN"
  Header unset Permissions-Policy
  Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
  Header unset Strict-Transport-Security
  Header always set Strict-Transport-Security "max-age=300"
  # PHPの版の表記を消す（PHPの動かし方で入る表が違うため2行とも書く）
  Header unset X-Powered-By
  Header always unset X-Powered-By
&lt;/IfModule&gt;</code></pre>
<p>Apacheの <code>Header</code> には、既定の「onsuccess」と「always」の2つの表があります。Apacheが自ら作る404やリダイレクト（RedirectやRewriteRuleの301）では、always の表しか使われず、always の無い指定は付きません（<a href="https://httpd.apache.org/docs/2.4/mod/mod_headers.html">mod_headersの公式文書</a>）。</p>
<p>PHPのヘッダーが入る表は動かし方で違い、mod_phpでは既定の表に、CGIやFastCGI（PHP-FPMなど）では always の表に入ります。<code>Header always set</code> だけではmod_phpでアプリの同名ヘッダーと2本並ぶため、例のように <code>Header unset</code> と対で書くと、どちらの方式でも1本になります。LiteSpeedなどApache互換のサーバーでは扱いが異なる場合があるため、設定後にcurlで本数を確かめます。</p>
<p>.htaccessの指定は、そのフォルダに届いた要求にだけ効き、VirtualHostやコントロールパネルで行うリダイレクトには付きません。HSTSは、変更できるならVirtualHostに書くのが確実です。mod_headersが無効な場合、<code>&lt;IfModule&gt;</code> で囲んだ指定は黙って無視され、囲まない指定は500エラーになります。</p>

<h3>nginx</h3>
<pre class="slt-code"><code># /etc/nginx/snippets/security-headers.conf（共通の指定を1か所にまとめる）
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header Strict-Transport-Security "max-age=300" always;

# HTTPSのserverブロック（証明書などの設定は省略）
server {
    listen 443 ssl;
    server_name example.com;
    server_tokens off;
    include snippets/security-headers.conf;

    location /assets/ {
        add_header Cache-Control "public, max-age=2592000";
        # add_headerを書いた場所では上の指定が消えるため、読み込み直す
        include snippets/security-headers.conf;
    }
}</code></pre>
<p>nginxの <code>add_header</code> は、<code>always</code> が無いと200や301などの決まった応答にしか付かず、404や500には付きません（<a href="https://nginx.org/en/docs/http/ngx_http_headers_module.html">nginxの公式文書</a>）。また、下の階層に <code>add_header</code> が1つでもあると、上の階層の <code>add_header</code> はすべて引き継がれません。例の <code>/assets/</code> のように、キャッシュ用のヘッダーを足したlocationでセキュリティヘッダーが消えるのは、このためです。</p>
<p>対策は、共通のファイルを各locationで読み込み直すか、nginx 1.29.3以降（安定版は1.30.0以降）の <code>add_header_inherit merge;</code> をserverブロックに書く方法です。OSの標準パッケージは版が古いことがあるため、<code>nginx -v</code> で確かめてから選びます。アプリが出した同名のヘッダーは置き換わらずに残るので、PHP-FPMなら <code>fastcgi_hide_header X-Frame-Options;</code> のように隠します（リバースプロキシは <code>proxy_hide_header</code>）。</p>

<h3>WordPress</h3>
<p>サーバーの設定を変えられない場合は、WordPressの <code>wp_headers</code> フィルターで足せます。コードを <code>wp-content/mu-plugins/</code> の直下に置くと自動で読み込まれ、テーマの変更でも消えず、管理画面から無効にもできません。</p>
<pre class="slt-code"><code>&lt;?php
// wp-content/mu-plugins/security-headers.php として保存する
add_filter( 'wp_headers', function ( $headers ) {
    $headers['X-Content-Type-Options'] = 'nosniff';
    $headers['Referrer-Policy']        = 'strict-origin-when-cross-origin';
    $headers['X-Frame-Options']        = 'SAMEORIGIN';
    $headers['Permissions-Policy']     = 'camera=(), microphone=(), geolocation=()';
    return $headers;
} );</code></pre>
<p>このフィルターは、<a href="https://developer.wordpress.org/reference/hooks/wp_headers/">公式リファレンス</a>にあるとおりWP::send_headers()の中で適用され、効くのは公開ページの応答だけです。管理画面、ログイン画面、REST API、画像やCSSには付かないため、HSTSはサーバーかCDNで付けます。</p>
<p>WordPress 6.9以降は、管理画面とログイン画面に、本体が <code>X-Frame-Options: SAMEORIGIN</code> と <code>frame-ancestors 'self'</code> のCSPを付けます。サーバー側でCSPを付けるときは、この2つの画面でも値が食い違わないかの確認が必要です。</p>

<h3>Cloudflare</h3>
<p>Cloudflareでは、Rules Overviewの「Create rule」から「Response Header Transform Rule」を作ります。操作は、同名のヘッダーを上書きする「Set static」を選びます。「Add」は既存のヘッダーを残したまま足すため、オリジンの値と2本並びます。</p>
<p>HSTSは、Edge Certificatesの画面にある専用の設定で付けられます。マネージド変換の「Add security headers」は、OWASPが勧めない <code>X-XSS-Protection: 1; mode=block</code> や廃止済みのExpect-CTも付けるため、個別のルールで付ける方が推奨値にそろえやすくなります。</p>

<h2>HSTSの設定方法と、max-ageを延ばす手順</h2>
<p>HSTSは、HTTPSがサイト全体で安定してから、max-ageを5分、1週間、1か月と延ばし、最後に1年以上にします。HSTSを覚えたブラウザでは、証明書の期限切れなどのエラーのとき、利用者が警告を越えて進めなくなります。そのため、証明書の更新の自動化を先に済ませます。</p>
<p><a href="https://slt-inc.jp/glossary/hsts/">HSTS</a>を受け取ったブラウザは、受け取った時点からmax-ageの秒数だけそのホストを覚え、HTTPのURLもHTTPSに切り替えて接続します（<a href="https://www.rfc-editor.org/rfc/rfc6797">RFC 6797</a>）。HTTPの応答に付けたHSTSは無視されるため、HTTPSの応答に付けます。</p>
<ol class="slt-steps">
<li><strong>前提をそろえる</strong>全ページがHTTPSで表示され、<a href="https://slt-inc.jp/glossary/mixed-content/">混在コンテンツ</a>が無く、HTTPからHTTPSへ301で転送していることを確かめます。証明書の自動更新と期限の監視も整えます。期限の確かめ方は、<a href="https://slt-inc.jp/article/ssl-tls-certificate-check/">SSL/TLS証明書のチェック方法</a>で説明しています。</li>
<li><strong>サブドメインを含めるか決める</strong>includeSubDomainsは、社内向けを含むすべてのサブドメインがHTTPSで動く場合だけ付けます。付けるなら、登録窓口のhstspreload.orgが勧める手順のとおり、最初の5分の段階から付けて試します。</li>
<li><strong>max-age=300で配信する</strong>全ページと各サブドメインを開き、問い合わせ、決済、ログインまで動かします。</li>
<li><strong>1週間、1か月と延ばす</strong>604800、2592000の順に延ばします。各段階では、その値の期間が過ぎるまで待ってから次へ進みます。</li>
<li><strong>1年以上にする</strong>最終値は31536000（1年）以上にします。OWASPとhstspreload.orgの例は63072000（2年）です。</li>
</ol>
<pre class="slt-code"><code># 段階ごとの値（includeSubDomainsは、付けると決めた場合だけ）
Strict-Transport-Security: max-age=300; includeSubDomains
Strict-Transport-Security: max-age=604800; includeSubDomains
Strict-Transport-Security: max-age=2592000; includeSubDomains
Strict-Transport-Security: max-age=31536000; includeSubDomains</code></pre>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>preloadは付けません。hstspreload.org自身が『HSTSは推奨するが、HSTS preloadは推奨しない』と明記しています。ChromeやSafariはHSTSが無くてもHTTPの移動をHTTPSへ切り替えるため、preloadの上乗せの効果は小さいという説明です。</p><p>preloadを付けたヘッダーは、一覧への登録を求めているとみなされます。登録後の削除は、Chromeの更新で利用者に届くまで数か月かかり、他のブラウザでの反映は保証されません。</p></div>

<h2>CSPの設定例と、Report-Onlyからの段階導入</h2>
<p><a href="https://slt-inc.jp/glossary/csp/">CSP</a>は、まずContent-Security-Policy-Report-Onlyという名前で配信して違反を集め、正当な取得元を許可リストに足します。違反が出なくなったら、ヘッダー名をContent-Security-Policyに変えて強制します。Report-Onlyは読み込みを何も止めないので、本番のサイトで影響だけを測れるのが利点です。</p>
<figure class="slt-figure"><svg role="img" viewBox="0 0 800 360"><title>CSPを段階的に強制へ移す流れ</title><desc>4つの段階が左から右へ並ぶ。1は観察で、Report-Onlyで止めずに違反を記録する。2は修正で、違反を見て許可を足す。3は強制で、ヘッダー名をCSPに変えて止める。4は強化で、nonceやハッシュで絞る。3から1へ戻る赤い破線は、壊れたらヘッダー名を戻すことを示す。下段は、1と2ではReport-Onlyだけを送り、3と4では強制のCSPに加えて次の案をReport-Onlyで送ることを示す。</desc><defs><marker id="f2-arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto"><path d="M0,0 L10,5 L0,10 z" fill="#10265A"/></marker><marker id="f2-back" viewBox="0 0 10 10" refX="9" 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="360" fill="#FFFFFF"/><path d="M492 95 V58 H102 V89" fill="none" stroke="#D00A0A" stroke-width="3" stroke-dasharray="10 7" marker-end="url(#f2-back)"/><text x="297" y="44" text-anchor="middle" font-size="22" fill="#10265A">壊れたらヘッダー名を戻す</text><rect x="20" y="95" width="165" height="165" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="102" y="136" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">①観察</text><text x="102" y="180" text-anchor="middle" font-size="22" fill="#10265A">Report-Only</text><text x="102" y="220" text-anchor="middle" font-size="22" fill="#10265A">止めずに記録</text><line x1="185" y1="178" x2="209" y2="178" stroke="#10265A" stroke-width="4" marker-end="url(#f2-arrow)"/><rect x="215" y="95" width="165" height="165" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="297" y="136" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">②修正</text><text x="297" y="180" text-anchor="middle" font-size="22" fill="#10265A">違反を見て</text><text x="297" y="220" text-anchor="middle" font-size="22" fill="#10265A">許可を足す</text><line x1="380" y1="178" x2="404" y2="178" stroke="#10265A" stroke-width="4" marker-end="url(#f2-arrow)"/><rect x="410" y="95" width="165" height="165" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="492" y="136" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">③強制</text><text x="492" y="180" text-anchor="middle" font-size="22" fill="#10265A">名前をCSPに</text><text x="492" y="220" text-anchor="middle" font-size="22" fill="#10265A">変えて止める</text><line x1="575" y1="178" x2="599" y2="178" stroke="#10265A" stroke-width="4" marker-end="url(#f2-arrow)"/><rect x="605" y="95" width="165" height="165" rx="10" fill="#EEF2F9" stroke="#10265A" stroke-width="3"/><text x="687" y="136" text-anchor="middle" font-size="24" font-weight="bold" fill="#10265A">④強化</text><text x="687" y="180" text-anchor="middle" font-size="22" fill="#10265A">nonceや</text><text x="687" y="220" text-anchor="middle" font-size="22" fill="#10265A">ハッシュで絞る</text><rect x="20" y="286" width="360" height="56" rx="10" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="200" y="322" text-anchor="middle" font-size="22" fill="#10265A">送るのはReport-Only</text><rect x="410" y="286" width="360" height="56" rx="10" fill="#FFFFFF" stroke="#4A5C82" stroke-width="3"/><text x="590" y="322" text-anchor="middle" font-size="22" fill="#10265A">強制＋次の案はReport-Only</text></svg><figcaption>図2 CSPは、Report-Onlyでの観察、許可リストの修正、強制への切り替え、nonceやハッシュによる強化の順に進めます。下段は、各段階で送るヘッダーです。強制の後に問題が出たら、ヘッダー名をReport-Onlyに戻します。</figcaption></figure>
<ol class="slt-steps">
<li><strong>Report-Onlyで配信する</strong>最初は、自サイト以外の取得元を違反として記録するだけの方針にします（下の設定例）。</li>
<li><strong>全ページを巡回して違反を集める</strong>トップ、記事、フォーム、決済、管理画面まで開き、Consoleの違反を記録します。</li>
<li><strong>許可リストを直す</strong>アクセス解析、フォント、地図、動画などの取得元を、必要なディレクティブにだけ足します。</li>
<li><strong>ヘッダー名を変えて強制する</strong>違反が出なくなったら、Content-Security-Policyに切り替えます。さらに厳しくする案は、Report-Onlyで同時に送って試せます。</li>
<li><strong>nonceかハッシュで厳しくする</strong>インラインスクリプトを許す <code>'unsafe-inline'</code> を外し、web.devが勧める厳格なCSPへ近づけます。</li>
</ol>
<pre class="slt-code"><code># Apache（行末の\は次の行へ続く印。\の後ろに空白を入れない）
Header always set Content-Security-Policy-Report-Only "default-src 'self'; \
    img-src 'self' data: https:; object-src 'none'; base-uri 'self'; \
    form-action 'self'; frame-ancestors 'self'"

# nginx（serverブロックに書く。長い値は変数に分けて組み立てる）
set $csp "default-src 'self'; img-src 'self' data: https:; ";
set $csp "${csp}object-src 'none'; base-uri 'self'; ";
set $csp "${csp}form-action 'self'; frame-ancestors 'self'";
add_header Content-Security-Policy-Report-Only $csp always;</code></pre>
<p>default-srcが代わりを務めるのは、script-srcやimg-srcなどの取得系の指定だけです。base-uri、form-action、frame-ancestorsは個別に書きます。<code>object-src 'none'</code> はプラグインによる埋め込みを止める指定で、web.devの推奨にも含まれる値です。</p>
<p>Chrome 146では、違反はConsoleに情報（Info）として表示され、末尾に『The policy is report-only』で始まる一文が付きます。強制に切り替えると同じ違反がエラーになり、末尾は『The action has been blocked.』に変わります。インラインスクリプトの違反に示される『sha256-…』の値をscript-srcに足すと、そのスクリプトだけを許可できます。</p>
<p>違反をサーバーに集めるには、受け口を <code>Reporting-Endpoints</code> ヘッダーで示し、ポリシーに <code>report-to</code> を足します。設定例は<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy-Report-Only">MDNのContent-Security-Policy-Report-Only</a>にあり、古いブラウザ向けに <code>report-uri</code> も併記しています。受け口には、ブラウザが送るJSONを保存する仕組みが別に要ります。</p>
<p>強制に切り替えた後は、web.devが勧める<a href="https://web.dev/articles/strict-csp">厳格なCSP</a>へ近づけます。web.devは、ドメインを並べる許可リスト方式は多くの構成で回避されうるとし、nonce（応答ごとの乱数）かハッシュで許可する方式を勧めています。nonceは暗号学的に安全な乱数（128ビット以上が望ましい）で、応答のたびに作り直します。</p>
<pre class="slt-code"><code># web.devが勧める厳格なCSP（{RANDOM}は応答ごとに作る乱数）
Content-Security-Policy: script-src 'nonce-{RANDOM}' 'strict-dynamic';
    object-src 'none'; base-uri 'none';

# HTML側は、許可するscriptタグに同じ値を付ける
&lt;script nonce="{RANDOM}" src="/js/app.js"&gt;&lt;/script&gt;</code></pre>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>script-srcに <code>'unsafe-inline'</code> を残すと、差し込まれたインラインスクリプトも実行できるため、XSSへの効果は大きく下がります。WordPressのように本体やプラグインがインラインスクリプトを出すサイトでは、最初は残すしかない場合もあります。その場合でも、frame-ancestors、form-action、base-uri、object-srcの制限は働きます。</p></div>

<h2>同じヘッダーが2本届いたときに起きること</h2>
<p>同名のヘッダーが2本届いたときの扱いはヘッダーごとに違い、HSTSは最初の1本だけ、CSPは両方が効いて厳しい側が勝ちます。X-Frame-Optionsは値が食い違うと、同じサイトの枠の中でも表示を拒否します。重複はエラーにならず黙って起きるため、確認の段階で本数を数えます。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>ヘッダー</th><th>2本届いたときの扱い</th><th>根拠</th></tr></thead><tbody>
<tr><td>Strict-Transport-Security</td><td>最初の1本だけを処理する</td><td>RFC 6797</td></tr>
<tr><td>Content-Security-Policy</td><td>両方を適用し、より厳しい制限が効く</td><td>MDN、Chrome 146の動作</td></tr>
<tr><td>X-Frame-Options</td><td>同じ値なら1本と同じ。DENYとSAMEORIGINが並ぶと、すべての枠で拒否</td><td>Chrome 146の動作</td></tr>
<tr><td>Referrer-Policy</td><td>カンマで並んだ値のうち、最後の有効な値を使う</td><td>MDN、Chrome 146の動作</td></tr>
<tr><td>Permissions-Policy</td><td>同じ機能の指定は、後に届いた方が有効</td><td>Chrome 146の動作</td></tr>
</tbody></table></div>
<p>根拠をChrome 146の動作とした行は、他のブラウザで扱いが異なる場合があります。重複を残さないことが、どのブラウザでも確実な対策です。</p>
<p>X-Frame-Optionsの値が食い違うと、Chrome 146はConsoleに次の例のように表示し、DENYとして扱います。</p>
<pre class="slt-code"><code>Refused to display 'https://example.com/' in a frame because it set multiple
'X-Frame-Options' headers with conflicting values ('DENY, SAMEORIGIN').
Falling back to 'deny'.</code></pre>
<p>主な原因は、アプリとサーバーによる二重の付与と、Apacheの <code>Header add</code> やCloudflareの「Add」のような追加の操作です。付ける場所を1つに絞り、操作はsetにそろえます。</p>

<h2>設定できたかをcurlと開発者ツールで確かめる</h2>
<p>確認は設定ファイルではなく、外から取った実際の応答で行います。トップページ、存在しないURL、HTTPSのリダイレクト、画像やCSS、ログイン画面の5種類で、各ヘッダーが1本ずつ付いていれば合格です。</p>
<pre class="slt-code"><code># ヘッダーだけを取得する（-IはHEADリクエスト）
curl -sI https://www.example.com/
# GETで取得し、応答ヘッダーだけを表示する
curl -s -D - -o /dev/null https://www.example.com/
# 404の応答にも付いているか
curl -sI https://www.example.com/no-such-page/
# wwwへ転送するリダイレクトに、HSTSが付いているか
curl -sI https://example.com/ | grep -i -E '^(HTTP|location|strict-transport)'
# 重複していないか（1なら合格）
curl -sI https://www.example.com/ | grep -ci '^x-frame-options:'
# Windows PowerShell 5.1は curl.exe と書き、findstrで絞る
curl.exe -sI https://www.example.com/ | findstr /i "x-frame-options"</code></pre>
<p>Windows PowerShell 5.1では <code>curl</code> がInvoke-WebRequestの別名のため、<code>.exe</code> まで書きます。HEADとGETで違う応答を返すサーバーもあるので、GETの結果も見ておくと確実です。</p>
<ul class="slt-check">
<li>トップページ（200）に、入れたヘッダーがそれぞれ1本ずつ付いている</li>
<li>存在しないURL（404）にも、同じヘッダーが付いている</li>
<li>wwwの有無をそろえる転送など、HTTPSのリダイレクトにHSTSが付いている</li>
<li>画像、CSS、JavaScriptにも付き、Content-Typeが種類どおりになっている</li>
<li>ログイン画面や管理画面で、X-Frame-OptionsやCSPの値が食い違っていない</li>
</ul>
<p>ブラウザでは、F12キーで開発者ツールを開き、Network（ネットワーク）タブで再読み込みします。先頭の文書を選んでHeaders（ヘッダー）のResponse Headers（レスポンス ヘッダー）を見て、CSPの違反はConsole（コンソール）タブで確かめます。</p>
<p>主なヘッダーをまとめて確かめるには、無料の<a href="https://slt-inc.jp/service/security-checker/">Webサイトのセキュリティチェック</a>も使えます。URLを入れると、HSTSの有無と有効期間、サブドメインへの適用、CSP、X-Frame-Optionsなど6種類のヘッダーを確認し、AからFの判定と直し方を表示します。ヘッダー以外の確認項目は、<a href="https://slt-inc.jp/article/website-security-check-items/">Webサイトのセキュリティチェック項目の一覧</a>にまとめています。</p>

<h2>表示や機能が壊れたときの戻し方</h2>
<p>CSP、X-Frame-Options、Permissions-Policyは、設定を戻せば次の読み込みから元に戻ります。HSTSだけは、ブラウザが覚えた期間が残るため、すぐには戻せません。</p>
<div class="slt-table-wrap"><table class="slt-table"><thead><tr><th>ヘッダー</th><th>主な症状</th><th>戻し方</th></tr></thead><tbody>
<tr><td>Content-Security-Policy</td><td>アクセス解析、地図、フォームが動かない</td><td>ヘッダー名をReport-Onlyに戻し、許可リストを直す</td></tr>
<tr><td>X-Frame-Options、frame-ancestors</td><td>提携先の枠の中やプレビューが表示されない</td><td>許す親のオリジンだけをframe-ancestorsに足す</td></tr>
<tr><td>Permissions-Policy</td><td>位置情報やカメラが動かない（Consoleに『Permissions policy violation』）</td><td>その機能を <code>(self)</code> などの許可に変える</td></tr>
<tr><td>X-Content-Type-Options</td><td>JavaScriptやCSSが読み込まれない（Consoleに『strict MIME type checking is enabled』）</td><td>nosniffは外さず、Content-Typeを直す</td></tr>
<tr><td>Strict-Transport-Security</td><td>証明書のエラーで、利用者がページに進めない</td><td>証明書を直す（下の注意を参照）</td></tr>
</tbody></table></div>
<div class="slt-callout is-warn"><p class="slt-callout-title">注意</p><p>HSTSを外すだけでは、ブラウザの記憶は期限まで残ります。HTTPSの応答で <code>max-age=0</code> を返すと、そのブラウザが次にHTTPSで接続したときに記憶が消えますが、HTTPでは消せず、再訪しない利用者には届きません。CloudflareのHSTSも同じで、HSTSを無効にして元のmax-ageの期間が過ぎる前にHTTPSをやめると、サイトに接続できなくなると公式文書が警告しています。</p></div>
<div class="slt-callout is-note"><p class="slt-callout-title">補足</p><p>試験で自分のChromeに残った記憶は、<code>chrome://net-internals/#hsts</code> の「Delete domain security policies」にドメインを入れて消せます。消せるのはそのブラウザの記憶だけで、プリロード済みの登録は消せません。CDNやページキャッシュが応答を保存している場合は、キャッシュを消すまで古いヘッダーが届きます。</p></div>
<p>ヘッダーの設定を1つのファイルにまとめて変更の履歴を残すと、1行の変更で戻せます。影響範囲を見極めにくい場合や、原因のヘッダーを切り分けられない場合は、<a href="https://slt-inc.jp/inquiry/">診断や設定についての相談窓口</a>からお問い合わせください。</p>

<h2>よくある質問</h2>
<div class="slt-faq"><h3>セキュリティヘッダーは検索順位に影響しますか？</h3><p>順位への影響を示すGoogleの公式な説明は見当たりません。Googleの検索セントラルは、ページエクスペリエンスの確認項目にHTTPSを挙げていますが、個々のセキュリティヘッダーには触れていません（2026年10月時点）。一方、CSPの誤設定で問い合わせフォームや計測タグが止まると、成果に直接響きます。</p></div>
<div class="slt-faq"><h3>.htaccessに書いたのに反映されません。どこを確かめればよいですか？</h3><p>サーバーの種類、上書きの許可、モジュール、キャッシュの順に確かめます。nginxは.htaccessを読まず、ApacheでもHeaderの指定には、<code>AllowOverride FileInfo</code> の許可とmod_headersの有効化が必要です。設定が正しいのに付かないときは、CDNやページキャッシュを消してから curl で確かめます。</p></div>
<div class="slt-faq"><h3>metaタグでセキュリティヘッダーを設定できますか？</h3><p>一部だけできます。CSPは <code>&lt;meta http-equiv="Content-Security-Policy"&gt;</code> で設定できますが、frame-ancestors、report-uri、sandboxは効かず、metaより前にある内容にも適用されません。Referrer-Policyは <code>&lt;meta name="referrer"&gt;</code> で指定でき、HSTS、X-Frame-Options、Content-Security-Policy-Report-Onlyはmetaに書いても無視されます。</p></div>
<div class="slt-faq"><h3>WordPressでCSPのnonceは使えますか？</h3><p>条件付きで使えます。WordPress 5.7以降は、<code>wp_script_attributes</code> と <code>wp_inline_script_attributes</code> のフィルターで、本体の関数が出力するscriptタグにnonce属性を足せます。ただし、HTMLを丸ごと保存するページキャッシュとは両立せず、プラグインが直接書き出すscriptタグにも付かないため、Report-Onlyで漏れを確かめます。</p></div>
<div class="slt-faq"><h3>ステージング環境や社内システムのサブドメインにHSTSは影響しますか？</h3><p>影響するかどうかは、includeSubDomainsをどのホストが返すかで決まります。RFC 6797では、includeSubDomainsは、ヘッダーを返したホストとその下のドメインに効きます。</p><p>www.example.jpだけが返すなら、dev.example.jpには効きません。example.jpが返すと、HTTPSに対応していない社内向けのサブドメインも、ブラウザで開けなくなります。</p></div>
<div class="slt-faq"><h3>OWASPが挙げるCOOP、COEP、CORPも入れるべきですか？</h3><p>この記事の6種類を整えてから検討します。OWASPが挙げるCross-Origin-Embedder-Policyの <code>require-corp</code> は、他のオリジンが読み込みを許していない画像や埋め込みを、読み込めなくする指定です。外部サービスを多く使うサイトほど影響が大きいため、1つずつ表示を確かめながら入れます。</p></div>
<div class="slt-faq"><h3>Permissions-Policyは、SafariやFirefoxでも効きますか？</h3><p>2026年10月時点では効きません。MDNの互換性データでは、このヘッダーに対応しているのはChromeやEdgeなどのChromium系で、FirefoxとSafariは未対応です。未対応のブラウザでは指定が無視されるだけなので、対応ブラウザでの補助の対策として入れます。</p></div>

<h2>関連記事</h2>
<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/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を入力すると、HSTS、CSP、X-Frame-Optionsなど6種類のヘッダーの有無に加え、証明書やCookieの属性もまとめて確認できます。メールアドレスの登録は要りません。</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": "順位への影響を示すGoogleの公式な説明は見当たりません。Googleの検索セントラルは、ページエクスペリエンスの確認項目にHTTPSを挙げていますが、個々のセキュリティヘッダーには触れていません（2026年10月時点）。一方、CSPの誤設定で問い合わせフォームや計測タグが止まると、成果に直接響きます。"}}, {"@type": "Question", "name": ".htaccessに書いたのに反映されません。どこを確かめればよいですか？", "acceptedAnswer": {"@type": "Answer", "text": "サーバーの種類、上書きの許可、モジュール、キャッシュの順に確かめます。nginxは.htaccessを読まず、ApacheでもHeaderの指定には、AllowOverride FileInfo の許可とmod_headersの有効化が必要です。設定が正しいのに付かないときは、CDNやページキャッシュを消してから curl で確かめます。"}}, {"@type": "Question", "name": "metaタグでセキュリティヘッダーを設定できますか？", "acceptedAnswer": {"@type": "Answer", "text": "一部だけできます。CSPは <meta http-equiv=\"Content-Security-Policy\"> で設定できますが、frame-ancestors、report-uri、sandboxは効かず、metaより前にある内容にも適用されません。Referrer-Policyは <meta name=\"referrer\"> で指定でき、HSTS、X-Frame-Options、Content-Security-Policy-Report-Onlyはmetaに書いても無視されます。"}}, {"@type": "Question", "name": "WordPressでCSPのnonceは使えますか？", "acceptedAnswer": {"@type": "Answer", "text": "条件付きで使えます。WordPress 5.7以降は、wp_script_attributes と wp_inline_script_attributes のフィルターで、本体の関数が出力するscriptタグにnonce属性を足せます。ただし、HTMLを丸ごと保存するページキャッシュとは両立せず、プラグインが直接書き出すscriptタグにも付かないため、Report-Onlyで漏れを確かめます。"}}, {"@type": "Question", "name": "ステージング環境や社内システムのサブドメインにHSTSは影響しますか？", "acceptedAnswer": {"@type": "Answer", "text": "影響するかどうかは、includeSubDomainsをどのホストが返すかで決まります。RFC 6797では、includeSubDomainsは、ヘッダーを返したホストとその下のドメインに効きます。"}}, {"@type": "Question", "name": "OWASPが挙げるCOOP、COEP、CORPも入れるべきですか？", "acceptedAnswer": {"@type": "Answer", "text": "この記事の6種類を整えてから検討します。OWASPが挙げるCross-Origin-Embedder-Policyの require-corp は、他のオリジンが読み込みを許していない画像や埋め込みを、読み込めなくする指定です。外部サービスを多く使うサイトほど影響が大きいため、1つずつ表示を確かめながら入れます。"}}, {"@type": "Question", "name": "Permissions-Policyは、SafariやFirefoxでも効きますか？", "acceptedAnswer": {"@type": "Answer", "text": "2026年10月時点では効きません。MDNの互換性データでは、このヘッダーに対応しているのはChromeやEdgeなどのChromium系で、FirefoxとSafariは未対応です。未対応のブラウザでは指定が無視されるだけなので、対応ブラウザでの補助の対策として入れます。"}}]}</script><p>The post <a href="https://slt-inc.jp/article/security-headers-setup/">セキュリティヘッダーの設定方法｜HSTS・CSPの設定例つき</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>
