車輪を再発明 / koba04の日記 このページをアンテナに追加 RSSフィード

2009-11-29

クロスサイトスクリプティングはhtmlspecialcharsでOK??

先日とあるPHPで作られたウェブアプリのテスト中にこんなことがありました。

そのPHPで作られたウェブアプリは、値をHTML出力する際、「htmlspecialchars($output, ENT_QUOTES)」と指定することで、「"'&<>」をサニタイジングしています。

しかしながらクロスサイトスクリプティングすることが可能でした。

それは何故か???

答えはhref属性に指定されているjavascript内に値を出力されていたからでした。

具体的には下みたいな感じです。

  • 下記のようなコードあります。($outputはhidden値によりPOSTされた値)
<a href="javascript:hoge('<?php htmlspecialchars($output, ENT_QUOTES) ?>')">リンク</a>
  • $outputの値に、「');alert('XSS」を指定します。
  • これをHTMLで出力すると下記のようになります。
<a href="javascript:hoge('&#039;);alert(&#039;XSS')">リンク</a>
  • これだとhoge関数のみしか実行されなさそうですが、実際には埋め込んだalert関数も実行されてしまい、XSSが成功してしまいます。(hoge関数が定義されていないとエラーになります。)

つまり、上記のようなHTML属性値に記述されたjavascriptコード内では、HTMLコードにサニタイジングされた値は元の値(「'」は「'」)として評価されます。

ということで場所によってはサニタイジングしていればOKというわけではないのでした。

ちなみにscriptタグ内では、HTMLコードはそのままHTMLコード(「'」は「'」)としてそのまま評価されるため、上記のようなXSSは発生しません。

またまだ勉強中ですので、間違いなどあればご指摘ください。

2009-09-26

つぶやいた〜

Twitterを左側に貼ってみました。

その際自分だけかもしれませんが、迷ったので手順を書いてみます。

  1. まずは、Twitterにアクセス。
  2. 「設定」→「(あなたのWEBサイトにもTwitterを表示させよう)」をクリック。
  3. ウィジェットを選んでください」の画面で「MySpace」を選択。
    • Facebook」でも大丈夫かもしれませんが、「自分のサイト」は、その後作成されるコードにscriptタグがあるためかうまく追加できませんでした。
      • →ここで詰まりました。。
  4. 「 MySpaceウィジェット」を選択。
  5. ソースコードが表示されるのでコピーして保存しておく。
    • この際、ソースコード中の箇所にある「width="290"」を「width="210"」に変更しておく。
  1. はてなダイアリーの管理画面を開く。
  2. 左側メニューの「デザイン」→「かんたんタブ」→「サイドバー」→「ブログパーツ」を選択。
  3. ソースコードを貼り付けるダイアログボックスが表示されるので先ほど保存したソースコードをコピーする。

こんな感じで出来ました。

2009-05-17

mixiアプリ

http://developer.mixi.co.jp/appli

mixiアプリなるものが公開されていたのが興味本位で色々いじってみました。

そのままjavascriptで書いたのですが、相変わらず苦手です。

無名関数がどうも・・・。

とりあえずマイミクの人のコミュニティ一覧を取得してみました。

マイミク一覧を取得するリスエストを投げる(ループで人数分)

そのマイミクが所属しているコミュニティ一覧を取得

名前、画像などを出力

としているのですがかなり重いです。。

コードはおそまつ過ぎて見せられません・・。。

まぁそんなことをやりたいわけではないのですが、やりたいことはイマイチ仕様を理解していないためやり方がわからず。。

また気が向いたときにでもチャレンジします。。

一人暮らしのときはこういうのを時間を気にせず出来たのですが、今は一緒に住んでいる人がいるためあまりがっつり出来ないのが残念です。

結婚している人はどういう風に勉強したりいろんなモノを作ったりする時間をとっているのでしょうか??