PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。
XSS【クロスサイトスクリプティング】は、 ソフトウェアのセキュリティホールの一つで、Webサイトに脆弱性が あることからその脆弱性を利用し攻撃する手法です。 主に、入力フォームなどから悪意あるスクリプトを挿入し 該当ページを閲覧したブラウザ上でそのスクリプトを実行します。
Q&A
2回答
1836閲覧
総合スコア19
0グッド
2クリップ
投稿2014/10/23 00:19
0
2
PHPのネイティブの機能だけではXSS攻撃を防げないという意見を聞きました。 XSS攻撃の例で、htmlspecialchars()やhtmlentites()を突破するようなケースを教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
質問へのコメント
回答2件
PHPのネイティブの機能だけではXSS攻撃を防げない
というのがどういうことなのかわかりませんが htmlspecialchars だけでは防げない例としてよくあげられるのは次のようなものな気がします。
lang1<?php 2$url = "javascript:alert('oreore')"; 3?> 4<!DOCTYPE html> 5<html lang="ja"> 6<head> 7 <meta charset="utf-8"> 8 <title></title> 9</head> 10<body> 11 <a href="<?= htmlspecialchars($url, ENT_QUOTES, 'UTF-8') ?>">XXX</a> 12</body> 13</html>
lang
1<?php 2$url = "javascript:alert('oreore')"; 3?> 4<!DOCTYPE html> 5<html lang="ja"> 6<head> 7 <meta charset="utf-8"> 8 <title></title> 9</head> 10<body> 11 <a href="<?= htmlspecialchars($url, ENT_QUOTES, 'UTF-8') ?>">XXX</a> 12</body> 13</html>
投稿2014/11/27 01:00
総合スコア4514
たとえばUTF-7によるXSS攻撃ですが、以下の例では、JavaScriptのタグを洗浄できていません。
lang1$str = "+ADw-script+AD4-alert('Dangerous+ACE')+ADsAPA-/script+AD4-"; 2header("Content-Type: text/html; charset=UTF-7"); 3 4// htmlentities() 5echo htmlentities($str,ENT_COMPAT | ENT_HTML401, 'UTF-8') . "\n"; 6// htmlspecialchars() 7echo htmlspecialchars($str, ENT_COMPAT | ENT_HTML401, 'UTF-8') . "\n"; 8
1$str = "+ADw-script+AD4-alert('Dangerous+ACE')+ADsAPA-/script+AD4-"; 2header("Content-Type: text/html; charset=UTF-7"); 3 4// htmlentities() 5echo htmlentities($str,ENT_COMPAT | ENT_HTML401, 'UTF-8') . "\n"; 6// htmlspecialchars() 7echo htmlspecialchars($str, ENT_COMPAT | ENT_HTML401, 'UTF-8') . "\n"; 8
strip_tags()も必須ですね。
投稿2014/10/24 02:30
総合スコア36
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
まだベストアンサーが選ばれていません
アカウントをお持ちの方はログイン
15分調べてもわからないことはteratailで質問しよう!
ただいまの回答率85.48%
質問をまとめることで思考を整理して素早く解決
テンプレート機能で簡単に質問をまとめる
XSS対策としてのAhtmlspecialchars()とhtmlentites()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。