作者: ねこ丸
日時: 2006/6/7(14:45)
  ねこ丸です。

Bruce. writes:

> ボヤキ:猿真似は危険『「Ajax + PHP」でRSSリーダーを作る』で破滅 -
> livedoor Blog(ブログ)
> http://blog.livedoor.jp/mikawajin/archives/50441092.html

  これ見てました^^;
  常用っちゅーかまぁ使う機会は多いですが、ユーザーの入力をそのまま受け
取るようなものはあまり触る機会がないのでその辺は強くはないワタクシめで
ございます。

  PHP の場合はいちばん目立つのは

* register_globals
* allow_url_fopen

  の二項目の設定ですね。

  上はブラウザから渡ってきた query がいきなりグローバル変数としてスク
リプト内にセットされるという、げに恐ろしき機能です。PHP 4.2 以降はデフォ
ルト off ですが、それ以前から動いているスクリプトはあやしいです。
  グローバルでなくたってパラメータをそのまま使うのはどうかっていう話な
のですが、いきなりセットされてしまうというのはかなり強烈です。

  allow_url_fopen はその名の通り、fopen() の引数に URL を取れるという
便利機能なのですが、上との合わせ技がハマるとやばやばです。

  PHP 5 は調べてないんでよく分からないですけど、4 まではオブジェクトの
汚染という概念もないし、知らずに使うと怖いですね。便利なだけに。(フレー
ムワークでガチガチに縛って taint モデルのようなものを実現することは可
能ですが。)Perl の use strict に当たるのは

  まず error_reporting( E_ALL ) しろ

  でしょうか。これやっとくと初期化していない変数をいきなり参照しようと
すると怒られます。その他、コンパイルエラーにはならないがやめた方がいい
使い方を逐一チェックされるので、安心です。(将来的に仕様が変更されるぞ、
なんてのも分かります。)

  XSS 脆弱性については

  とりあえず htmlspecialchars( $foo, ENT_QUOTES ) しとけ

  ですね。高木さんなんかはテンプレートはこれを基本にして生 HTML を吐け
る機能の方をオプションにしろと仰ってますね。確かに普通に使う分にはそれ
で困らないですが、2ch なんかではその意図をちゃんと理解してる人の方が少
数かもしんない(^^;

p.s.  個人的にはこういうのは proxy を通る環境でやった方がいいかなーと
    か思わなくもないですが。いや自分ちの環境なんかもそうですけどね、自
    宅サーバの URL とか referer で丸分かりになっちゃうんで、例えアクセ
    ス制限しててもちょっと気持ち悪いんですよね。透過 proxy 勉強して 
    referer 切らなきゃなーとは思ってるんですけど…。

--
    ねこ丸