LoginSignup
2
8

More than 5 years have passed since last update.

【PHP】XSSとは-----対策

Last updated at Posted at 2017-04-07

XSSとは

XSS定義(WiKi)

クロスサイトスクリプティング(cross site scripting)とは、Webアプリケーションの脆弱性もしくはそれを利用した攻撃。脆弱性をツリー型に分類するCWEではXSSを不適切な入力確認(CWE-20)によるインジェクション(CWE-74)のひとつとして分類している(CWE-79)。略称はXSS。かつてはCSSという略称も使われていたが、Cascading Style Sheetsと紛らわしいのでこの略称はあまり使われなくなった。「クロスサイト(サイト横断)」という歴史的な名称である。

おすすめ:XSS脆弱性とXSS攻撃の詳細

インジェクション箇所(WiKi)

HTML内には攻撃者が悪意のあるスクリプトをインジェクションし得る箇所として以下のものがある:
1.フォームなど変数の値を入力可能な場所

2.スクリプト文
 ①<script></script>の内部、およびのURLのリモート参照
 ②タグのstyle属性およびイベントハンドラ属性中のスクリプト記述。
  具体的には<div style="...;z:expression(...);...">や、<span onmouseover="...">等。
 ③URLとして「javascript:(Javascript文)」の形式(javascryptスキーム)を利用してjavascryptを注入することができる。

3.URLを属性値として取れる要素、およびそこでのスクリプト直接記述。
  具体的にはa要素のhrefとimg、frameとiframeのsrc属性。

XSSへの対策

エスケープ処理(htmlspecialchars)

ユーザからフォームの値を取得した際、htmlで特別な意味を持つ記号を以下のように別の記号に置き換えるのはXSSへの対策方法である。

< → &lt;
> → &gt;
& → &amp;
" → &quot;
' → &apos;

XSS対策(ENT_QUOTES)
function XSS_escapeForHTML($value) {
    if (is_array ( $value )) {
        $Result = array ();
        foreach ( array_keys ( $value ) as $key ) {
            $Result [$key] = $this->XSS_escapeForHTML ( $value [$key] );
        }
        return $Result;
    } else {
        $value = htmlspecialchars ( $value, ENT_QUOTES, 'EUC-JP', false ); 
        // $value = nl2br($value);
        return $value;
    }
}

参考:
XSS(WiKi)
クロスサイトスクリプティング(XSS)

---I Love PHP (。・ω・。)ノ♡

2
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
8