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

<channel>
	<title>セキュリティヘッダー - 総合デジタルマーケティング企業 エスライン・テクノロジーズ</title>
	<atom:link href="https://slt-inc.jp/tag/security-headers/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:10 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://slt-inc.jp/wp-content/uploads/2025/03/cropped-エスライン_テクノロジーズ_-_新ロゴ2025-removebg-32x32.png</url>
	<title>セキュリティヘッダー - 総合デジタルマーケティング企業 エスライン・テクノロジーズ</title>
	<link>https://slt-inc.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>セキュリティヘッダーの設定方法｜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>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>
