いつか作ります RSSフィード

2009-02-04

[]SmartyでXSS脆弱性を100%防ぐ方法 03:08 SmartyでXSS脆弱性を100%防ぐ方法 - いつか作ります を含むブックマーク はてなブックマーク - SmartyでXSS脆弱性を100%防ぐ方法 - いつか作ります SmartyでXSS脆弱性を100%防ぐ方法 - いつか作ります のブックマークコメント

まあ、糞入門レベルなのだが、身近でXSS出しすぎな人が多いので。ちなみに100%は四捨五入した値だ。

class MySmartyWrapper{
  private $smarty;
  function __construct(){
    $this->smarty = new Smarty();
    // その他、各種設定
  }
  function assign($varname, $var){
    return $this->smarty->assign($varname, htmlspecialchars($var));
  }
  function fetch($tpl){
    return $this->smarty->fetch($tpl);
  }
}

アサインした瞬間に全てエスケープされるようにしておけば確実。薄い層を一枚噛ませる。

自分で使っているクラスには、エスケープの有無を切り替えられる&配列要素の再帰的エスケープも可能な処理を追加してある。オブジェクトを扱うのは厳しいが*1

要は「デフォルトが危険、ひと手間かけると安全」なのが悪いのであって、「デフォルトで安全で、危険な事をするにはひと手間かける必要がある」状態にすれば安全性は飛躍的に向上する。

本来はエスケープはテンプレートエンジンの仕事ではあるのだが、安全性の名の下にはこの程度の越権は許容されて然るべき。

追記

http://www.phppro.jp/phpmanual/smarty/variable.default.modifiers.html

$smarty->default_modifier = array('escape', 'nl2br');

Smarty側に機能が存在した。が、バグいっぱい夢いっぱいらしいので、結論としてはこんな糞テンプレートエンジンさっさと捨てようぜ、という事になる。

そろそろたこルカについて一言言っておくか 12:22 そろそろたこルカについて一言言っておくか - いつか作ります を含むブックマーク はてなブックマーク - そろそろたこルカについて一言言っておくか - いつか作ります そろそろたこルカについて一言言っておくか - いつか作ります のブックマークコメント

最初から自明なのだが、掲示板やらコメントやらブログやらでガタガタ抜かしているだけの外野/ワナビー/自己愛傾向の強いゆとりに発言権なんて最初から無く、より影響力の強い絵を描き、曲をつけ、動画にした奴だけが発言権を持つという事がはっきりと明らかになった。マグロ(笑)

絵も描かず動画も作らず曲も作らない人間に発言権は一切ない、そんな修羅の国、それが僕らの望んだweb2.0。当たり前だよね、コミュニティに何の価値も提供できない人間が、コミュニティから価値を認められるわけがない。

物を作る人間が、主張をする方法

ウィル・ライトだったかシドだったか、日本の誰かだったかが、昔こう書いていたのを思い出す。

「ゲームを作る人間がプレイヤーに伝えたい事というのは、開発者が言ってはいけないし、キャラに言わせてもいけない。プレイヤーの口から言わせないといけない」

シムシティをやると「鉄道最高!自動車とか公害撒き散らすだけの糞機械!」と言いたくなる。Civ4をやると「核兵器は恐ろしいから使ってはいけない」と言いたくなる。ダン・クエールもモンテズマもDr.ライトもそんな事は一言は言わないのに。つまりはそういう事。

つまり、ルカにマグロを持たせたかったら、「マグロを持ってるルカって最高!」と自分で言うのではなく、見た人間が「マグロを持ってるルカって最高!」と言うような何かを作らなければいけない、というわけだ。

*1:オブジェクト渡しの場合も、マジックメソッドを上手く使うと9割方は何も考えずに可能なのだが

y_arimy_arim2009/02/09 09:49ユリイカくんだりで小理屈こね回してる自分が糞馬鹿に思えてきましたね。>コミュニティに何の価値も提供できない人間が、コミュニティから価値を認められるわけがない

新着エントリは上に追加。コメントは「はてなユーザのみ」、公開設定はパブリック (だれでも閲覧ができます)。