<?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>セキュリティ &#8211; ケケンタの独学ITブログ</title>
	<atom:link href="https://kekenta-it-blog.com/tag/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3/feed/" rel="self" type="application/rss+xml" />
	<link>https://kekenta-it-blog.com</link>
	<description>プログラミングやWeb制作の情報を発信</description>
	<lastBuildDate>Tue, 18 Mar 2025 01:59:42 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://kekenta-it-blog.com/wp-content/uploads/2023/07/cropped-KEKENTA-BLOG-32x32.png</url>
	<title>セキュリティ &#8211; ケケンタの独学ITブログ</title>
	<link>https://kekenta-it-blog.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>PHPでhtaccessをいじらずにBASIC認証を実装する方法【コード付き】</title>
		<link>https://kekenta-it-blog.com/php-basic-auth/</link>
		
		<dc:creator><![CDATA[ケケンタ]]></dc:creator>
		<pubDate>Wed, 06 Mar 2024 08:50:21 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webアプリ]]></category>
		<category><![CDATA[BASIC認証]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<guid isPermaLink="false">https://kekenta-it-blog.com/?p=3330</guid>

					<description><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2023/11/eye-catch__php-basic-auth__3330-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>今回はこのようなお悩みをお持ちの方に、 PHPのプログラムだけでBASIC認証を実現するためのコード をご紹介します。 PHPで特定ページにBASIC認証をかけるコード（全体） ポップアップの様子 参考：https:// [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2023/11/eye-catch__php-basic-auth__3330-1024x576.jpg" class="webfeedsFeaturedVisual" /></p><div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/困った顔-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/困った顔-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>PHPで特定のページにだけBasic認証をかけたい……</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="wp-block-paragraph">今回はこのようなお悩みをお持ちの方に、</p>



<p class="has-text-align-center is-style-big_kakko_box wp-block-paragraph"><strong><span class="marker-under">PHPのプログラムだけでBASIC認証を実現するためのコード</span></strong></p>



<p class="wp-block-paragraph">をご紹介します。</p>


<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/php-rakuten-api/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">【PHP】APIとは？楽天APIで商品検索機能を作成する方法</span>
			</a>
		</div>

<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/alone-php-study/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">PHPはこうして習得した！約１年間の勉強内容【プログラミング独学】</span>
			</a>
		</div>

<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/php-deploy-xserver-for-zip/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">【PHP】エックスサーバーへデプロイする方法【初心者でも簡単！】</span>
			</a>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2025/03/eye-catch__school-php-and-wp__14099-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/school-php-and-wp/">PHPやWordPressを学ぶのにおすすめのプログラミングスクール【７選】</a>
						<span class="p-blogCard__excerpt">僕はこれまで独学でPHPを学習してきました。結論から言えば、それでもPHPを習得することはできました。 しかし、それに費やした累計学習期間は1年ほど。モチベーション&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h2 class="wp-block-heading">PHPで特定ページにBASIC認証をかけるコード（全体）</h2>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>/**
 * パスワード保護したいページに以下のコードを記述
 */
// ログイン情報
define(&#39;USER_ID&#39;, &#39;kekenta&#39;);
define(&#39;PASSWORD&#39;, &#39;kekenta_pass&#39;);

// 認証処理
if (!isset($_SERVER[&#39;PHP_AUTH_USER&#39;])) {
    header(&quot;WWW-Authenticate: Basic realm=\&quot;My Realm\&quot;&quot;);
    header(&quot;HTTP/1.0 401 Unauthorized&quot;);

    /**
     * キャンセルが押下されたら実行する処理を記述
     */

    exit;
} else {
    if (
        (isset($_SERVER[&#39;PHP_AUTH_USER&#39;]) && $_SERVER[&#39;PHP_AUTH_USER&#39;] == USER_ID) &&
        (isset($_SERVER[&#39;PHP_AUTH_PW&#39;]) && $_SERVER[&#39;PHP_AUTH_PW&#39;] == PASSWORD)
    ) {
        /**
         * 成功したときの処理を記述
         */
    } else {
        /**
         * 失敗したときの処理を記述
         */
        exit();
    }
}</code></pre></div>



<p class="has-text-align-center is-style-balloon_box2 wp-block-paragraph"><strong>ポップアップの様子</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full has-custom-border"><img decoding="async" width="384" height="307" src="https://kekenta-it-blog.com/wp-content/uploads/2024/03/0144c2d8606fb424bb8a621f2ab45d7e-edited.png" alt="" class="wp-image-3333" style="border-width:1px" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/03/0144c2d8606fb424bb8a621f2ab45d7e-edited.png 384w, https://kekenta-it-blog.com/wp-content/uploads/2024/03/0144c2d8606fb424bb8a621f2ab45d7e-edited-300x240.png 300w" sizes="(max-width: 384px) 100vw, 384px" /></figure>
</div>


<p class="is-style-bg_stripe wp-block-paragraph">参考：<a href="https://www.php.net/manual/ja/features.http-auth.php">https://www.php.net/manual/ja/features.http-auth.php</a></p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>簡単ではありますが、以上となります！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="wp-block-paragraph">この記事が参考になったなら何よりです。</p>



<p class="wp-block-paragraph">またどこかの記事でお会いできるのを楽しみにしております。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【PHP】SQLインジェクションの原因や攻撃手法【対策コード付き】</title>
		<link>https://kekenta-it-blog.com/sql-inj-php/</link>
		
		<dc:creator><![CDATA[ケケンタ]]></dc:creator>
		<pubDate>Sun, 24 Dec 2023 06:21:44 +0000</pubDate>
				<category><![CDATA[Webアプリ]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">https://kekenta-it-blog.com/?p=1106</guid>

					<description><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__sql-inj-php__1106-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>この記事ではセキュリティ攻撃の１つであるSQLインジェクションについて、その対策方法も含めて解説をしていきます。 セキュリティ対策についてしっかり学ばれたい方にはこちらの書籍がおすすめです。（通称：徳丸本と呼ばれる「We [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__sql-inj-php__1106-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p class="wp-block-paragraph">この記事ではセキュリティ攻撃の１つであるSQLインジェクションについて、その対策方法も含めて解説をしていきます。</p>



<div class="swell-block-capbox cap_box is-style-shadow"><div class="cap_box_ttl"><span><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMzIgNDYuNUgxNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTJoMTZjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyek00MS43IDE1LjlDNDEuMyAxMyA0MCAxMC4zIDM4LjIgOCAzNC41IDMuMiAyOSAuOCAyMy4xIDEgMTQgMS40IDYuNSA4LjkgNiAxOGMtLjMgNiAyLjQgMTEuNyA3LjIgMTUuNC41LjQuOC45LjggMS41djEuNmMwIDIuMiAxLjggNCA0IDRoMTJjMi4yIDAgNC0xLjggNC00VjM1YzAtLjYuMy0xLjIuOS0xLjcgNS4zLTQgOC0xMC42IDYuOC0xNy40em0tNy4xIDEuN2gtLjNjLS43IDAtMS4zLS41LTEuNS0xLjItLjctMy4yLTMuMi01LjctNi40LTYuMy0uOC0uMS0xLjQtLjktMS4yLTEuN3MuOS0xLjQgMS43LTEuMmM0LjQuOCA4IDQuMiA4LjkgOC42LjEuOC0uNCAxLjYtMS4yIDEuOHoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsLightbulb" data-id="0" aria-hidden="true" class="swl-inline-icon"> </span><strong>この記事で分かること</strong></span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>SQLインジェクション攻撃の概要</li>



<li>SQLインジェクション攻撃の被害・影響</li>



<li>SQLインジェクション攻撃の流れ</li>



<li>SQLインジェクション攻撃の根本的原因</li>



<li>SQLインジェクション攻撃の対策方法（PHPでの対策コードあり）</li>
</ul>
</div></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>SQLインジェクション対策をしないと最悪の場合、DB内のデータをすべて抜き取られたり削除されるなど非常に大きな被害が発生します。<br>この記事を読んでいただき、理解の一助となれば幸いです。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="is-style-bg_stripe wp-block-paragraph">セキュリティ対策についてしっかり学ばれたい方にはこちらの書籍がおすすめです。<br>（<strong>通称：徳丸本</strong>と呼ばれる「Webアプリ開発者必読」とまで言われている書籍です）<br><br><a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNNDQgMkgzMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDJoOS4yTDI0IDIxLjJjLS44LjgtLjggMiAwIDIuOHMyIC44IDIuOCAwTDQyIDguOFYxOGMwIDEuMS45IDIgMiAyczItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PHBhdGggZD0iTTQxIDI3Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS0uOSAyLTIgMkg5Yy0xLjEgMC0yLS45LTItMlYxMWMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMkg5Yy0zLjMgMC02IDIuNy02IDZ2MjhjMCAzLjMgMi43IDYgNiA2aDI4YzMuMyAwIDYtMi43IDYtNlYyOWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsExternalLink" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span>体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践</a><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMTEuNyAxLjQgNi44IDVjLS41LjQtLjggMS0uOCAxLjZ2MjguN2MwIC44LjUgMS41IDEuMiAxLjhsMjQgMTAuM2MxLjMuNiAyLjgtLjQgMi44LTEuOFYxOWMwLS44LS41LTEuNS0xLjItMS44TDEwLjIgNy41bDIuOS0yLjJjLjktLjYgMi0uOCAzLS40bDIwLjYgOC44Yy43LjMgMS4yIDEgMS4yIDEuOFY0Mi45YzAgLjkgMSAxLjMgMS43LjhsMS43LTEuNWMuNC0uNC43LS45LjctMS41VjEzYzAtLjgtLjUtMS41LTEuMi0xLjhMMTYuNy44Yy0xLjctLjctMy42LS41LTUgLjZ6Ij48L3BhdGg+PC9zdmc+)" data-icon="LsBook" data-id="47" aria-hidden="true" class="swl-inline-icon"> </span><br>徳丸 浩／著　SBクリエイティブ／出版│<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl">Amazon</a></p>


<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/alone-php-study/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">PHPはこうして習得した！約１年間の勉強内容【プログラミング独学】</span>
			</a>
		</div>

<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/php-deploy-xserver-for-zip/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">【PHP】エックスサーバーへデプロイする方法【初心者でも簡単！】</span>
			</a>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2025/03/eye-catch__school-php-and-wp__14099-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/school-php-and-wp/">PHPやWordPressを学ぶのにおすすめのプログラミングスクール【７選】</a>
						<span class="p-blogCard__excerpt">僕はこれまで独学でPHPを学習してきました。結論から言えば、それでもPHPを習得することはできました。 しかし、それに費やした累計学習期間は1年ほど。モチベーション&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h2 class="wp-block-heading">SQLインジェクションとは？</h2>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2"><div class="cap_box_ttl"><span>SQLインジェクションとは</span></div><div class="cap_box_content">
<p class="wp-block-paragraph">Webアプリの脆弱性に付け込み、<strong>不正なSQL文を注入（インジェクション）することでDB内のデータを盗み出したり削除したりするセキュリティ攻撃</strong>のこと</p>
</div></div>



<h2 class="wp-block-heading">被害・影響</h2>



<p class="wp-block-paragraph">SQLインジェクションの被害や影響は主に以下の通りです。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2" data-colset="col3"><div class="cap_box_ttl"><span>SQLインジェクションの被害・影響</span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-bad_list -list-under-dashed">
<li>情報漏洩</li>



<li>情報の改ざん</li>



<li>情報の削除</li>



<li>認証回避</li>



<li>ファイルの読出し・書出しなど</li>
</ul>
</div></div>



<p class="wp-block-paragraph">また、<strong>漏洩した情報が原因となり</strong>クレジットカード被害やWebサイトの改ざんによるマルウェア拡散、アカウントの乗っ取りなどの<strong><span class="swl-marker mark_yellow">二次被害へ派生する可能性</span></strong>があります。</p>



<h2 class="wp-block-heading">攻撃の流れ</h2>



<p class="wp-block-paragraph">SQLインジェクションが実行される場所としては、主に以下の箇所が挙げられます。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2"><div class="cap_box_ttl"><span>SQLインジェクションが実行される場所</span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>検索画面</li>



<li>ログイン画面</li>
</ul>
</div></div>



<p class="wp-block-paragraph">Webアプリにおいて、上記の画面の共通点として、「ユーザが入力した任意の文字列を元に、システムがDB内から該当データを取得したりチェックを行う」という処理があります。</p>



<p class="wp-block-paragraph">このとき、システム上では予め用意されたSQL文が実行されるのですが、<strong><span class="swl-marker mark_yellow">攻撃者はそのSQL文に悪意のあるSQL文を無理やり注入（インジェクション）することで、DB内のデータを不正に操作</span></strong>します。</p>



<h3 class="wp-block-heading">【具体例】検索画面を通じた情報の盗み出し</h3>



<p class="wp-block-paragraph">それではここで、「パソコン関連機器を検索する機能」を例として、SQLインジェクションが実際にどのようにして実行されるのかをお見せします。</p>



<p class="wp-block-paragraph">以下のSQL文はユーザが検索フォームに入力した内容（<strong>$item_name</strong>）を元に、DBから該当する「機器名（<strong>name</strong>）」と「価格（<strong>price</strong>）」を表示するものです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-sql" data-lang="SQL"><code>SELECT name, price FROM item_list WHERE name = $item_name;</code></pre></div>



<p class="wp-block-paragraph">攻撃者は、上記の内、<strong>$item_nameに不正な入力内容を含める</strong>ことで、システム側が意図していないSQL文を実行させます。</p>



<p class="wp-block-paragraph">例えば、攻撃者によって以下のような入力内容があったとします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-sql" data-lang="SQL"><code>&#39;; UPDATE item_list SET price = &#39;0</code></pre></div>



<p class="wp-block-paragraph">これにより、<strong>システム側で組み立てられるSQL文</strong>は以下のようになります。<br>※分かりやすくするために攻撃者の入力内容を【】で囲んでいます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-sql" data-lang="SQL"><code>SELECT name, price FROM item_list WHERE name = &#39;【&#39;; UPDATE item_list SET price = &#39;0】&#39;;</code></pre></div>



<p class="wp-block-paragraph">ここで注目して頂きたいのが以下の2か所です。</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container">
<ul class="wp-block-list -list-under-dashed is-style-num_circle">
<li>WHERE name = &#8221;;</li>



<li>UPDATE item_list SET price = &#8216;0&#8217;;</li>
</ul>
</div></div>



<p class="wp-block-paragraph">１では<strong><span class="swl-marker mark_yellow">「&#8217;;」が文末に注入されたことで、無理やり正常のSQL文が終了</span></strong>させられています。</p>



<p class="wp-block-paragraph">２では、UPDATE文が注入されていますが、WHERE文による条件指定が含まれていないため、<strong>更新対象はすべてのデータ</strong>ということになります。</p>



<p class="wp-block-paragraph">つまり、上記のSQL文が実行されることにより、<strong><span class="marker-under">item_listテーブル内の価格情報</span><span class="marker-under">（</span><span class="marker-under">p</span><span class="marker-under">r</span><span class="marker-under">i</span><span class="marker-under">c</span><span class="marker-under">e</span><span class="marker-under">）</span><span class="marker-under">がすべて0円に変更されてしまう</span></strong>ということです。</p>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">SQLインジェクションの根本的原因</h2>



<p class="wp-block-paragraph">結論から言うと、<strong>SQLインジェクションの根本的原因</strong>は</p>



<p class="is-style-sticky_box wp-block-paragraph"><strong>正規のSQL文にユーザの入力内容をそのまま埋め込む仕様になっている</strong></p>



<p class="wp-block-paragraph">ことにあります。</p>



<p class="wp-block-paragraph">上記の例をご覧いただいたように、SQLインジェクションでは<strong>正規のSQL文からはみ出させる形で不正のSQL文を実行</strong>させています。</p>



<p class="wp-block-paragraph">攻撃者は何らかの工夫を施すことで、この「はみ出す部分」を作り出し、そこに悪意あるSQL文を埋め込み、不正を行うのです。（例ではUPDATE文を「はみ出させる」ことで実行させています。）</p>



<p class="wp-block-paragraph">これが可能となってしまう原因は、<strong>システム側でSQL文を組み立てる際、ユーザの入力内容をそのままSQL文に埋め込んでいるため</strong>です。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>つまり、<strong>ユーザの入力内容をそのまま埋め込まないこと</strong>がSQLインジェクション対策になるということです。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h2 class="wp-block-heading">対策方法</h2>



<p class="wp-block-paragraph">繰り返しになりますが、SQLインジェクションの原因は、<strong>ユーザの入力内容をSQL文にそのまま埋め込んでいること</strong>にあります。</p>



<p class="wp-block-paragraph">この状態を回避する方法は複数ありますが、ここでは最も確実となる<strong>プレースホルダー</strong>を利用する方法をご紹介します。</p>



<h3 class="wp-block-heading">プレースホルダーとは？</h3>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/困った顔-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/困った顔-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>プレースホルダーって何…？</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="wp-block-paragraph">という方のために簡単にご説明をすると</p>



<p class="is-style-big_icon_point wp-block-paragraph"><strong>プレースホルダー</strong>とは、<strong>後から任意の値をセットするために予め用意された仮のスペース</strong>のこと</p>



<p class="wp-block-paragraph">分かりやすく言うと、プレースホルダーを用いることで、<strong><span class="marker-under">後からSQL文の構造を変更することが理論的に不可</span></strong>となります。</p>



<p class="wp-block-paragraph">つまり、<strong><span class="swl-marker mark_yellow">攻撃者による不正なSQL文の実行を防ぐことが可能になる</span></strong>ということです。</p>



<h3 class="wp-block-heading">プレースホルダーの実装【PHPコードあり】</h3>



<p class="wp-block-paragraph">実際の実装例は以下の通りになります。（★が付いている処理が今回の対策と関連している部分です。）</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>&lt;?php

/*
 * 今回はPDOを使用した実装としています。
 */

// ユーザの入力内容を取得
$item_name = $_GET[&#39;item_name&#39;];

try {
    // DBへ接続の準備
    $dsn = &#39;mysql:dbname=sample_db;host=localhost;charset=utf8&#39;;
    $user = &#39;ユーザ名&#39;;
    $password = &#39;パスワード&#39;;

    // オプション指定
    $options = array(
        PDO::ATTR_ERRMODE =&gt; PDO::ERRMODE_EXCEPTION,    // SQL実行失敗時には例外をスロー
        PDO::MYSQL_ATTR_MULTI_STATEMENTS =&gt; false,      // ★複文の実行を不可にする 
        PDO::ATTR_EMULATE_PREPARES =&gt; false,            // ★静的プレースホルダーを使用する
    );
    // PDOオブジェクトを生成してDBへ接続
    $dbh = new PDO($dsn, $user, $password, $options);

    // SQL文の作成
    // ★プレースホルダー名として「:item_name」を指定
    $sql = &#39;SELECT name, price FROM item_list WHERE name = :item_name&#39;;

    // SQLへ接続準備
    $stmt = $dbh-&gt;prepare($sql);

    // ★プレースホルダ（:item_name）に値（$item_name）をセット
    $stmt-&gt;bindValue(&#39;:item_name&#39;, $item_name, PDO::PARAM_STR);

} catch (Exception $e) {
    // 例外処理
}

?&gt;</code></pre></div>



<p class="wp-block-paragraph">以下より、★が付いている処理について順番に解説をしていきます。</p>



<h4 class="wp-block-heading">【解説】複文の実行を不可にする</h4>



<p class="wp-block-paragraph">以下の部分でSQL文の<strong><span class="marker-under">複文の実行を不可</span></strong>としています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>PDO::MYSQL_ATTR_MULTI_STATEMENTS =&gt; false,      // ★複文の実行を不可にする </code></pre></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>「複文」とは、例えば以下のように、<strong>同時に複数のSQL文が実行される構成となっているもの</strong>を指します。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>SELECT name, price FROM item_list WHERE name = &#39;&#39;; UPDATE item_list SET price = &#39;0&#39;;</code></pre></div>



<p class="wp-block-paragraph">前述したように、SQLインジェクションとは正規のSQL文から「はみ出す」形で不正なSQLを差し込む攻撃です。</p>



<p class="wp-block-paragraph">つまり、このように<strong><span class="swl-marker mark_yellow">複文の実行を不可にすることでSQLインジェクションの抑制になる</span></strong>のです。</p>



<p class="is-style-icon_info wp-block-paragraph">ただし、SQLインジェクション攻撃のパターンの中には<strong>複文を利用しないもの</strong>もあります。<br>したがって、このオプション指定はあくまで特定の攻撃に対する抑制にはなるものの、<strong>完全な対策とはならない</strong>点に注意が必要です。</p>



<h4 class="wp-block-heading">【解説】静的プレースホルダーを指定</h4>



<p class="wp-block-paragraph">次に<strong>静的プレースホルダー</strong>についてですが、こちらは以下の部分で指定をしています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>PDO::ATTR_EMULATE_PREPARES =&gt; false,            // ★静的プレースホルダーを使用する</code></pre></div>



<p class="wp-block-paragraph">プレースホルダーには実は</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>静的プレースホルダー</li>



<li>動的プレースホルダー</li>
</ul>
</div></div>



<p class="wp-block-paragraph">の2種類があります。正しく処理が記述できていればどちらを使用してもSQLインジェクション対策となりますが、<strong>静的プレースホルダーの方が原理的に対策が確実</strong>なため、仕様的に問題が無ければこちらを採用するのが無難です。</p>



<h4 class="wp-block-heading">【解説】プレースホルダーの利用</h4>



<p class="wp-block-paragraph">プレースホルダーを実際に使用している箇所がこちらです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>// SQL文の作成
// ★プレースホルダー名として「:item_name」を指定
$sql = &#39;SELECT name, price FROM item_list WHERE name = :item_name&#39;;

    ～中略～

// ★プレースホルダ（:item_name）に値（$item_name）をセット
$stmt-&gt;bindValue(&#39;:item_name&#39;, $item_name, PDO::PARAM_STR);</code></pre></div>



<p class="wp-block-paragraph">処理の流れは以下のようになります。</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container">
<ul class="wp-block-list is-style-num_circle -list-under-dashed">
<li>「:item_name」という任意のプレースホルダー名を設定</li>



<li>bindValueメソッドでプレースホルダーに実際の入力内容をセット</li>
</ul>
</div></div>



<p class="is-style-icon_pen wp-block-paragraph">なお、プレースホルダー名の接頭辞には「:item_name」のように「:（コロン）」を使用します。</p>



<p class="wp-block-paragraph">また、bindValueメソッドの第3引数には、<strong>入力内容に応じた型</strong>を指定します。例えば今回は入力内容として文字列型での入力を想定しているため「PARAM_STR」を指定しました。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>以上がSQLインジェクションの対策コードの解説でした。<br>対策内容を整理すると以下のようになります。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<div class="swell-block-capbox cap_box is-style-onborder_ttl2"><div class="cap_box_ttl"><span>SQLインジェクション対策まとめ</span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>SQLインジェクション対策にはプレースホルダーを使用する</li>



<li>オプション指定により複文の実行を不可にできる　※完全な対策とはならない</li>



<li>静的プレースホルダーなら原理的にSQLインジェクションの実行が不可となる</li>



<li>プレースホルダーを使用する手順は、①プレースホルダーの設定　→　②プレースホルダーに値をセット（バインド）</li>
</ul>
</div></div>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">ここまでSQLインジェクションについてお伝えをしてきました。</p>



<p class="wp-block-paragraph">SQLインジェクションが成功してしまった場合、情報漏洩や改ざんなどが発生し、2次被害としてアカウントの乗っ取りなどに繋がってしまう恐れがあります。</p>



<p class="wp-block-paragraph">プレースホルダーを使用することで対策が可能なため、Webアプリを開発する際には必ず実装するようにしましょう。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>最後に、僕が<strong>セキュリティ対策を学ぶ際に利用した書籍</strong>をご紹介させていただきます。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<div id="rinkerid3655" class="yyi-rinker-contents  yyi-rinker-postid-3655 yyi-rinker-img-m yyi-rinker-catid-72 yyi-rinker-catid-32 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://hb.afl.rakuten.co.jp/hgc/g00q072g.bdzz22a5.g00q072g.bdzz326e/Rinker_i_20240325051043?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15472730%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fbook%2Fi%2F19130417%2F&#038;rafcid=wsc_i_is_1047822029026699702" rel="nofollow" class="yyi-rinker-tracking"  data-click-tracking="rakuten_img 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]" data-vars-click-id="rakuten_img 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3163/9784797393163.jpg?_ex=128x128"  width="128" height="128" class="yyi-rinker-main-img" style="border: none;"></a>					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://hb.afl.rakuten.co.jp/hgc/g00q072g.bdzz22a5.g00q072g.bdzz326e/Rinker_t_20240325051043?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15472730%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fbook%2Fi%2F19130417%2F&#038;rafcid=wsc_i_is_1047822029026699702" rel="nofollow" class="yyi-rinker-tracking" data-click-tracking="rakuten_title 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]" data-vars-amp-click-id="rakuten_title 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]" >体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]</a>							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥3,520</span>
															<span class="price_at">(2026/06/09 10:55:28時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																	<li class="amazonkindlelink">
						<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88%EF%BC%BB%E5%9B%BA%E5%AE%9A%E7%89%88%EF%BC%BD-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8-%E6%B5%A9-ebook/dp/B07DVY4H3M?_encoding=UTF8&amp;dib_tag=se&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFijL3FSdFSR0LKwwn0F-UPgnO4-c3ozCV4u_yzlUP10v8KPCWYU6aPhFknUSSGvFmOEDGJ7u_LQxIZPLfydTHs_AWTWMCbT_FAR33FxKzQdND0le-SUmRnBHzYhR8SX_lsohxpGeQkIATYHxCJlB0aHhgwHHQ_THHRbyVElNccJqEMDb7ELZa0F--eVduuVxaejEJv9h9ZmItplRO6lE6VyZJA2Jej7Jvd7bD0ypm9krDwLy3e-Ea8YDtZc7KF66Cb-ea0Tp3FGBrFX0K3fiRlfA.KN6w39aSpN4iCwmHQ6974qNXMN0yNo0Ib071kV4gNk4&amp;qid=1723712413&amp;sr=8-6&amp;linkCode=ll1&amp;tag=kekenta03am0b-22&amp;linkId=3aee57ca3ac28d84506bf0e0db6cec11&amp;language=ja_JP&amp;ref_=as_li_ss_tl" rel="nofollow" class="yyi-rinker-link yyi-rinker-tracking"  data-click-tracking="amazon_kindle 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"  data-vars-amp-click-id="amazon_kindle 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]">Kindle</a>					</li>
								                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFijL3FSdFSR0LKwwn0F-UPgnO4-c3ozCV4u_yzlUP10v8KPCWYU6aPhFknUSSGvFmOEDGJ7u_LQxIZPLfydTHs_AWTWMCbT_FAR33FxKzQdND0le-SUmRnBHzYhR8SX_lsohxpGeQkIATYHxCJlB0aHhgwHHQ_THHRbyVElNccJqEMDb7ELZa0F--eVduuVxaejEJv9h9ZmItplRO6lE6VyZJA2Jej7Jvd7bD0ypm9krDwLy3e-Ea8YDtZc7KF66Cb-ea0Tp3FGBrFX0K3fiRlfA.KN6w39aSpN4iCwmHQ6974qNXMN0yNo0Ib071kV4gNk4&amp;dib_tag=se&amp;keywords=%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3&amp;qid=1723712376&amp;sr=8-1&amp;linkCode=ll1&amp;tag=https://www.amazon.co.jp/PHP%E6%9C%AC%E6%A0%BC%E5%85%A5%E9%96%80-%E4%B8%8A-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A8%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E9%80%A3%E6%90%BA%E3%81%BE%E3%81%A7-%E5%A4%A7%E5%AE%B6-%E6%AD%A3%E7%99%BB/dp/4297114682?dib=eyJ2IjoiMSJ9.74YDItYNn-AHro6XQ1cSslRSHUvp_S8S4MVJtvnW_XswliMGieYQktGbaTJY9E-Qpy3y3roMKB8M-zKI3K7otpqjDxkuoq7ncq-6mLf3BEkcNW05BAHDZZ17WZueAniDY7peSrmp4Ji0L0BkXOaJIBbpqa628I6bjQBED1FQ9V7BJqUJVUUxz6ns2GIHnoSItDTgCRaIpNi9fMcBrt3jqZr1qNJxCmBn8-xPR9N3usFpENEEChvMwvGdHoHu1hjsq6g9GvJDwPPBTwhQvDgXG2KZQ5CBlEx_wQjQy06hFcw.xxCKw6aGhA397JIEATXvL3RNC7D4_k4avRIYczzkjHw&amp;dib_tag=se&amp;keywords=PHP%E6%9C%AC%E6%A0%BC%E5%85%A5%E9%96%80&amp;qid=1723712413&amp;sr=8-6&amp;linkCode=ll1&amp;tag=kekenta03am0b-22&amp;linkId=16a4b7edeeedcc86aef9f0b8c45cc669&amp;language=ja_JP&amp;ref_=as_li_ss_tl-22&amp;linkId=04fec4999f3ec4094bf4fd1126da8b84&amp;language=ja_JP&amp;ref_=as_li_ss_tl" rel="nofollow" class="yyi-rinker-link yyi-rinker-tracking"  data-click-tracking="amazon 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"  data-vars-amp-click-id="amazon 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://hb.afl.rakuten.co.jp/hgc/g00q072g.bdzz22a5.g00q072g.bdzz326e/Rinker_t_20240325051043?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15472730%2F&amp;m=http%3A%2F%2Fm.rakuten.co.jp%2Fbook%2Fi%2F19130417%2F&amp;rafcid=wsc_i_is_1047822029026699702" rel="nofollow" class="yyi-rinker-link yyi-rinker-tracking"  data-click-tracking="rakuten 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"  data-vars-amp-click-id="rakuten 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]">楽天市場</a>					</li>
								                											</ul>
					</div>
	</div>
</div>



<p class="is-style-bg_stripe wp-block-paragraph"><a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNNDQgMkgzMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDJoOS4yTDI0IDIxLjJjLS44LjgtLjggMiAwIDIuOHMyIC44IDIuOCAwTDQyIDguOFYxOGMwIDEuMS45IDIgMiAyczItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PHBhdGggZD0iTTQxIDI3Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS0uOSAyLTIgMkg5Yy0xLjEgMC0yLS45LTItMlYxMWMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMkg5Yy0zLjMgMC02IDIuNy02IDZ2MjhjMCAzLjMgMi43IDYgNiA2aDI4YzMuMyAwIDYtMi43IDYtNlYyOWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsExternalLink" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span>体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践</a><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMTEuNyAxLjQgNi44IDVjLS41LjQtLjggMS0uOCAxLjZ2MjguN2MwIC44LjUgMS41IDEuMiAxLjhsMjQgMTAuM2MxLjMuNiAyLjgtLjQgMi44LTEuOFYxOWMwLS44LS41LTEuNS0xLjItMS44TDEwLjIgNy41bDIuOS0yLjJjLjktLjYgMi0uOCAzLS40bDIwLjYgOC44Yy43LjMgMS4yIDEgMS4yIDEuOFY0Mi45YzAgLjkgMSAxLjMgMS43LjhsMS43LTEuNWMuNC0uNC43LS45LjctMS41VjEzYzAtLjgtLjUtMS41LTEuMi0xLjhMMTYuNy44Yy0xLjctLjctMy42LS41LTUgLjZ6Ij48L3BhdGg+PC9zdmc+)" data-icon="LsBook" data-id="47" aria-hidden="true" class="swl-inline-icon"> </span><br>徳丸 浩／著　SBクリエイティブ／出版│<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl">Amazon</a></p>



<p class="wp-block-paragraph">こちらの書籍は通称<strong>徳丸本</strong>と呼ばれており、Webセキュリティの第一人者である徳丸浩さんが手がけられている書籍です。<strong>Webアプリを開発する方</strong>や<strong>Webアプリケーションのセキュリティ対策を徹底的に学びたい方</strong>にとてもオススメできる一冊です。</p>



<p class="wp-block-paragraph">Webアプリケーション開発において、ある意味セキュリティ対策は技術力以上に重要です。</p>



<p class="wp-block-paragraph">こちらの書籍を読むことでWebアプリケーションにおいて必要なセキュリティ要件も明確となるため、Webアプリ開発に携わる方は必ず目を通しておきたい一冊です。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>最後までお読みいただきありがとうございました！<br>また別の記事でお会いできれば光栄です！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__dir-trav-php__1016-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/dir-trav-php/">【ディレクトリ・トラバーサル】概要と対策方法を解説【PHP対策コード】</a>
						<span class="p-blogCard__excerpt">今回はセキュリティ攻撃の１つであるディレクトリ・トラバーサルについて解説をしていきます。 ディレクトリ・トラバーサル攻撃を受けてしまうと、被害内容によっては社&#8230;</span>					</div>
				</div>
			</div>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__xss-php__961-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/xss-php/">【XSS】クロスサイト・スクリプティングとは？対策方法も解説【PHP】</a>
						<span class="p-blogCard__excerpt">今回はWebアプリにおけるセキュリティ攻撃の１つであるXSS（クロスサイト・スクリプティング）について解説をしていきます。  この記事を読むと分かること XSS（クロス&#8230;</span>					</div>
				</div>
			</div>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__csrf-php__918-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/csrf-php/">【CSRF】攻撃の流れやPHPでの対策方法を解説【クロスサイトリクエストフォージェリ】</a>
						<span class="p-blogCard__excerpt">Webサイトへのセキュリティ攻撃の１つにCSRF（クロスサイトリクエストフォージェリ）というものがあります。 この記事では、 CSRFの攻撃の流れ 攻撃による影響・被害 PH&#8230;</span>					</div>
				</div>
			</div>
		</div>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【ディレクトリ・トラバーサル】概要と対策方法を解説【PHP対策コード】</title>
		<link>https://kekenta-it-blog.com/dir-trav-php/</link>
		
		<dc:creator><![CDATA[ケケンタ]]></dc:creator>
		<pubDate>Mon, 18 Dec 2023 00:18:08 +0000</pubDate>
				<category><![CDATA[Webアプリ]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">https://kekenta-it-blog.com/?p=1016</guid>

					<description><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__dir-trav-php__1016-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>今回はセキュリティ攻撃の１つであるディレクトリ・トラバーサルについて解説をしていきます。 Webアプリのセキュリティ対策についてしっかり学ばれたい方にはこちらの書籍がおすすめです。（通称：徳丸本と呼ばれる「Webアプリ開 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__dir-trav-php__1016-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p class="wp-block-paragraph">今回はセキュリティ攻撃の１つであるディレクトリ・トラバーサルについて解説をしていきます。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>ディレクトリ・トラバーサル攻撃を受けてしまうと、被害内容によっては社会的信頼を失い、会社に大きな損害を与える結果となってしまう恐れもあります。<br>この記事を読むことで<strong>PHPでの対策方法</strong>も分かるため、ぜひ最後までご覧ください。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<div class="swell-block-capbox cap_box is-style-shadow"><div class="cap_box_ttl"><span><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMzIgNDYuNUgxNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTJoMTZjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyek00MS43IDE1LjlDNDEuMyAxMyA0MCAxMC4zIDM4LjIgOCAzNC41IDMuMiAyOSAuOCAyMy4xIDEgMTQgMS40IDYuNSA4LjkgNiAxOGMtLjMgNiAyLjQgMTEuNyA3LjIgMTUuNC41LjQuOC45LjggMS41djEuNmMwIDIuMiAxLjggNCA0IDRoMTJjMi4yIDAgNC0xLjggNC00VjM1YzAtLjYuMy0xLjIuOS0xLjcgNS4zLTQgOC0xMC42IDYuOC0xNy40em0tNy4xIDEuN2gtLjNjLS43IDAtMS4zLS41LTEuNS0xLjItLjctMy4yLTMuMi01LjctNi40LTYuMy0uOC0uMS0xLjQtLjktMS4yLTEuN3MuOS0xLjQgMS43LTEuMmM0LjQuOCA4IDQuMiA4LjkgOC42LjEuOC0uNCAxLjYtMS4yIDEuOHoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsLightbulb" data-id="0" aria-hidden="true" class="swl-inline-icon"> </span><strong>この記事を読むとわかること</strong></span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>ディレクトリ・トラバーサルの概要</li>



<li>ディレクトリ・トラバーサルの攻撃手法</li>



<li>ディレクトリ・トラバーサルによる被害・影響</li>



<li>ディレクトリ・トラバーサルを受けてしまう原因</li>



<li>ディレクトリ・トラバーサルの対策方法（PHPコードあり）</li>
</ul>
</div></div>



<p class="is-style-bg_stripe wp-block-paragraph">Webアプリのセキュリティ対策についてしっかり学ばれたい方にはこちらの書籍がおすすめです。<br>（<strong>通称：徳丸本</strong>と呼ばれる「Webアプリ開発者必読」とまで言われている書籍です）<br><br><a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNNDQgMkgzMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDJoOS4yTDI0IDIxLjJjLS44LjgtLjggMiAwIDIuOHMyIC44IDIuOCAwTDQyIDguOFYxOGMwIDEuMS45IDIgMiAyczItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PHBhdGggZD0iTTQxIDI3Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS0uOSAyLTIgMkg5Yy0xLjEgMC0yLS45LTItMlYxMWMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMkg5Yy0zLjMgMC02IDIuNy02IDZ2MjhjMCAzLjMgMi43IDYgNiA2aDI4YzMuMyAwIDYtMi43IDYtNlYyOWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsExternalLink" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span>体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践</a><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMTEuNyAxLjQgNi44IDVjLS41LjQtLjggMS0uOCAxLjZ2MjguN2MwIC44LjUgMS41IDEuMiAxLjhsMjQgMTAuM2MxLjMuNiAyLjgtLjQgMi44LTEuOFYxOWMwLS44LS41LTEuNS0xLjItMS44TDEwLjIgNy41bDIuOS0yLjJjLjktLjYgMi0uOCAzLS40bDIwLjYgOC44Yy43LjMgMS4yIDEgMS4yIDEuOFY0Mi45YzAgLjkgMSAxLjMgMS43LjhsMS43LTEuNWMuNC0uNC43LS45LjctMS41VjEzYzAtLjgtLjUtMS41LTEuMi0xLjhMMTYuNy44Yy0xLjctLjctMy42LS41LTUgLjZ6Ij48L3BhdGg+PC9zdmc+)" data-icon="LsBook" data-id="47" aria-hidden="true" class="swl-inline-icon"> </span><br>徳丸 浩／著　SBクリエイティブ／出版│<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl">Amazon</a></p>


<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/alone-php-study/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">PHPはこうして習得した！約１年間の勉強内容【プログラミング独学】</span>
			</a>
		</div>

<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/php-deploy-xserver-for-zip/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">【PHP】エックスサーバーへデプロイする方法【初心者でも簡単！】</span>
			</a>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2025/03/eye-catch__school-php-and-wp__14099-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/school-php-and-wp/">PHPやWordPressを学ぶのにおすすめのプログラミングスクール【７選】</a>
						<span class="p-blogCard__excerpt">僕はこれまで独学でPHPを学習してきました。結論から言えば、それでもPHPを習得することはできました。 しかし、それに費やした累計学習期間は1年ほど。モチベーション&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h2 class="wp-block-heading">ディレクトリ・トラバーサルとは？</h2>



<p class="wp-block-paragraph">ディレクトリ・トラバーサルとは、</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2"><div class="cap_box_ttl"><span>ディレクトリ・トラバーサルとは</span></div><div class="cap_box_content">
<p class="wp-block-paragraph">本来は<strong>アクセスを許可していないファイルへ不正アクセスする</strong>ことで、データを盗んだり、改ざん、削除するセキュリティ攻撃</p>
</div></div>



<p class="wp-block-paragraph">です。</p>



<h2 class="wp-block-heading">ディレクトリ・トラバーサル攻撃の主な被害・影響</h2>



<p class="wp-block-paragraph">ディレクトリ・トラバーサル攻撃よって起こりうる被害としては主に以下のようなものが挙げられます。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2" data-colset="col3"><div class="cap_box_ttl"><span>ディレクトリ・トラバーサル攻撃によって起こりうる被害</span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-bad_list -list-under-dashed">
<li>重要情報の流出</li>



<li>データの改ざん</li>



<li>データの削除</li>
</ul>
</div></div>



<p class="wp-block-paragraph">そしてディレクトリ・トラバーサル攻撃による1次被害がさらに発展し、以下のような<strong><strong><span class="marker-under"><span class="swl-marker mark_yellow">大きな被害に繋がってしまう恐れがある</span></span></strong></strong>のです。</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container">
<ul class="wp-block-list is-style-bad_list -list-under-dashed">
<li>アカウントの乗っ取り</li>



<li>社会的信頼の失墜による経済的損失</li>



<li>マルウェアの拡散（データに埋め込まれるなど）</li>
</ul>
</div></div>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">ディレクトリ・トラバーサル攻撃の流れ</h2>



<p class="wp-block-paragraph">このように重要データにまつわる被害へと発展する可能性のあるディレクトリ・トラバーサル攻撃ですが、実際に攻撃者がどのような方法で<strong>本来ならアクセス不可のファイルへアクセスできてしまうのか</strong>をお見せしようと思います。</p>



<p class="wp-block-paragraph">前提として、一般的にディレクトリ・トラバーサル攻撃を受けるWebアプリには「外部からサーバー内のファイルを呼び出せる」という機能が実装されています。</p>



<p class="wp-block-paragraph">それを踏まえた上で、１つのWebアプリを例に挙げ、ディレクトリ・トラバーサル攻撃がどのようにして行われるのかをお伝えしていきます。</p>



<h3 class="wp-block-heading">Webアプリにおける通常時の処理</h3>



<p class="wp-block-paragraph">今回、例として挙げるWebアプリには、</p>



<p class="wp-block-paragraph"><strong>ユーザが任意のテンプレートファイルを呼び出し、サイトの見た目を変更できる機能</strong></p>



<p class="wp-block-paragraph">が実装されている設定でご説明をしていきます。</p>



<p class="wp-block-paragraph">このWebアプリの処理の流れはこうです。</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container">
<ul class="wp-block-list is-style-num_circle -list-under-dashed">
<li>ユーザが「ファイル名入力フォーム」に任意のファイル名を入力する</li>



<li>送信ボタンが押下されると、<strong>入力されたファイル名に基づくリクエスト</strong>がサーバーへ要求される</li>



<li>サーバーが指定のテンプレートファイルをブラウザへ返し、サイトの見た目が変更される</li>
</ul>
</div></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>ここで、<strong>入力されたファイル名に基づくリクエスト</strong>とは、例えば以下のようなものを言います。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="is-style-stitch wp-block-paragraph">（例）ファイル名として「sample」が入力された場合<br>https://example/temp.php?file_name=sample.html</p>



<p class="wp-block-paragraph">最後の「.html」はプログラム内で自動的に付与されるようになっています。</p>



<p class="wp-block-paragraph">上記のリクエスト（URL）がサーバーへ送られることで、<strong>temp.php上でテンプレートファイルまでのフルパスが生成</strong>され、それにより<strong>テンプレートファイル（sample.html）が表示される</strong>という流れとなります。</p>



<h3 class="wp-block-heading">攻撃の例</h3>



<p class="wp-block-paragraph">次に、攻撃者がこの機能を利用して<strong>非公開ファイルを表示する例</strong>をお見せします。</p>



<p class="wp-block-paragraph">攻撃者は、ファイル名に次のようなパスを指定します。</p>



<p class="is-style-stitch wp-block-paragraph">../../../etc/hosts%00</p>



<p class="wp-block-paragraph">ここで注目して頂きたいのが、「../」と「%00」の部分です。</p>



<p class="wp-block-paragraph">「../」は、相対パスにおいて<strong>１つ上のディレクトリを意味する記号</strong>です。<br>上記のパスの目的は、公開ルート（ドキュメントルート）のさらに上の階層にあるルートディレクトリ内の「/etc/hostsファイル」を指定することにあります。</p>



<p class="is-style-big_icon_point wp-block-paragraph">「%00」は<strong>ヌルバイト</strong>を表します。また、ヌルバイトというのは<strong>ヌル文字（＝文字列の終端を表す文字などとして利用される文字）</strong>のことです。これにより、プログラム側で最終的に付与される「.html」が無いものにされてしまう、という流れになります。<br>※ヌル文字の扱いはプログラミング言語によって異なります。</p>



<p class="wp-block-paragraph">上記のパスによって送出されるリクエスト（URL）は以下のようになります。</p>



<p class="is-style-stitch wp-block-paragraph">https://example/temp?file_name=../../../etc/hosts%00</p>



<p class="wp-block-paragraph">このリクエストにより、プログラム側で<strong>テンプレートファイルを呼び出すためのフルパス</strong>が生成されるわけですが、<strong>ヌルバイト（%00）によって「ここが文字列の終端」という意味になる</strong>ため、プログラム側で「.html」が省略され、結果的に生成されるフルパス（つまり呼び出されるファイル）は以下のようになるのです。</p>



<p class="is-style-stitch wp-block-paragraph">/etc/hosts</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/困った顔-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/困った顔-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>「/」とはサーバーのルートディレクトリのことで、本来なら公開サイトからのアクセスは禁止されています。<br>しかし、ここまでの説明のように、<strong>「Webアプリのファイル呼び出し機能」、「../」そして「ヌルバイト」を利用することで不正アクセスが可能となってしまう</strong>のです。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__css-path-how-to-write__79-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/css-path-how-to-write/">【HTML】パスとは？CSSが反映されない原因｜相対パスと絶対パス【初心者】</a>
						<span class="p-blogCard__excerpt">CSSが上手く反映されない…… とお困りの方へに向けて、この記事ではCSS読み込みの基本となるパスについて詳しく解説していきます。   この記事で分かること パスとは何か&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h2 class="wp-block-heading">ディレクトリ・トラバーサル攻撃を受ける主な原因</h2>



<p class="wp-block-paragraph">ここまで、具体的な攻撃例を挙げてディレクトリ・トラバーサル攻撃の流れをご説明していきました。</p>



<p class="wp-block-paragraph">それでは、<strong>ディレクトリ・トラバーサル攻撃を受ける原因</strong>にはどのようなものがあるのでしょうか？</p>



<p class="wp-block-paragraph">主な原因としては、以下のものが挙げられます。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2" data-colset="col3"><div class="cap_box_ttl"><span><strong>ディレクトリ・トラバーサル攻撃を受ける原因</strong></span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-bad_list -list-under-dashed">
<li>外部からサーバー内のファイル名を指定して呼び出せる仕様になっている</li>



<li>外部からサーバー内のファイルを呼び出す際、パスにディレクトリ名が含まれている</li>



<li>外部から要求されたファイル名に対するチェックを行っていない</li>
</ul>
</div></div>



<p class="wp-block-paragraph">1つ目は攻撃の例で挙げたWebアプリの機能のことです。</p>



<p class="wp-block-paragraph">実を言うと、ディレクトリ・トラバーサル攻撃においては、この<span class="marker-under"><strong>外部からファイル名を指定して呼び出せる機能を実装しないことが最大の対策</strong></span>です。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>こちらも踏まえ、このあとは<strong>ディレクトリ・トラバーサル攻撃の対策方法</strong>をご紹介していきます！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">対策（PHPによるコード解説あり）</h2>



<h3 class="wp-block-heading">対策①　外部からファイル名を指定して呼び出せる仕様を避ける</h3>



<p class="wp-block-paragraph">ディレクトリ・トラバーサルが実行できてしまうのは、そもそもとして、<strong><span class="marker-under"><span class="swl-marker mark_yellow">外部から任意のファイル名を指定して呼び出せる仕様になっているため</span></span></strong>です。</p>



<p class="wp-block-paragraph">従って、ディレクトリ・トラバーサル対策として最も有効なのが</p>



<p class="is-style-icon_good wp-block-paragraph"><strong>外部から任意のファイル名を指定して呼び出せる仕様を避ける</strong></p>



<p class="wp-block-paragraph">です。</p>



<p class="wp-block-paragraph">とは言え、機能として実装が必要な場合もあるかと思います。</p>



<p class="wp-block-paragraph">そうした際には<strong>以下のような代替手段</strong>を用いることで、ディレクトリ・トラバーサル対策になります。</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li><strong>呼び出すファイル名を固定のものにする</strong>＝外部からファイル名の指定をさせない</li>



<li>ファイル名を直接指定せず、<strong>別の表現（数字など）で指定する</strong></li>
</ul>
</div></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>繰り返しになりますが、<strong><span class="swl-marker mark_yellow">任意のファイル名を指定できる仕様を避けること</span></strong>がディレクトリ・トラバーサルへの根本的な対策となります。<br><br>しかし、上記の<strong>代替手段を用いることも難しいという場合には、以下よりご説明する対策を取り入れる</strong>ことでディレクトリ・トラバーサルが成功してしまう可能性を低めることが可能です。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h3 class="wp-block-heading">対策②　呼び出すファイルの置き場所を固定のディレクトリにする</h3>



<p class="wp-block-paragraph">「呼び出すファイルの置き場所を固定のディレクトリにする」とは、例えば<strong>ユーザが呼び出せるファイルの置き場所を「sampleディレクトリ」に限定する</strong>という意味です。</p>



<p class="wp-block-paragraph">その上で、ユーザから入力されたファイル名（攻撃者からの入力の場合はパス）からは、最後のファイル名部分のみを取得するようにします。</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>sampleディレクトリへのパス</li>



<li>入力内容から取得したファイル名</li>
</ul>
</div></div>



<p class="wp-block-paragraph">上記の２つを組み合わせることで、仮に「../../../etc/ファイル名%00」という入力が行われたとしても、生成されるフルパスは必ず、</p>



<p class="is-style-stitch wp-block-paragraph"><strong>/～省略～/sample/ファイル名</strong></p>



<p class="wp-block-paragraph">という形となり、意図しないディレクトリ内のファイルへの不正アクセスを防ぐことが可能です。</p>



<h4 class="wp-block-heading">実装例</h4>



<p class="wp-block-paragraph">上記の機能をPHPで実装する例をお見せします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>&lt;?php
// 固定のディレクトリ
define(&#39;SAMPLE_DIR&#39;, &#39;/var/www/html/sample/&#39;);

// 入力内容の取得
// ※GET送信データの検証処理は省略
$file_name = $_GET[&#39;file_name&#39;]; 

// 入力内容からファイル名のみを取得
$sample = basename($file_name);

// パスを組み立てる
$path = SAMPLE_DIR . $sample . &#39;.html&#39;;
?&gt;</code></pre></div>



<p class="is-style-big_icon_point wp-block-paragraph"><strong>basename()関数</strong>は、引数で渡したパスの最後にある名前の部分（ここで言うファイル名）を返す関数です。</p>



<p class="wp-block-paragraph">上記の処理により、「../../../../etc/hosts%00」という攻撃用の入力内容も、最終的には</p>



<p class="is-style-stitch wp-block-paragraph"><strong>/var/www/html/sample/hosts</strong></p>



<p class="wp-block-paragraph">となるため、不正アクセスは失敗に終わります。</p>



<p class="wp-block-paragraph">※プログラム内の「.html」はヌル文字（%00）によって省略されます。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>ただし、ここで１つ注意点があります！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="wp-block-paragraph">仮に上記の「hosts」が「hosts.php」など<strong>拡張子付きで指定された場合</strong>はどうでしょう？</p>



<p class="wp-block-paragraph">この場合、生成されるフルパスは拡張子「.php」までを含めた<strong>/var/www/html/sample/hosts.php</strong>となり、場合によっては意図しないアクセスを許してしまう恐れがあります。</p>



<p class="wp-block-paragraph">こうした事態を避けるためには、入力内容から取得したファイル名（上記プログラム例の<strong>$file_name = $_GET[&#8216;file_name&#8217;];</strong>の部分）の妥当性を検証する必要があります。</p>



<p class="is-style-icon_pen wp-block-paragraph">PHPではバージョン5.3.4以降であれば<strong>パス中にヌル文字が含まれていた時点でエラーになる</strong>仕様となっているようです。つまり、<strong>5.3.4以降のバージョンを使用する場合はファイル名の妥当性チェックは省略が可能</strong>となります。</p>



<h3 class="wp-block-heading">対策③　ファイル名を英数字のみに限定する</h3>



<p class="wp-block-paragraph">ディレクトリ・トラバーサル攻撃では「../」記号が用いられます。</p>



<p class="wp-block-paragraph">そのため、<strong><span class="marker-under">ファイル名の入力を英数字に限定する</span></strong>ことがディレクトリ・トラバーサル対策となります。</p>



<h4 class="wp-block-heading">実装例</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>&lt;?php
// 入力内容の取得
$file_name = $_GET[&#39;file_name&#39;]; 

//半角英数字のみの入力かどうかを検証
if(!preg_match( &quot;/^[a-zA-Z0-9]+$/&quot; , $file_name)){
	// 半角英数以外の文字が含まれていた場合は処理を受け付けない
}

// 入力内容からファイル名のみを取得
$sample = basename($file_name);

// パスを組み立てる
$path = SAMPLE_DIR . $sample . &#39;.html&#39;;
?&gt;</code></pre></div>



<p class="wp-block-paragraph">上記のコードの内、以下の部分が実際に半角英数字の検証を行っている箇所になります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>//半角英数字のみの入力かどうかを検証
if(!preg_match( &quot;/^[a-zA-Z0-9]+$/&quot; , $file_name)){
	// 半角英数以外の文字が含まれていた場合は処理を受け付けない
}</code></pre></div>



<p class="wp-block-paragraph">ここでは、PHPのpreg_match()関数と正規表現を用いることで検証処理を実装しています。</p>



<p class="is-style-bg_stripe wp-block-paragraph">参考：<a href="https://www.php.net/manual/ja/function.preg-match.php" target="_blank" rel="noreferrer noopener nofollow">https://www.php.net/manual/ja/function.preg-match.php</a></p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>以上がPHPにおけるディレクトリ・トラバーサル攻撃対策でした。<br><br>基本的には対策①の<strong>外部からファイル名を指定して呼び出せる仕様を避ける</strong>が最も確実な対策ですが、機能的に外すことが難しい場合には、<br><br>②や③を取り入れることでディレクトリ・トラバーサルのリスクを減らすことが可能です。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">ディレクトリ・トラバーサルは本来アクセスが許可されていないファイルへ不正アクセスされてしまうことで、情報漏洩やデータ改ざん、削除といった問題に加え、漏洩した情報を元にしたアカウントの乗っ取りなどに派生してしまう危険性があるセキュリティ攻撃です。</p>



<p class="wp-block-paragraph">ディレクトリ・トラバーサル攻撃が実行可能となってしまう原因は、</p>



<p class="is-style-sticky_box wp-block-paragraph">Webアプリに<strong>外部から任意のファイルを指定して呼び出せる</strong>という機能的な仕様</p>



<p class="wp-block-paragraph">にあります。</p>



<p class="wp-block-paragraph">したがって、根本的な回避策は、この仕様を実装しないことです。</p>



<p class="wp-block-paragraph">しかし、場合によってそれが難しい場合には、項目「対策（PHPによるコード解説あり）」でお伝えした②、③仕様や検証処理を取り入れることがディレクトリ・トラバーサル対策になります。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>セキュリティ対策は運営・開発者だけでなくそのユーザのために実施するものでもあります。<br>この記事でお伝えした内容だけでなく、<strong>開発するWebアプリの仕様に適した対策</strong>を施すようにしましょう。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="wp-block-paragraph">以上、ここまでディレクトリ・トラバーサルについて詳しくお伝えをしてきました。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>最後に、僕が<strong>セキュリティ対策を学ぶ際に利用した書籍</strong>をご紹介させていただきます。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<div id="rinkerid3655" class="yyi-rinker-contents  yyi-rinker-postid-3655 yyi-rinker-img-m yyi-rinker-catid-72 yyi-rinker-catid-32 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://hb.afl.rakuten.co.jp/hgc/g00q072g.bdzz22a5.g00q072g.bdzz326e/Rinker_i_20240325051043?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15472730%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fbook%2Fi%2F19130417%2F&#038;rafcid=wsc_i_is_1047822029026699702" rel="nofollow" class="yyi-rinker-tracking"  data-click-tracking="rakuten_img 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]" data-vars-click-id="rakuten_img 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3163/9784797393163.jpg?_ex=128x128"  width="128" height="128" class="yyi-rinker-main-img" style="border: none;"></a>					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://hb.afl.rakuten.co.jp/hgc/g00q072g.bdzz22a5.g00q072g.bdzz326e/Rinker_t_20240325051043?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15472730%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fbook%2Fi%2F19130417%2F&#038;rafcid=wsc_i_is_1047822029026699702" rel="nofollow" class="yyi-rinker-tracking" data-click-tracking="rakuten_title 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]" data-vars-amp-click-id="rakuten_title 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]" >体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]</a>							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥3,520</span>
															<span class="price_at">(2026/06/09 10:55:28時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																	<li class="amazonkindlelink">
						<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88%EF%BC%BB%E5%9B%BA%E5%AE%9A%E7%89%88%EF%BC%BD-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8-%E6%B5%A9-ebook/dp/B07DVY4H3M?_encoding=UTF8&amp;dib_tag=se&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFijL3FSdFSR0LKwwn0F-UPgnO4-c3ozCV4u_yzlUP10v8KPCWYU6aPhFknUSSGvFmOEDGJ7u_LQxIZPLfydTHs_AWTWMCbT_FAR33FxKzQdND0le-SUmRnBHzYhR8SX_lsohxpGeQkIATYHxCJlB0aHhgwHHQ_THHRbyVElNccJqEMDb7ELZa0F--eVduuVxaejEJv9h9ZmItplRO6lE6VyZJA2Jej7Jvd7bD0ypm9krDwLy3e-Ea8YDtZc7KF66Cb-ea0Tp3FGBrFX0K3fiRlfA.KN6w39aSpN4iCwmHQ6974qNXMN0yNo0Ib071kV4gNk4&amp;qid=1723712413&amp;sr=8-6&amp;linkCode=ll1&amp;tag=kekenta03am0b-22&amp;linkId=3aee57ca3ac28d84506bf0e0db6cec11&amp;language=ja_JP&amp;ref_=as_li_ss_tl" rel="nofollow" class="yyi-rinker-link yyi-rinker-tracking"  data-click-tracking="amazon_kindle 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"  data-vars-amp-click-id="amazon_kindle 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]">Kindle</a>					</li>
								                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFijL3FSdFSR0LKwwn0F-UPgnO4-c3ozCV4u_yzlUP10v8KPCWYU6aPhFknUSSGvFmOEDGJ7u_LQxIZPLfydTHs_AWTWMCbT_FAR33FxKzQdND0le-SUmRnBHzYhR8SX_lsohxpGeQkIATYHxCJlB0aHhgwHHQ_THHRbyVElNccJqEMDb7ELZa0F--eVduuVxaejEJv9h9ZmItplRO6lE6VyZJA2Jej7Jvd7bD0ypm9krDwLy3e-Ea8YDtZc7KF66Cb-ea0Tp3FGBrFX0K3fiRlfA.KN6w39aSpN4iCwmHQ6974qNXMN0yNo0Ib071kV4gNk4&amp;dib_tag=se&amp;keywords=%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3&amp;qid=1723712376&amp;sr=8-1&amp;linkCode=ll1&amp;tag=https://www.amazon.co.jp/PHP%E6%9C%AC%E6%A0%BC%E5%85%A5%E9%96%80-%E4%B8%8A-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A8%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E9%80%A3%E6%90%BA%E3%81%BE%E3%81%A7-%E5%A4%A7%E5%AE%B6-%E6%AD%A3%E7%99%BB/dp/4297114682?dib=eyJ2IjoiMSJ9.74YDItYNn-AHro6XQ1cSslRSHUvp_S8S4MVJtvnW_XswliMGieYQktGbaTJY9E-Qpy3y3roMKB8M-zKI3K7otpqjDxkuoq7ncq-6mLf3BEkcNW05BAHDZZ17WZueAniDY7peSrmp4Ji0L0BkXOaJIBbpqa628I6bjQBED1FQ9V7BJqUJVUUxz6ns2GIHnoSItDTgCRaIpNi9fMcBrt3jqZr1qNJxCmBn8-xPR9N3usFpENEEChvMwvGdHoHu1hjsq6g9GvJDwPPBTwhQvDgXG2KZQ5CBlEx_wQjQy06hFcw.xxCKw6aGhA397JIEATXvL3RNC7D4_k4avRIYczzkjHw&amp;dib_tag=se&amp;keywords=PHP%E6%9C%AC%E6%A0%BC%E5%85%A5%E9%96%80&amp;qid=1723712413&amp;sr=8-6&amp;linkCode=ll1&amp;tag=kekenta03am0b-22&amp;linkId=16a4b7edeeedcc86aef9f0b8c45cc669&amp;language=ja_JP&amp;ref_=as_li_ss_tl-22&amp;linkId=04fec4999f3ec4094bf4fd1126da8b84&amp;language=ja_JP&amp;ref_=as_li_ss_tl" rel="nofollow" class="yyi-rinker-link yyi-rinker-tracking"  data-click-tracking="amazon 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"  data-vars-amp-click-id="amazon 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://hb.afl.rakuten.co.jp/hgc/g00q072g.bdzz22a5.g00q072g.bdzz326e/Rinker_t_20240325051043?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15472730%2F&amp;m=http%3A%2F%2Fm.rakuten.co.jp%2Fbook%2Fi%2F19130417%2F&amp;rafcid=wsc_i_is_1047822029026699702" rel="nofollow" class="yyi-rinker-link yyi-rinker-tracking"  data-click-tracking="rakuten 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"  data-vars-amp-click-id="rakuten 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]">楽天市場</a>					</li>
								                											</ul>
					</div>
	</div>
</div>



<p class="is-style-bg_stripe wp-block-paragraph"><a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNNDQgMkgzMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDJoOS4yTDI0IDIxLjJjLS44LjgtLjggMiAwIDIuOHMyIC44IDIuOCAwTDQyIDguOFYxOGMwIDEuMS45IDIgMiAyczItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PHBhdGggZD0iTTQxIDI3Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS0uOSAyLTIgMkg5Yy0xLjEgMC0yLS45LTItMlYxMWMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMkg5Yy0zLjMgMC02IDIuNy02IDZ2MjhjMCAzLjMgMi43IDYgNiA2aDI4YzMuMyAwIDYtMi43IDYtNlYyOWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsExternalLink" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span>体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践</a><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMTEuNyAxLjQgNi44IDVjLS41LjQtLjggMS0uOCAxLjZ2MjguN2MwIC44LjUgMS41IDEuMiAxLjhsMjQgMTAuM2MxLjMuNiAyLjgtLjQgMi44LTEuOFYxOWMwLS44LS41LTEuNS0xLjItMS44TDEwLjIgNy41bDIuOS0yLjJjLjktLjYgMi0uOCAzLS40bDIwLjYgOC44Yy43LjMgMS4yIDEgMS4yIDEuOFY0Mi45YzAgLjkgMSAxLjMgMS43LjhsMS43LTEuNWMuNC0uNC43LS45LjctMS41VjEzYzAtLjgtLjUtMS41LTEuMi0xLjhMMTYuNy44Yy0xLjctLjctMy42LS41LTUgLjZ6Ij48L3BhdGg+PC9zdmc+)" data-icon="LsBook" data-id="47" aria-hidden="true" class="swl-inline-icon"> </span><br>徳丸 浩／著　SBクリエイティブ／出版│<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl">Amazon</a></p>



<p class="wp-block-paragraph">こちらの書籍は通称<strong>徳丸本</strong>と呼ばれており、Webセキュリティの第一人者である徳丸浩さんが手がけられている書籍です。<strong>Webアプリを開発する方</strong>や<strong>Webアプリケーションのセキュリティ対策を徹底的に学びたい方</strong>にとてもオススメできる一冊です。</p>



<p class="wp-block-paragraph">Webアプリケーション開発において、ある意味セキュリティ対策は技術力以上に重要です。</p>



<p class="wp-block-paragraph">こちらの書籍を読むことでWebアプリケーションにおいて必要なセキュリティ要件も明確となるため、<strong><span class="swl-marker mark_yellow">Webアプリ開発に携わる方は必ず目を通しておきたい一冊</span></strong>です。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/11/kekenta-icon-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/11/kekenta-icon-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>それでは最後までお付き合いいただきありがとうございました！<br>また別の記事でお会いできれば光栄です！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__sql-inj-php__1106-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/sql-inj-php/">【PHP】SQLインジェクションの原因や攻撃手法【対策コード付き】</a>
						<span class="p-blogCard__excerpt">この記事ではセキュリティ攻撃の１つであるSQLインジェクションについて、その対策方法も含めて解説をしていきます。  この記事で分かること SQLインジェクション攻撃の&#8230;</span>					</div>
				</div>
			</div>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__xss-php__961-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/xss-php/">【XSS】クロスサイト・スクリプティングとは？対策方法も解説【PHP】</a>
						<span class="p-blogCard__excerpt">今回はWebアプリにおけるセキュリティ攻撃の１つであるXSS（クロスサイト・スクリプティング）について解説をしていきます。  この記事を読むと分かること XSS（クロス&#8230;</span>					</div>
				</div>
			</div>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__csrf-php__918-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/csrf-php/">【CSRF】攻撃の流れやPHPでの対策方法を解説【クロスサイトリクエストフォージェリ】</a>
						<span class="p-blogCard__excerpt">Webサイトへのセキュリティ攻撃の１つにCSRF（クロスサイトリクエストフォージェリ）というものがあります。 この記事では、 CSRFの攻撃の流れ 攻撃による影響・被害 PH&#8230;</span>					</div>
				</div>
			</div>
		</div>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【XSS】クロスサイト・スクリプティングとは？対策方法も解説【PHP】</title>
		<link>https://kekenta-it-blog.com/xss-php/</link>
		
		<dc:creator><![CDATA[ケケンタ]]></dc:creator>
		<pubDate>Mon, 11 Dec 2023 12:38:59 +0000</pubDate>
				<category><![CDATA[Webアプリ]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">https://kekenta-it-blog.com/?p=961</guid>

					<description><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__xss-php__961-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>今回はWebアプリにおけるセキュリティ攻撃の１つであるXSS（クロスサイト・スクリプティング）について解説をしていきます。 セキュリティ対策についてしっかり学ばれたい方にはこちらの書籍がおすすめです。（通称：徳丸本と呼ば [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__xss-php__961-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p class="wp-block-paragraph">今回はWebアプリにおけるセキュリティ攻撃の１つである<strong>XSS（クロスサイト・スクリプティング）</strong>について解説をしていきます。</p>



<div class="swell-block-capbox cap_box is-style-shadow"><div class="cap_box_ttl"><span><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMzIgNDYuNUgxNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTJoMTZjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyek00MS43IDE1LjlDNDEuMyAxMyA0MCAxMC4zIDM4LjIgOCAzNC41IDMuMiAyOSAuOCAyMy4xIDEgMTQgMS40IDYuNSA4LjkgNiAxOGMtLjMgNiAyLjQgMTEuNyA3LjIgMTUuNC41LjQuOC45LjggMS41djEuNmMwIDIuMiAxLjggNCA0IDRoMTJjMi4yIDAgNC0xLjggNC00VjM1YzAtLjYuMy0xLjIuOS0xLjcgNS4zLTQgOC0xMC42IDYuOC0xNy40em0tNy4xIDEuN2gtLjNjLS43IDAtMS4zLS41LTEuNS0xLjItLjctMy4yLTMuMi01LjctNi40LTYuMy0uOC0uMS0xLjQtLjktMS4yLTEuN3MuOS0xLjQgMS43LTEuMmM0LjQuOCA4IDQuMiA4LjkgOC42LjEuOC0uNCAxLjYtMS4yIDEuOHoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsLightbulb" data-id="0" aria-hidden="true" class="swl-inline-icon"> </span><strong>この記事を読むと分かること</strong></span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>XSS（クロスサイト・スクリプティング）の<strong>概要</strong></li>



<li>XSSが実行されるまでの<strong>流れ</strong></li>



<li>XSSが起こる<strong>原因</strong></li>



<li>XSSの<strong>対策方法</strong>３つ（PHP）</li>
</ul>
</div></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>それでは早速見ていきましょう！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="is-style-bg_stripe wp-block-paragraph">セキュリティ対策についてしっかり学ばれたい方にはこちらの書籍がおすすめです。<br>（<strong>通称：徳丸本</strong>と呼ばれる「Webアプリ開発者必読」とまで言われている書籍です）<br><br><a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNNDQgMkgzMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDJoOS4yTDI0IDIxLjJjLS44LjgtLjggMiAwIDIuOHMyIC44IDIuOCAwTDQyIDguOFYxOGMwIDEuMS45IDIgMiAyczItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PHBhdGggZD0iTTQxIDI3Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS0uOSAyLTIgMkg5Yy0xLjEgMC0yLS45LTItMlYxMWMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMkg5Yy0zLjMgMC02IDIuNy02IDZ2MjhjMCAzLjMgMi43IDYgNiA2aDI4YzMuMyAwIDYtMi43IDYtNlYyOWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsExternalLink" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span>体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践</a><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMTEuNyAxLjQgNi44IDVjLS41LjQtLjggMS0uOCAxLjZ2MjguN2MwIC44LjUgMS41IDEuMiAxLjhsMjQgMTAuM2MxLjMuNiAyLjgtLjQgMi44LTEuOFYxOWMwLS44LS41LTEuNS0xLjItMS44TDEwLjIgNy41bDIuOS0yLjJjLjktLjYgMi0uOCAzLS40bDIwLjYgOC44Yy43LjMgMS4yIDEgMS4yIDEuOFY0Mi45YzAgLjkgMSAxLjMgMS43LjhsMS43LTEuNWMuNC0uNC43LS45LjctMS41VjEzYzAtLjgtLjUtMS41LTEuMi0xLjhMMTYuNy44Yy0xLjctLjctMy42LS41LTUgLjZ6Ij48L3BhdGg+PC9zdmc+)" data-icon="LsBook" data-id="47" aria-hidden="true" class="swl-inline-icon"> </span><br>徳丸 浩／著　SBクリエイティブ／出版│<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl">Amazon</a></p>


<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/alone-php-study/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">PHPはこうして習得した！約１年間の勉強内容【プログラミング独学】</span>
			</a>
		</div>

<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/php-deploy-xserver-for-zip/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">【PHP】エックスサーバーへデプロイする方法【初心者でも簡単！】</span>
			</a>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2025/03/eye-catch__school-php-and-wp__14099-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/school-php-and-wp/">PHPやWordPressを学ぶのにおすすめのプログラミングスクール【７選】</a>
						<span class="p-blogCard__excerpt">僕はこれまで独学でPHPを学習してきました。結論から言えば、それでもPHPを習得することはできました。 しかし、それに費やした累計学習期間は1年ほど。モチベーション&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h2 class="wp-block-heading">XSS（クロスサイト・スクリプティング）とは？</h2>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2"><div class="cap_box_ttl"><span>クロスサイト・スクリプティング（XSS）とは</span></div><div class="cap_box_content">
<p class="wp-block-paragraph"><strong>攻撃者が脆弱性のあるWebサイトに悪意のあるスクリプト（JavaScriptコード）を埋め込み、一般ユーザが使用しているブラウザ上においてスクリプトが実行されることによって、重要な情報を抜き出したり、改ざんなどを実行する攻撃</strong></p>
</div></div>



<p class="wp-block-paragraph">もう少しかみ砕いて言うと、掲示板サイトなどに投稿された悪意のあるリンクを一般ユーザがクリックすることで、</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container">
<ul class="wp-block-list is-style-bad_list -list-under-dashed">
<li>クリックしたユーザ本人の情報を抜き取る</li>



<li>攻撃対象のサイト上のコンテンツを偽の情報に書き換える</li>
</ul>
</div></div>



<p class="wp-block-paragraph">といったことが実行される攻撃です。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>実際に抜き取られる情報としては、重要情報を格納している<strong>クッキー</strong>が挙げられます。クッキーの中には<strong>ログイン情報に関するセッションID</strong>も含まれているため、いわゆる<strong>セッションハイジャック</strong>という別の攻撃にも繋がってしまう可能性があるのです。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h2 class="wp-block-heading">XSS攻撃が行われる流れ</h2>



<p class="wp-block-paragraph">ここで、イメージを持ちやすくするために<strong>XSS攻撃実行の具体的な流れ</strong>を見てみましょう。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2" data-colset="col3"><div class="cap_box_ttl"><span>XSS攻撃の流れ（ver.情報漏洩）</span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-num_circle -list-under-dashed">
<li>掲示板などの「一般ユーザ」が任意のテキストを投稿できる場所に、「攻撃者」が<strong>悪意のあるスクリプトを含めたリンク</strong>を投稿する。（Youtubeのコメント欄など）</li>



<li>そのリンクを「一般ユーザ」がクリックすることで、「リンク先（脆弱性があるサイト）」へページ遷移する。</li>



<li>「リンク先」が開かれると同時に、<strong>悪意のあるスクリプト</strong>が実行される。（これにより、例えば偽物の入力フォームなどが表示される）</li>



<li>ユーザがさらにボタンをクリックするなどしてしまうことで、クッキーなどの重要情報が「攻撃者」に漏洩する</li>
</ul>
</div></div>



<p class="wp-block-paragraph">補足として、「悪意のあるスクリプトを含めたリンク」とは例えば以下のようなURLのことを言います。</p>



<p class="is-style-crease wp-block-paragraph">https://example.com<strong>?user=&lt;script&gt;alert(&#8216;This is evil message&#8217;);&lt;/script&gt;</strong></p>



<p class="wp-block-paragraph">太字になっている部分が「悪意のあるスクリプト」のことで、上記のようなリンクをクリックすることで以下のような流れが起こります。</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container">
<ul class="wp-block-list is-style-num_circle -list-under-dashed">
<li>https://example.comへ遷移</li>



<li>それと同時にhttps://example.comへ、<strong>user</strong>というキー名に<strong>&lt;script&gt;～&lt;/script&gt;</strong>という文字列を格納したデータを<strong>GET送信</strong>する</li>



<li>https://example.comが開かれると、<strong>&lt;script&gt;～&lt;/script&gt;</strong>の部分がブラウザ上で実行される</li>
</ul>
</div></div>



<p class="wp-block-paragraph">上記のスクリプトではただ単にポップアップウィンドウを表示するだけですが、攻撃者はここに悪意のあるスクリプトを含めて情報を盗み取ったり、遷移先ページ内のコンテンツを改ざんし、混乱を招くといったことを行うわけです。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/困った顔-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/困った顔-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>ブラウザが<strong>scriptタグ</strong>で囲まれた部分をJavaScriptのプログラムだと認識して実行するという仕組みを悪用しているんですね。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">XSSの対策方法３つ【PHP】</h2>



<h3 class="wp-block-heading">XSSの原因</h3>



<p class="wp-block-paragraph">XSS攻撃が成功してしまう主な原因は以下の通りです。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2" data-colset="col3"><div class="cap_box_ttl"><span>XSS攻撃が成功してしまう主な原因</span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-bad_list -list-under-dashed">
<li>入力フォームにユーザが入力した値を<strong>サニタイジング（無害化）</strong>せずブラウザへ表示している</li>



<li>入力フォームで<strong>入力値のチェック</strong>を行っていない</li>



<li>表示するページに<strong>文字コード（charaset）を指定</strong>していない</li>
</ul>
</div></div>



<p class="wp-block-paragraph">逆に言うと、上記に対してしっかりと対策を施すことで<strong><span class="marker-under"><span class="swl-marker mark_yellow">XSS攻撃が成功してしまう可能性を大幅に減らすことが可能</span></span></strong>です。</p>



<h3 class="wp-block-heading">対策①　サニタイジング（無害化）する</h3>



<p class="wp-block-paragraph">XSS対策におけるサニタイジング＝無害化とは、いわゆる<strong>エスケープ処理</strong>のことです。</p>



<p class="wp-block-paragraph">具体的には、XSS攻撃で使用される<strong>&amp;，&lt;，&gt;，”，’の５文字の特殊文字</strong>を「&amp;lt;」や「&amp;gt;」といった文字列に変換することで、ブラウザに<span class="marker-under"><strong>単なる文字列</strong>として解釈させる</span>ことができます。</p>



<p class="wp-block-paragraph">XSSでは悪意のあるスクリプトを埋め込む際にscriptタグが使用されることは前述のとおりですが、つまり</p>



<p class="is-style-sticky_box wp-block-paragraph">&lt;script&gt;～&lt;/script&gt;の部分を<strong>単なる文字列に置き換える＝エスケープ</strong>してしまうことで、悪意のあるスクリプトを文字通り<strong>無害化</strong>できる</p>



<p class="wp-block-paragraph">ということです。</p>



<h4 class="wp-block-heading">実装例</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>&lt;?php 
// 文字エンコーディング（置換）にはUTF-8を使用する
echo htmlspecialchars(&quot;出力する文字列&quot;, ENT_QUOTES, &#39;UTF-8&#39;); 
?&gt;</code></pre></div>



<p class="wp-block-paragraph">上記のように記述することで、「出力する文字列」の部分を無害化（サニタイジング）した上でブラウザに表示することが可能となります。</p>



<p class="is-style-big_icon_point wp-block-paragraph">第2引数の<strong>ENT_QUOTES</strong>を指定することでシングルクォーテーション「&#8217;」とダブルクォーテーション「&#8221;」もエンコードの対象になります。<br><br>また、上記は<strong>文字コードにUTF-8が指定されているファイル</strong>に記載する際の例です。第3引数で「このファイルの文字コードはUTF-8なのでそれに基づいてエスケープ処理して下さい」と伝えています。</p>



<h3 class="wp-block-heading">対策②　入力値をチェックする（バリデーションチェック）</h3>



<p class="wp-block-paragraph">入力時点で制限を設けておくことにより、XSSの自由度を大幅に削ることが可能です。</p>



<p class="wp-block-paragraph">例えば、<strong>電話番号の入力欄に「数字のみ」を許可する</strong>ように<strong>バリデーション（検証）</strong>を実装することでスクリプトの挿入自体が不可能となります。</p>



<p class="wp-block-paragraph">あるいは、<strong>文字制限を設ける</strong>だけでもスクリプトの入力を抑えることが可能となり、こちらもXSSに有効な対策となります。</p>



<h4 class="wp-block-heading">実装例</h4>



<p class="wp-block-paragraph">以下のコードは<strong><span class="marker-under">半角数字のみ許可する</span></strong>場合の例です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>if( preg_match( &#39;/^[0-9]+$/&#39;, &#39;入力された文字列&#39; ) ) {
	// 入力された文字列が半角数字のみの場合の処理
}else{
	// 入力された文字列が半角数字のみでない場合の処理
}</code></pre></div>



<p class="wp-block-paragraph">ここで重要なのが以下の2か所です。</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>preg_match( ～ )</li>



<li>&#8216;/^[0-9]+$/&#8217;</li>
</ul>
</div></div>



<p class="is-style-big_icon_point wp-block-paragraph"><strong>preg_match()関数</strong>は、第2引数で設定した文字列のパターンが、第1引数に設定した<strong>正規表現</strong>と一致するかどうかを判定する関数です。<br>また、<strong>&#8216;/^[0-9]+$/&#8217;</strong>の部分で、正規表現によって「0～9の半角数字」の入力のみを指定しています。<br><br>もう少し詳細に書くと、<br><strong>0～9の半角数字（[0-9]）で始まり（^）、その後ろには0～9の半角数字（[0-9]）のいずれかが連続して続き（+）、0～9の半角数字（[0-9]）いずれかで終わる（$）文字列</strong><br>という意味になります。<br>（頭と最後についているスラッシュ（/）は「デリミタ」と呼ばれるもので、正規表現パターンの範囲を表すためのものです。）</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>正規表現を使えば、例えばハイフン付きの電話番号、メールアドレスの形式といった<strong>特定のパターンの文字列だけを許可するバリデーション</strong>の実装が可能です。<br>実際にバリデーションを実装する際はご自身のアプリに合わせた実装をしましょう。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="wp-block-paragraph">このようにバリデーションを実装することで、<strong><span class="swl-marker mark_yellow">XSSで利用される悪意あるスクリプトの入力そのものを抑制できます。</span></strong></p>



<h3 class="wp-block-heading">対策③　表示するページの文字コードを指定する</h3>



<p class="wp-block-paragraph">分かりやすく言うと、<span class="marker-under"><strong>ブラウザに表示するページで使用している文字コードを明示する</strong></span>ということです。</p>



<p class="wp-block-paragraph">通常、ブラウザはHTTPヘッダに文字コードの指定があれば指定通りに、指定が無い場合には独自のルールに基づいて文字コードを予測し、画面表示処理を実行します。</p>



<p class="wp-block-paragraph">独自のルールとは、例えば</p>



<p class="is-style-sticky_box wp-block-paragraph">HTMLテキストの冒頭を参照し、<strong>特定の文字列が含まれていたときには特定の文字コードであると解釈する</strong></p>



<p class="wp-block-paragraph">といったものです。</p>



<p class="wp-block-paragraph">攻撃者はこの独自のルールを悪用し、ブラウザに対して「このファイルはこういう文字コードで記述されていますよ」と誤認させるような文字列をファイル内に仕組みます。</p>



<p class="wp-block-paragraph">ここで、前述したサニタイジングのコードを改めて提示させて頂きます。</p>



<p class="wp-block-paragraph">以下のコードの第3引数に注目して頂くと「UTF-8」の指定があります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>&lt;?php 
// 文字エンコーディング（置換）にはUTF-8を使用する
echo htmlspecialchars(&quot;出力する文字列&quot;, ENT_QUOTES, &#39;UTF-8&#39;); 
?&gt;</code></pre></div>



<p class="wp-block-paragraph">これにより「表示する文字列をサニタイジング（無害化）する際にはUTF-8に基づいてください」と指示を行っています。</p>



<p class="wp-block-paragraph">そのため、攻撃者がブラウザ独自のルールを悪用し、ブラウザに「表示するファイルがUTF-8ではない別の文字コードで記述されている」と誤った解釈をさせた場合、サニタイジングが上手く実行されず、結果として悪意あるスクリプトが実行されてしまう恐れがあるのです。</p>



<p class="wp-block-paragraph">これを防ぐためにも、表示するページ（ファイル）の文字コードを指定することが大切になります。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p><strong>文字コードを指定する方法を３つ</strong>ご紹介します！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h4 class="wp-block-heading">実装例①　header関数でContent-Typeヘッダに文字コードを指定する</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>&lt;?php
// ブラウザに送信データがHTML、文字コードがUTF-8ということを指定
header(&#39;Content-Type: text/html; charset=UTF-8&#39;); 
?&gt;</code></pre></div>



<p class="wp-block-paragraph">上記のように記述するだけで、そのPHPファイルで生成されたHTMLページの文字コードが「UTF-8」であることを指定できます。</p>



<p class="wp-block-paragraph">ここで１つ注意点がありますので公式ドキュメントから引用させて頂きます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">覚えておいて頂きたいのは、header()&nbsp;関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。</p>
<cite>https://www.php.net/manual/ja/function.header.php</cite></blockquote>



<p class="wp-block-paragraph">つまり、header()関数はHTMLタグやPHPのechoなどの画面表示に関わる記述よりも前の行に記述をしましょうということです。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>文字コードの指定方法としてはこれが最も確実です。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h4 class="wp-block-heading">実装例②　php.iniのdefault_charsetで指定する</h4>



<p class="wp-block-paragraph">php.iniに以下の記述をすることでも文字コードが指定できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>default_charset = &quot;UTF-8&quot;</code></pre></div>



<h4 class="wp-block-heading">実装例③　HTMLのhead要素内でcharasetを指定する</h4>



<p class="wp-block-paragraph">php.iniの変更が出来ないような状況の場合は、HTMLのhead要素内で文字コードを指定するのも有効です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>&lt;meta charset=&quot;UTF-8&quot;&gt;</code></pre></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>以上がPHPでアプリ開発をするに必要なXSS対策でした。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">ここまで、<strong>XSSの概要や攻撃の流れ、PHPでの対策方法</strong>について解説をしてきました。</p>



<p class="wp-block-paragraph">最後に、対策方法３つを改めて整理します。</p>



<div class="swell-block-capbox cap_box"><div class="cap_box_ttl"><span>クロスサイトスクリプティング（XSS）対策【３つ】のまとめ</span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>サニタイジング（無害化）する</li>



<li>入力値をチェックする（バリデーションチェック）</li>



<li>表示するページの文字コードを指定する</li>
</ul>
</div></div>



<p class="wp-block-paragraph">XSSが成功してしまうようなサイトを公開してしまうと、サイト運営者ではなく一般ユーザに多大な迷惑、被害を与えてしまう可能性があります。</p>



<p class="wp-block-paragraph">安全なアプリ開発をするためにも、このブログだけではなく、ぜひIPAの資料や市販の書籍にも目を通してセキュリティ対策への理解を深めてみて下さい。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>最後に、僕が<strong>セキュリティ対策を学ぶ際に利用した書籍</strong>をご紹介させていただきます。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<div id="rinkerid3655" class="yyi-rinker-contents  yyi-rinker-postid-3655 yyi-rinker-img-m yyi-rinker-catid-72 yyi-rinker-catid-32 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://hb.afl.rakuten.co.jp/hgc/g00q072g.bdzz22a5.g00q072g.bdzz326e/Rinker_i_20240325051043?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15472730%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fbook%2Fi%2F19130417%2F&#038;rafcid=wsc_i_is_1047822029026699702" rel="nofollow" class="yyi-rinker-tracking"  data-click-tracking="rakuten_img 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]" data-vars-click-id="rakuten_img 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3163/9784797393163.jpg?_ex=128x128"  width="128" height="128" class="yyi-rinker-main-img" style="border: none;"></a>					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://hb.afl.rakuten.co.jp/hgc/g00q072g.bdzz22a5.g00q072g.bdzz326e/Rinker_t_20240325051043?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15472730%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fbook%2Fi%2F19130417%2F&#038;rafcid=wsc_i_is_1047822029026699702" rel="nofollow" class="yyi-rinker-tracking" data-click-tracking="rakuten_title 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]" data-vars-amp-click-id="rakuten_title 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]" >体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]</a>							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥3,520</span>
															<span class="price_at">(2026/06/09 10:55:28時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																	<li class="amazonkindlelink">
						<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88%EF%BC%BB%E5%9B%BA%E5%AE%9A%E7%89%88%EF%BC%BD-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8-%E6%B5%A9-ebook/dp/B07DVY4H3M?_encoding=UTF8&amp;dib_tag=se&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFijL3FSdFSR0LKwwn0F-UPgnO4-c3ozCV4u_yzlUP10v8KPCWYU6aPhFknUSSGvFmOEDGJ7u_LQxIZPLfydTHs_AWTWMCbT_FAR33FxKzQdND0le-SUmRnBHzYhR8SX_lsohxpGeQkIATYHxCJlB0aHhgwHHQ_THHRbyVElNccJqEMDb7ELZa0F--eVduuVxaejEJv9h9ZmItplRO6lE6VyZJA2Jej7Jvd7bD0ypm9krDwLy3e-Ea8YDtZc7KF66Cb-ea0Tp3FGBrFX0K3fiRlfA.KN6w39aSpN4iCwmHQ6974qNXMN0yNo0Ib071kV4gNk4&amp;qid=1723712413&amp;sr=8-6&amp;linkCode=ll1&amp;tag=kekenta03am0b-22&amp;linkId=3aee57ca3ac28d84506bf0e0db6cec11&amp;language=ja_JP&amp;ref_=as_li_ss_tl" rel="nofollow" class="yyi-rinker-link yyi-rinker-tracking"  data-click-tracking="amazon_kindle 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"  data-vars-amp-click-id="amazon_kindle 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]">Kindle</a>					</li>
								                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFijL3FSdFSR0LKwwn0F-UPgnO4-c3ozCV4u_yzlUP10v8KPCWYU6aPhFknUSSGvFmOEDGJ7u_LQxIZPLfydTHs_AWTWMCbT_FAR33FxKzQdND0le-SUmRnBHzYhR8SX_lsohxpGeQkIATYHxCJlB0aHhgwHHQ_THHRbyVElNccJqEMDb7ELZa0F--eVduuVxaejEJv9h9ZmItplRO6lE6VyZJA2Jej7Jvd7bD0ypm9krDwLy3e-Ea8YDtZc7KF66Cb-ea0Tp3FGBrFX0K3fiRlfA.KN6w39aSpN4iCwmHQ6974qNXMN0yNo0Ib071kV4gNk4&amp;dib_tag=se&amp;keywords=%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3&amp;qid=1723712376&amp;sr=8-1&amp;linkCode=ll1&amp;tag=https://www.amazon.co.jp/PHP%E6%9C%AC%E6%A0%BC%E5%85%A5%E9%96%80-%E4%B8%8A-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A8%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E9%80%A3%E6%90%BA%E3%81%BE%E3%81%A7-%E5%A4%A7%E5%AE%B6-%E6%AD%A3%E7%99%BB/dp/4297114682?dib=eyJ2IjoiMSJ9.74YDItYNn-AHro6XQ1cSslRSHUvp_S8S4MVJtvnW_XswliMGieYQktGbaTJY9E-Qpy3y3roMKB8M-zKI3K7otpqjDxkuoq7ncq-6mLf3BEkcNW05BAHDZZ17WZueAniDY7peSrmp4Ji0L0BkXOaJIBbpqa628I6bjQBED1FQ9V7BJqUJVUUxz6ns2GIHnoSItDTgCRaIpNi9fMcBrt3jqZr1qNJxCmBn8-xPR9N3usFpENEEChvMwvGdHoHu1hjsq6g9GvJDwPPBTwhQvDgXG2KZQ5CBlEx_wQjQy06hFcw.xxCKw6aGhA397JIEATXvL3RNC7D4_k4avRIYczzkjHw&amp;dib_tag=se&amp;keywords=PHP%E6%9C%AC%E6%A0%BC%E5%85%A5%E9%96%80&amp;qid=1723712413&amp;sr=8-6&amp;linkCode=ll1&amp;tag=kekenta03am0b-22&amp;linkId=16a4b7edeeedcc86aef9f0b8c45cc669&amp;language=ja_JP&amp;ref_=as_li_ss_tl-22&amp;linkId=04fec4999f3ec4094bf4fd1126da8b84&amp;language=ja_JP&amp;ref_=as_li_ss_tl" rel="nofollow" class="yyi-rinker-link yyi-rinker-tracking"  data-click-tracking="amazon 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"  data-vars-amp-click-id="amazon 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://hb.afl.rakuten.co.jp/hgc/g00q072g.bdzz22a5.g00q072g.bdzz326e/Rinker_t_20240325051043?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15472730%2F&amp;m=http%3A%2F%2Fm.rakuten.co.jp%2Fbook%2Fi%2F19130417%2F&amp;rafcid=wsc_i_is_1047822029026699702" rel="nofollow" class="yyi-rinker-link yyi-rinker-tracking"  data-click-tracking="rakuten 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"  data-vars-amp-click-id="rakuten 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]">楽天市場</a>					</li>
								                											</ul>
					</div>
	</div>
</div>



<p class="is-style-bg_stripe wp-block-paragraph"><a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNNDQgMkgzMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDJoOS4yTDI0IDIxLjJjLS44LjgtLjggMiAwIDIuOHMyIC44IDIuOCAwTDQyIDguOFYxOGMwIDEuMS45IDIgMiAyczItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PHBhdGggZD0iTTQxIDI3Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS0uOSAyLTIgMkg5Yy0xLjEgMC0yLS45LTItMlYxMWMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMkg5Yy0zLjMgMC02IDIuNy02IDZ2MjhjMCAzLjMgMi43IDYgNiA2aDI4YzMuMyAwIDYtMi43IDYtNlYyOWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsExternalLink" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span>体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践</a><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMTEuNyAxLjQgNi44IDVjLS41LjQtLjggMS0uOCAxLjZ2MjguN2MwIC44LjUgMS41IDEuMiAxLjhsMjQgMTAuM2MxLjMuNiAyLjgtLjQgMi44LTEuOFYxOWMwLS44LS41LTEuNS0xLjItMS44TDEwLjIgNy41bDIuOS0yLjJjLjktLjYgMi0uOCAzLS40bDIwLjYgOC44Yy43LjMgMS4yIDEgMS4yIDEuOFY0Mi45YzAgLjkgMSAxLjMgMS43LjhsMS43LTEuNWMuNC0uNC43LS45LjctMS41VjEzYzAtLjgtLjUtMS41LTEuMi0xLjhMMTYuNy44Yy0xLjctLjctMy42LS41LTUgLjZ6Ij48L3BhdGg+PC9zdmc+)" data-icon="LsBook" data-id="47" aria-hidden="true" class="swl-inline-icon"> </span><br>徳丸 浩／著　SBクリエイティブ／出版│<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl">Amazon</a></p>



<p class="wp-block-paragraph">こちらの書籍は通称<strong>徳丸本</strong>と呼ばれており、Webセキュリティの第一人者である徳丸浩さんが手がけられている書籍です。<strong>Webアプリを開発する方</strong>や<strong>Webアプリケーションのセキュリティ対策を徹底的に学びたい方</strong>にとてもオススメできる一冊です。</p>



<p class="wp-block-paragraph">Webアプリケーション開発において、ある意味セキュリティ対策は技術力以上に重要です。</p>



<p class="wp-block-paragraph">こちらの書籍を読むことでWebアプリケーションにおいて必要なセキュリティ要件も明確となるため、Webアプリ開発に携わる方は必ず目を通しておきたい一冊です。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>最後までお読みいただきありがとうございました。<br>また別の記事でお会いしましょう！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__dir-trav-php__1016-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/dir-trav-php/">【ディレクトリ・トラバーサル】概要と対策方法を解説【PHP対策コード】</a>
						<span class="p-blogCard__excerpt">今回はセキュリティ攻撃の１つであるディレクトリ・トラバーサルについて解説をしていきます。 ディレクトリ・トラバーサル攻撃を受けてしまうと、被害内容によっては社&#8230;</span>					</div>
				</div>
			</div>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__sql-inj-php__1106-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/sql-inj-php/">【PHP】SQLインジェクションの原因や攻撃手法【対策コード付き】</a>
						<span class="p-blogCard__excerpt">この記事ではセキュリティ攻撃の１つであるSQLインジェクションについて、その対策方法も含めて解説をしていきます。  この記事で分かること SQLインジェクション攻撃の&#8230;</span>					</div>
				</div>
			</div>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__csrf-php__918-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/csrf-php/">【CSRF】攻撃の流れやPHPでの対策方法を解説【クロスサイトリクエストフォージェリ】</a>
						<span class="p-blogCard__excerpt">Webサイトへのセキュリティ攻撃の１つにCSRF（クロスサイトリクエストフォージェリ）というものがあります。 この記事では、 CSRFの攻撃の流れ 攻撃による影響・被害 PH&#8230;</span>					</div>
				</div>
			</div>
		</div>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【CSRF】攻撃の流れやPHPでの対策方法を解説【クロスサイトリクエストフォージェリ】</title>
		<link>https://kekenta-it-blog.com/csrf-php/</link>
		
		<dc:creator><![CDATA[ケケンタ]]></dc:creator>
		<pubDate>Wed, 06 Dec 2023 22:55:53 +0000</pubDate>
				<category><![CDATA[Webアプリ]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">https://kekenta-it-blog.com/?p=918</guid>

					<description><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__csrf-php__918-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>Webサイトへのセキュリティ攻撃の１つにCSRF（クロスサイトリクエストフォージェリ）というものがあります。 この記事では、 について解説をしていきます。 Webアプリのセキュリティ対策についてしっかり学ばれたい方にはこ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__csrf-php__918-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p class="wp-block-paragraph">Webサイトへのセキュリティ攻撃の１つに<strong>CSRF（クロスサイトリクエストフォージェリ）</strong>というものがあります。</p>



<p class="wp-block-paragraph">この記事では、</p>



<div class="wp-block-group is-style-big_icon_good has-border -border01"><div class="wp-block-group__inner-container">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li><strong>CSRFの攻撃の流れ</strong></li>



<li><strong>攻撃による影響・被害</strong></li>



<li><strong>PHPでWebアプリを制作する際の対策方法</strong></li>
</ul>
</div></div>



<p class="wp-block-paragraph">について解説をしていきます。</p>



<div class="swell-block-capbox cap_box is-style-shadow"><div class="cap_box_ttl"><span><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMzIgNDYuNUgxNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTJoMTZjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyek00MS43IDE1LjlDNDEuMyAxMyA0MCAxMC4zIDM4LjIgOCAzNC41IDMuMiAyOSAuOCAyMy4xIDEgMTQgMS40IDYuNSA4LjkgNiAxOGMtLjMgNiAyLjQgMTEuNyA3LjIgMTUuNC41LjQuOC45LjggMS41djEuNmMwIDIuMiAxLjggNCA0IDRoMTJjMi4yIDAgNC0xLjggNC00VjM1YzAtLjYuMy0xLjIuOS0xLjcgNS4zLTQgOC0xMC42IDYuOC0xNy40em0tNy4xIDEuN2gtLjNjLS43IDAtMS4zLS41LTEuNS0xLjItLjctMy4yLTMuMi01LjctNi40LTYuMy0uOC0uMS0xLjQtLjktMS4yLTEuN3MuOS0xLjQgMS43LTEuMmM0LjQuOCA4IDQuMiA4LjkgOC42LjEuOC0uNCAxLjYtMS4yIDEuOHoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsLightbulb" data-id="0" aria-hidden="true" class="swl-inline-icon"> </span><strong>この記事を読むと分かること</strong></span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>CSRF（クロスサイトリクエストフォージェリ）とは何か？</li>



<li>CSRF攻撃実行までの流れ</li>



<li>CSRFによる被害・影響範囲</li>



<li>PHPアプリ制作におけるCSRF対策</li>
</ul>
</div></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>Webアプリ開発においてセキュリティ対策は必須項目です。対策するべきセキュリティ攻撃はいくつかありますが、この記事では<strong>CSRF（クロスサイトリクエストフォージェリ）</strong>を取り上げて解説をしていきます。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="is-style-bg_stripe wp-block-paragraph">Webアプリのセキュリティ対策についてしっかり学ばれたい方にはこちらの書籍がおすすめです。<br>（<strong>通称：徳丸本</strong>と呼ばれる「Webアプリ開発者必読」とまで言われている書籍です）<br><br><a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNNDQgMkgzMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDJoOS4yTDI0IDIxLjJjLS44LjgtLjggMiAwIDIuOHMyIC44IDIuOCAwTDQyIDguOFYxOGMwIDEuMS45IDIgMiAyczItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PHBhdGggZD0iTTQxIDI3Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS0uOSAyLTIgMkg5Yy0xLjEgMC0yLS45LTItMlYxMWMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMkg5Yy0zLjMgMC02IDIuNy02IDZ2MjhjMCAzLjMgMi43IDYgNiA2aDI4YzMuMyAwIDYtMi43IDYtNlYyOWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsExternalLink" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span>体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践</a><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMTEuNyAxLjQgNi44IDVjLS41LjQtLjggMS0uOCAxLjZ2MjguN2MwIC44LjUgMS41IDEuMiAxLjhsMjQgMTAuM2MxLjMuNiAyLjgtLjQgMi44LTEuOFYxOWMwLS44LS41LTEuNS0xLjItMS44TDEwLjIgNy41bDIuOS0yLjJjLjktLjYgMi0uOCAzLS40bDIwLjYgOC44Yy43LjMgMS4yIDEgMS4yIDEuOFY0Mi45YzAgLjkgMSAxLjMgMS43LjhsMS43LTEuNWMuNC0uNC43LS45LjctMS41VjEzYzAtLjgtLjUtMS41LTEuMi0xLjhMMTYuNy44Yy0xLjctLjctMy42LS41LTUgLjZ6Ij48L3BhdGg+PC9zdmc+)" data-icon="LsBook" data-id="47" aria-hidden="true" class="swl-inline-icon"> </span><br>徳丸 浩／著　SBクリエイティブ／出版│<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl">Amazon</a></p>


<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/alone-php-study/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">PHPはこうして習得した！約１年間の勉強内容【プログラミング独学】</span>
			</a>
		</div>

<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/php-deploy-xserver-for-zip/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">【PHP】エックスサーバーへデプロイする方法【初心者でも簡単！】</span>
			</a>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2025/03/eye-catch__school-php-and-wp__14099-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/school-php-and-wp/">PHPやWordPressを学ぶのにおすすめのプログラミングスクール【７選】</a>
						<span class="p-blogCard__excerpt">僕はこれまで独学でPHPを学習してきました。結論から言えば、それでもPHPを習得することはできました。 しかし、それに費やした累計学習期間は1年ほど。モチベーション&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h2 class="wp-block-heading">CSRF(クロスサイトリクエストフォージェリ)とは？</h2>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2"><div class="cap_box_ttl"><span>CSRF攻撃とは？</span></div><div class="cap_box_content">
<p class="wp-block-paragraph">一般ユーザが攻撃用に用意されたWebサイトへアクセスすることで、<strong>攻撃対象のサーバーへ不正なリクエストが送信・実行されてしまう攻撃手法</strong></p>
</div></div>



<p class="wp-block-paragraph">CSRF攻撃により、攻撃対象のサーバー、例えば掲示板サイトなどで、ユーザが意図しない投稿が行われてしまう、あるいは銀行口座から不正送金が行われてしまうといった被害が生じます。</p>



<h2 class="wp-block-heading">CSRF攻撃の流れ</h2>



<p class="wp-block-paragraph">初めてCSRFという言葉を聞く方にとってはなかなかピンと来ないかもしれません。</p>



<p class="wp-block-paragraph">そこで、実際に<strong>どういった流れ</strong>で、<strong>どういった攻撃が実行されるのか</strong>を具体例を交えてお伝えしようと思います。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2" data-colset="col3"><div class="cap_box_ttl"><span>CSRF攻撃の流れ</span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-num_circle -list-under-dashed">
<li><strong>悪い人（攻撃者）</strong>が「トラップ用のWebサイト」を用意する</li>



<li><strong>一般ユーザ</strong>が普段から利用しているサイトへログインをし、その後ログアウトをしないままサイト（＝攻撃対象のサイト）を閉じる</li>



<li><strong>一般ユーザ</strong>が１で用意された「トラップ用のWebサイト」へ、（罠と気が付かずに）アクセスする</li>



<li>「トラップ用のWebサイト」から「攻撃対象のサイト」へ<strong>一般ユーザ</strong>が意図していないリクエスト（コメント投稿など）が送られる</li>
</ul>
</div></div>



<p class="wp-block-paragraph">上記を、以下のような具体的な人物やサイトに置き換えて、再度攻撃の流れをお見せします。</p>



<p class="is-style-balloon_box2 wp-block-paragraph">一般ユーザ　　　　⇒　Aさん<br>攻撃対象のサイト　⇒　銀行サイト</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2" data-colset="col3"><div class="cap_box_ttl"><span>CSRF攻撃の流れ（具体例）</span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-num_circle -list-under-dashed">
<li><strong>悪い人（攻撃者）</strong>が「トラップ用のWebサイト」を用意する</li>



<li><strong>Aさん</strong>が「銀行サイト」へログインをする。そして、ログアウトせずに「銀行サイト」を閉じる。</li>



<li><strong>悪い人</strong>から<strong>Aさん</strong>宛てに偽物のメールが届く（いわゆるフィッシング詐欺）</li>



<li><strong>Aさん</strong>が、偽物のメールに記載されていたリンクをクリックし、１で用意された「トラップ用のWebサイト」へアクセスする</li>



<li>すると「トラップ用のWebサイト」から「銀行サイト」へ【<strong>Aさん</strong>の口座から<strong>悪い人</strong>の口座へ10万円を送金する】というリクエストが送られる</li>



<li><strong>悪い人</strong>は10万円をゲットする</li>
</ul>
</div></div>



<p class="wp-block-paragraph">このように、Aさん（一般ユーザ）が気が付かない内に、不正操作を行わせてしまうのがCSRF攻撃です。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/真顔-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/真顔-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p><strong>気づかれない内に不正な操作が実行されてしまう</strong>というのが恐ろしいですね……。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">CSRFの影響・被害</h2>



<p class="wp-block-paragraph">具体例でCSRFがどのような攻撃なのかというイメージを掴めたところで、CSRFによる被害や影響範囲についてお伝えをしたいと思います。</p>



<p class="wp-block-paragraph">前提として、本記事では</p>



<p class="is-style-stitch wp-block-paragraph"><strong>どこまで影響が及ぶのか</strong>、またそれによって<strong>どのような被害が生じるか</strong></p>



<p class="wp-block-paragraph">という観点から整理をさせて頂きます。</p>



<h3 class="wp-block-heading">影響範囲</h3>



<div class="swell-block-capbox cap_box is-style-small_ttl" data-colset="col3"><div class="cap_box_ttl"><span>CSRF攻撃の影響範囲</span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-bad_list -list-under-dashed">
<li>Webアプリ</li>



<li>サーバー</li>
</ul>
</div></div>



<p class="wp-block-paragraph">まず<strong>Webアプリ</strong>についてですが、前述した例では銀行サイトのログイン状況が関連していましたが、ログイン機能の有無は実は関係ありません。</p>



<p class="wp-block-paragraph">例えば、ログイン機能が必要のない掲示板サイトなどに対しても、同様の流れで「不正投稿」が可能となります。</p>



<p class="wp-block-paragraph">また、Webアプリと言っていますが、もう少し初学者の方向けにかみ砕いて言うと、</p>



<p class="is-style-sticky_box wp-block-paragraph"><strong><span class="marker-under">PHPなどのサーバーサイド言語などによって、ユーザの操作に応じて処理を行うサイト</span></strong></p>



<p class="wp-block-paragraph">そのすべてについて、CSRFの影響が及ぶ可能性があると言えます。</p>



<p class="wp-block-paragraph">悪い人たちは、一般ユーザがそのときまさに使用しているブラウザを勝手に拝借し、Webアプリが持つ動的な処理部分を利用して悪事を働いているというわけです。</p>



<p class="wp-block-paragraph">次の<strong>サーバー</strong>については、別のセキュリティ攻撃である<strong>Dos攻撃</strong>という、言うなれば<strong>連続でサーバーに命令を出して疲れさせる攻撃</strong>の影響があります。</p>



<p class="wp-block-paragraph">具体的には、CSRFによって<strong>掲示板サイトへ大量の不正な書き込みをする</strong>ことにより、サーバーを落とすということが可能です。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>DoS攻撃に関してですが、金曜ロードショーで某ジブリ映画が放映されるとき、某SNSのエンジニアの方々がサーバーが落ちないよう準備をしているそうです。（一般ユーザが合言葉を一斉に投稿するため）<br>DoS攻撃ではありませんが、つまりは大量の投稿が一気に発生するとサーバーが疲れて（落ちて）しまうということなんですね。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h3 class="wp-block-heading">被害</h3>



<div class="swell-block-capbox cap_box is-style-small_ttl"><div class="cap_box_ttl"><span>CSRF攻撃による被害</span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-bad_list -list-under-dashed">
<li>意図せず不正リクエストを送信させられたユーザに対して、「不正リクエストを送信した攻撃者」という誤解が生じる</li>



<li>CSRFを利用したDoS攻撃によってサーバーが落ちる（＝サービス停止）</li>



<li>不正送金など一般ユーザへ実質的な損害が発生する</li>
</ul>
</div></div>



<p class="wp-block-paragraph">後者２つはおおよそイメージが掴みやすいかと思いますが、1つ目については補足をさせて頂くと、</p>



<p class="wp-block-paragraph">不正リクエストを送信するのは、あくまでも攻撃者のブラウザからではなく、一般ユーザのブラウザからとなります。</p>



<p class="wp-block-paragraph">そのため、Webアプリ側のログには、一般ユーザ側の情報が残ってしまい、結果として<strong><span class="swl-marker mark_yellow">一般ユーザが「攻撃者」だと認識されてしまう</span></strong>のです。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>全く身に覚えがないのに、気が付けば悪者扱いされてしまうかもしれないのです。<br>しかし、Webアプリを開発する側でしっかりと対策を施すことで<strong>CSRFを防げる確率は大きく向上</strong>します。<br><strong>一般ユーザの方々に安全にWebアプリを使用してもらうため</strong>にも、Webアプリ開発をする方はしっかりと知識を身に付けて対策をしましょう。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">CSRF攻撃の対策（PHP）</h2>



<h3 class="wp-block-heading">トークンを利用</h3>



<p class="wp-block-paragraph">PHPでアプリ開発をする際、CSRF攻撃への最も一般的な対策として知られているのが、<strong><span class="marker-under">トークンを利用する方法</span></strong>です。</p>



<p class="is-style-big_icon_point wp-block-paragraph">トークンとは、<strong>ランダムな文字の組み合わせによって生成された文字列のこと</strong>です。</p>



<p class="wp-block-paragraph">簡単にご説明すると、ユーザからのリクエストを受け取る際に、トークンをチェックすることで、<strong>そのリクエストが本当に正しい（＝不正ではない）リクエストなのかを確認</strong>し、CSRFを防ぐことが可能です。</p>



<p class="wp-block-paragraph">具体的には以下のような流れで<strong>トークンの生成</strong>と<strong>トークンのチェック</strong>を行います。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2"><div class="cap_box_ttl"><span>トークンによるリクエストチェック</span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-num_circle -list-under-dashed">
<li>ユーザ操作によるリクエストの送信時にトークン（合言葉）をランダム生成する</li>



<li>リクエストと共に、トークンをセッションに格納かつPOST送信する</li>



<li>受取り側で、受け取ったトークンとセッションに格納されているトークンを照合する</li>



<li>一致していれば正規リクエストとして正常処理し、</li>



<li>不一致なら不正リクエストとして拒否する</li>
</ul>
</div></div>



<p class="wp-block-paragraph">これを具体的なコードに書き起こすと以下のようになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>// トークンを生成
$token = bin2hex(random_bytes(32));

// トークンをセッションに格納
$_SESSION[&quot;token&quot;] = $token;

&lt;form action=&quot;宛先パス&quot; method=&quot;post&quot;&gt;

	// 隠したinputタグにトークンを持たせ、POST送信時に他の入力値と共に送信する
	&lt;input type=&quot;hidden&quot; name=&quot;token&quot; value=&quot;&lt;?php echo $_SESSION[&quot;token&quot;]; ?&gt;&quot;&gt;
  
	// ---------------------------------  
	// --- 入力フォーム関係のタグなど ---
	// ---------------------------------  

	&lt;input type=&quot;submit&quot; name=&quot;back&quot; value=&quot;戻る&quot; /&gt;
  &lt;input type=&quot;submit&quot; name=&quot;send&quot; value=&quot;送信&quot; /&gt;
&lt;/form&gt;</code></pre></div>



<h4 class="wp-block-heading">解説</h4>



<p class="wp-block-paragraph">まず、ここでランダムな文字列であるトークンを生成しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>// トークンを生成
$token = bin2hex(random_bytes(32));</code></pre></div>



<p class="has-border -border01 is-style-big_icon_point wp-block-paragraph"><strong>random_bytes()</strong>はランダムなバイト列を生成する関数で、暗号学的に安全なため、生成されたデータは第三者に推測されない性質を持ちます。<br><br><strong>bin2hex()</strong>は引数で渡した文字列（バイナリデータ）を16進表現に変換する関数で、上記ではrandom_bytes()によって生成したランダムな文字列を、bin2hex()によって16進数に変換しています。<br><br>この２つの関数の組み合わせによって、ランダムな文字列を生成するという流れです。</p>



<p class="wp-block-paragraph">続いて、<strong>生成したトークンをセッションに格納</strong>します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>// トークンをセッションに格納
$_SESSION[&quot;token&quot;] = $token;</code></pre></div>



<p class="wp-block-paragraph">最後に、POST送信をする際にトークンを一緒に送信するため、HTMLのformタグ内に、<strong>トークンを持たせたinputタグ</strong>を配置します。</p>



<p class="is-style-icon_info wp-block-paragraph">このとき、トークンの情報がサイト上に表示されては困るため、<strong><span class="marker-under">inputタグのtypeをhiddenとすることで情報を隠蔽</span></strong>しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP" data-line="4-5"><code>&lt;form action=&quot;宛先パス&quot; method=&quot;post&quot;&gt;

	// 隠したinputタグにトークンを持たせ、POST送信時に他の入力値と共に送信する
	&lt;input type=&quot;hidden&quot; name=&quot;token&quot; value=&quot;&lt;?php echo $_SESSION[&quot;token&quot;]; ?&gt;&quot;&gt;
  
	// ---------------------------------  
	// --- 入力フォーム関係のタグなど ---
	// ---------------------------------  

	&lt;input type=&quot;submit&quot; name=&quot;back&quot; value=&quot;戻る&quot; /&gt;
  &lt;input type=&quot;submit&quot; name=&quot;send&quot; value=&quot;送信&quot; /&gt;
&lt;/form&gt;</code></pre></div>



<p class="wp-block-paragraph">このようにトークンを利用することで</p>



<p class="is-style-icon_good wp-block-paragraph">リクエストが正しい送信元によるものかどうかを確認することが可能</p>



<p class="wp-block-paragraph">となります。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>トークンとは言うなれば合言葉と同じです。<br><strong>合言葉を知っている人＝正規のリクエストしか受け付けないようにすることで、不正リクエストを送信してくるCSRF攻撃の対策となる</strong>のです。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h3 class="wp-block-heading">リファラーをチェックする</h3>



<p class="wp-block-paragraph">次に、HTTPヘッダの情報の１つであるリファラを利用して、不正リクエストを弾く方法をご説明します。</p>



<p class="is-style-big_icon_caution wp-block-paragraph">理由は後述しますが、この方法はあくまで<strong>保険的な位置づけ</strong>となるため、確実にCSRFを防げるというものではありません。前述したトークンでリクエストをチェックする方法と組み合わせることで、<strong>防げる確率が上がる</strong>という風にお考え下さい。</p>



<p class="wp-block-paragraph">そもそもHTTPヘッダとは、</p>



<p class="wp-block-paragraph">Webサイトを表示する際にやり取りされる情報の１つで、この中に表示するページのコンテンツタイプであったり、Cookieに含まれる情報などが記載されている、言うなれば説明書的なものです。</p>



<p class="wp-block-paragraph">この中にリファラーという、<strong>直前までいたWebサイトのURLが記載されている情報</strong>が含まれています。</p>



<p class="wp-block-paragraph">つまり、リファラーを確認することで、リクエストを送信してきた人（ブラウザ）が、<span class="marker-under"><strong><span class="swl-marker mark_yellow">本来通るべきページをきちんと通ってそのリクエストを送信しているかどうかが判別可能</span></strong></span>となります。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>ただし、ここで<strong>注意点</strong>があります。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="is-style-big_icon_caution wp-block-paragraph">リファラーは、<strong>必ずしも毎回記載されているわけではなく</strong>、さらにやろうと思えば<strong>リファラー自体を変更することも可能</strong>です。つまりリファラーには、<strong><span class="swl-marker mark_yellow">その情報が正しいという保証があるわけではなく、安心して信用していいというものではない</span></strong>ということです。</p>



<p class="wp-block-paragraph">この節の冒頭でお伝えした<strong>注意書き</strong>は、こうした理由によるものです。</p>



<p class="wp-block-paragraph">実際に使用することでCSRFを防げる確率は高まりますが、確実性は無いため</p>



<p class="is-style-sticky_box wp-block-paragraph"><strong>トークンを利用した対策と併用することが望ましい</strong></p>



<p class="wp-block-paragraph">です。</p>



<p class="wp-block-paragraph">それではここで<strong>リファラーを利用したリクエストチェック方法</strong>について<strong>コードを解説</strong>していきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>// リファラー＝直前にいたWebページの情報を取得
$referer = $_SERVER[&#39;HTTP_REFERER&#39;];

// リファラーからホスト名（ドメイン名）を取得
$referer_host = parse_url($referer)[&#39;host&#39;];

// 自分のサイトのドメインを設定
$host_url = &#39;example.com&#39;;

if(stristr($referer_host, $host_url)){
	// 正常なアクセスだった際の処理
} else {
	// 不正アクセスだった場合の処理
  // （例）エラーページを返すなど
}</code></pre></div>



<h4 class="wp-block-heading">解説</h4>



<p class="wp-block-paragraph">まず、この部分でリファラーを取得しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>// リファラー＝直前にいたWebページの情報を取得
$referer = $_SERVER[&#39;HTTP_REFERER&#39;];</code></pre></div>



<p class="wp-block-paragraph">ここで登場している$_SERVER[&#8216;HTTP_REFERER&#8217;]には、PHPのスーパーグローバル変数の１つでリファラが格納されています。</p>



<p class="wp-block-paragraph">次に、取得したリファラーからドメイン部分を取得します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>// リファラからホスト名（ドメイン名）を取得
$referer_host = parse_url($referer)[&#39;host&#39;];</code></pre></div>



<p class="is-style-big_icon_point wp-block-paragraph"><strong>parse_url()</strong>は引数で渡したURLを解析し、連想配列形式で返す関数です。上記の例では配列名に[’host’]を指定することで、リファラー（URL）からホスト名＝ドメイン名を取得しています。</p>



<p class="wp-block-paragraph">次に自分のサイトのドメインを設定し、リファラーから取得したホスト名と一致するかどうかを検証、正常ならば正規の処理を行い、不一致ならば不正リクエスト用の処理を実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>// 自分のサイトのドメインを設定
$host_url = &#39;example.com&#39;;

if(stristr($referer_host, $host_url)){
	// 正常なアクセスだった際の処理
} else {
	// 不正アクセスだった場合の処理
  // （例）エラーページを返すなど
}</code></pre></div>



<p class="is-style-big_icon_point wp-block-paragraph"><strong>stristr()</strong>は、大文字と小文字を区別せずに、指定文字列内においてキーワードが現れる場所を返す関数です。上記のコードではstristr()を利用して、リファラーのホスト名部分に自分のサイトのドメインが含まれているかを検証しています。<br>※ちなみに関数名が似ているものにstrstr()がありますが、こちらは大文字小文字を区別する仕様になっているため、使用時には注意して下さい。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>リファラーを上手く利用することでCSRF攻撃を防げる確率を高めることが可能です。<br>トークンを利用した対策と組み合わせることでより安全性の高いWebアプリケーションを開発しましょう。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="is-style-icon_info wp-block-paragraph">ここでご紹介した対策がすべてというわけではありません。<br>さらに詳細な対策を知りたいという方は、IPAの「安全なウェブサイトの作り方」をご参照下さい。<br><a href="https://www.ipa.go.jp/security/vuln/websecurity/about.html">https://www.ipa.go.jp/security/vuln/websecurity/about.html</a></p>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">CSRF攻撃の流れや被害・影響、そしてPHPでアプリ開発する際の対策方法についてお伝えをしてきました。</p>



<p class="wp-block-paragraph">今回はお伝えしませんでしたが、CSRF対策についてはこの他にも</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>二要素認証を導入する</li>



<li>リクエストを処理する直前にユーザにパスワード入力を促す</li>
</ul>
</div></div>



<p class="wp-block-paragraph">などの方法もあり、これらを導入することでより安全性の高いWebアプリ開発が可能となります。</p>



<p class="wp-block-paragraph">今回取り上げたCSRF以外にも考慮すべき攻撃手法がいくつも存在します。</p>



<p class="wp-block-paragraph">それらすべてにセキュリティ対策を講じていくことは大きな労力を伴いますが、ユーザに安心して利用してもらうためにも１つ１つ実践していくことが大切です。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>フレームワークを利用すれば効率的なセキュリティ対策も可能となります！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="wp-block-paragraph">他のセキュリティ攻撃の解説記事も作成していくため、ご参考にしていただければと思います。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>最後に、僕が<strong>セキュリティ対策を学ぶ際に利用した書籍</strong>をご紹介させていただきます。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<div id="rinkerid3655" class="yyi-rinker-contents  yyi-rinker-postid-3655 yyi-rinker-img-m yyi-rinker-catid-72 yyi-rinker-catid-32 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://hb.afl.rakuten.co.jp/hgc/g00q072g.bdzz22a5.g00q072g.bdzz326e/Rinker_i_20240325051043?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15472730%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fbook%2Fi%2F19130417%2F&#038;rafcid=wsc_i_is_1047822029026699702" rel="nofollow" class="yyi-rinker-tracking"  data-click-tracking="rakuten_img 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]" data-vars-click-id="rakuten_img 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3163/9784797393163.jpg?_ex=128x128"  width="128" height="128" class="yyi-rinker-main-img" style="border: none;"></a>					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://hb.afl.rakuten.co.jp/hgc/g00q072g.bdzz22a5.g00q072g.bdzz326e/Rinker_t_20240325051043?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15472730%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fbook%2Fi%2F19130417%2F&#038;rafcid=wsc_i_is_1047822029026699702" rel="nofollow" class="yyi-rinker-tracking" data-click-tracking="rakuten_title 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]" data-vars-amp-click-id="rakuten_title 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]" >体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]</a>							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥3,520</span>
															<span class="price_at">(2026/06/09 10:55:28時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																	<li class="amazonkindlelink">
						<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88%EF%BC%BB%E5%9B%BA%E5%AE%9A%E7%89%88%EF%BC%BD-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8-%E6%B5%A9-ebook/dp/B07DVY4H3M?_encoding=UTF8&amp;dib_tag=se&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFijL3FSdFSR0LKwwn0F-UPgnO4-c3ozCV4u_yzlUP10v8KPCWYU6aPhFknUSSGvFmOEDGJ7u_LQxIZPLfydTHs_AWTWMCbT_FAR33FxKzQdND0le-SUmRnBHzYhR8SX_lsohxpGeQkIATYHxCJlB0aHhgwHHQ_THHRbyVElNccJqEMDb7ELZa0F--eVduuVxaejEJv9h9ZmItplRO6lE6VyZJA2Jej7Jvd7bD0ypm9krDwLy3e-Ea8YDtZc7KF66Cb-ea0Tp3FGBrFX0K3fiRlfA.KN6w39aSpN4iCwmHQ6974qNXMN0yNo0Ib071kV4gNk4&amp;qid=1723712413&amp;sr=8-6&amp;linkCode=ll1&amp;tag=kekenta03am0b-22&amp;linkId=3aee57ca3ac28d84506bf0e0db6cec11&amp;language=ja_JP&amp;ref_=as_li_ss_tl" rel="nofollow" class="yyi-rinker-link yyi-rinker-tracking"  data-click-tracking="amazon_kindle 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"  data-vars-amp-click-id="amazon_kindle 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]">Kindle</a>					</li>
								                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFijL3FSdFSR0LKwwn0F-UPgnO4-c3ozCV4u_yzlUP10v8KPCWYU6aPhFknUSSGvFmOEDGJ7u_LQxIZPLfydTHs_AWTWMCbT_FAR33FxKzQdND0le-SUmRnBHzYhR8SX_lsohxpGeQkIATYHxCJlB0aHhgwHHQ_THHRbyVElNccJqEMDb7ELZa0F--eVduuVxaejEJv9h9ZmItplRO6lE6VyZJA2Jej7Jvd7bD0ypm9krDwLy3e-Ea8YDtZc7KF66Cb-ea0Tp3FGBrFX0K3fiRlfA.KN6w39aSpN4iCwmHQ6974qNXMN0yNo0Ib071kV4gNk4&amp;dib_tag=se&amp;keywords=%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3&amp;qid=1723712376&amp;sr=8-1&amp;linkCode=ll1&amp;tag=https://www.amazon.co.jp/PHP%E6%9C%AC%E6%A0%BC%E5%85%A5%E9%96%80-%E4%B8%8A-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A8%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E9%80%A3%E6%90%BA%E3%81%BE%E3%81%A7-%E5%A4%A7%E5%AE%B6-%E6%AD%A3%E7%99%BB/dp/4297114682?dib=eyJ2IjoiMSJ9.74YDItYNn-AHro6XQ1cSslRSHUvp_S8S4MVJtvnW_XswliMGieYQktGbaTJY9E-Qpy3y3roMKB8M-zKI3K7otpqjDxkuoq7ncq-6mLf3BEkcNW05BAHDZZ17WZueAniDY7peSrmp4Ji0L0BkXOaJIBbpqa628I6bjQBED1FQ9V7BJqUJVUUxz6ns2GIHnoSItDTgCRaIpNi9fMcBrt3jqZr1qNJxCmBn8-xPR9N3usFpENEEChvMwvGdHoHu1hjsq6g9GvJDwPPBTwhQvDgXG2KZQ5CBlEx_wQjQy06hFcw.xxCKw6aGhA397JIEATXvL3RNC7D4_k4avRIYczzkjHw&amp;dib_tag=se&amp;keywords=PHP%E6%9C%AC%E6%A0%BC%E5%85%A5%E9%96%80&amp;qid=1723712413&amp;sr=8-6&amp;linkCode=ll1&amp;tag=kekenta03am0b-22&amp;linkId=16a4b7edeeedcc86aef9f0b8c45cc669&amp;language=ja_JP&amp;ref_=as_li_ss_tl-22&amp;linkId=04fec4999f3ec4094bf4fd1126da8b84&amp;language=ja_JP&amp;ref_=as_li_ss_tl" rel="nofollow" class="yyi-rinker-link yyi-rinker-tracking"  data-click-tracking="amazon 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"  data-vars-amp-click-id="amazon 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://hb.afl.rakuten.co.jp/hgc/g00q072g.bdzz22a5.g00q072g.bdzz326e/Rinker_t_20240325051043?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15472730%2F&amp;m=http%3A%2F%2Fm.rakuten.co.jp%2Fbook%2Fi%2F19130417%2F&amp;rafcid=wsc_i_is_1047822029026699702" rel="nofollow" class="yyi-rinker-link yyi-rinker-tracking"  data-click-tracking="rakuten 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]"  data-vars-amp-click-id="rakuten 3655 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 [ 徳丸 浩 ]">楽天市場</a>					</li>
								                											</ul>
					</div>
	</div>
</div>



<p class="is-style-bg_stripe wp-block-paragraph"><a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNNDQgMkgzMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDJoOS4yTDI0IDIxLjJjLS44LjgtLjggMiAwIDIuOHMyIC44IDIuOCAwTDQyIDguOFYxOGMwIDEuMS45IDIgMiAyczItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PHBhdGggZD0iTTQxIDI3Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS0uOSAyLTIgMkg5Yy0xLjEgMC0yLS45LTItMlYxMWMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMkg5Yy0zLjMgMC02IDIuNy02IDZ2MjhjMCAzLjMgMi43IDYgNiA2aDI4YzMuMyAwIDYtMi43IDYtNlYyOWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsExternalLink" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span>体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践</a><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMTEuNyAxLjQgNi44IDVjLS41LjQtLjggMS0uOCAxLjZ2MjguN2MwIC44LjUgMS41IDEuMiAxLjhsMjQgMTAuM2MxLjMuNiAyLjgtLjQgMi44LTEuOFYxOWMwLS44LS41LTEuNS0xLjItMS44TDEwLjIgNy41bDIuOS0yLjJjLjktLjYgMi0uOCAzLS40bDIwLjYgOC44Yy43LjMgMS4yIDEgMS4yIDEuOFY0Mi45YzAgLjkgMSAxLjMgMS43LjhsMS43LTEuNWMuNC0uNC43LS45LjctMS41VjEzYzAtLjgtLjUtMS41LTEuMi0xLjhMMTYuNy44Yy0xLjctLjctMy42LS41LTUgLjZ6Ij48L3BhdGg+PC9zdmc+)" data-icon="LsBook" data-id="47" aria-hidden="true" class="swl-inline-icon"> </span><br>徳丸 浩／著　SBクリエイティブ／出版│<a href="https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=1FQAOXKEGI9HT&amp;dib=eyJ2IjoiMSJ9.ksxMxdA4KTXnYLFgVxMFis4f3XHMUvarmNijcsU4Nmvl3Tud_nU0g7agEl3ercb-Os7uj_I-9w5xejzyw_JwMcs7FC4uVP9jc3sHC7c9ZuDT_gwuJFliueZNV3zuXq4731v-JAlEh4pR64KI-_puhFly0i_zkfDlsH2xTLQWoeNNIM9FkS584d43eeD8-mNtPjbtKK1lmvjecUb-VALfXImg-mACYpqlPWhTawzlYmnCmT85BL5k4gVzrtlErnyRPeFE4qCXwaN884rSGk9l6PGCfVcIoDQOg1lp8Ia-RWA.i4wIGc7KFczkxeNgrmVo03tuk6Fod-K6t-LEHGJtLtE&amp;dib_tag=se&amp;keywords=Web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;qid=1718235109&amp;sprefix=web%E3%82%A2%E3%83%97%E3%83%AA+%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%2Caps%2C186&amp;sr=8-1&amp;linkCode=ll1&amp;tag=kekenta03amaz-22&amp;linkId=dc5df2a77d4a028f4519e6b2a07ffb84&amp;language=ja_JP&amp;ref_=as_li_ss_tl">Amazon</a></p>



<p class="wp-block-paragraph">こちらの書籍は通称<strong>徳丸本</strong>と呼ばれており、Webセキュリティの第一人者である徳丸浩さんが手がけられている書籍です。<strong>Webアプリを開発する方</strong>や<strong>Webアプリケーションのセキュリティ対策を徹底的に学びたい方</strong>にとてもオススメできる一冊です。</p>



<p class="wp-block-paragraph">Webアプリケーション開発において、ある意味セキュリティ対策は技術力以上に重要です。</p>



<p class="wp-block-paragraph">こちらの書籍を読むことでWebアプリケーションにおいて必要なセキュリティ要件も明確となるため、Webアプリ開発に携わる方は必ず目を通しておきたい一冊です。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>それでは最後までお付き合いいただきありがとうございました！<br>また別の記事でお会いできれば光栄です！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__dir-trav-php__1016-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/dir-trav-php/">【ディレクトリ・トラバーサル】概要と対策方法を解説【PHP対策コード】</a>
						<span class="p-blogCard__excerpt">今回はセキュリティ攻撃の１つであるディレクトリ・トラバーサルについて解説をしていきます。 ディレクトリ・トラバーサル攻撃を受けてしまうと、被害内容によっては社&#8230;</span>					</div>
				</div>
			</div>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__sql-inj-php__1106-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/sql-inj-php/">【PHP】SQLインジェクションの原因や攻撃手法【対策コード付き】</a>
						<span class="p-blogCard__excerpt">この記事ではセキュリティ攻撃の１つであるSQLインジェクションについて、その対策方法も含めて解説をしていきます。  この記事で分かること SQLインジェクション攻撃の&#8230;</span>					</div>
				</div>
			</div>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__xss-php__961-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/xss-php/">【XSS】クロスサイト・スクリプティングとは？対策方法も解説【PHP】</a>
						<span class="p-blogCard__excerpt">今回はWebアプリにおけるセキュリティ攻撃の１つであるXSS（クロスサイト・スクリプティング）について解説をしていきます。  この記事を読むと分かること XSS（クロス&#8230;</span>					</div>
				</div>
			</div>
		</div>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
