入力を信頼するな

ここからやっとヤバイところ、要するに本題です。外部のサーバからRSSをとってくるための方法が記事の一番下のほうに書いてあります。

このような“力技”は「別のサーバのファイルの中身を表示したい!」と同じですね。もう少し早く気がつけば良かった。

rss-sample0.php」は次のようになります。(たったこれだけです)

    <?php
    $filename = $_GET['u'];
    $array = file($filename);
    $filenaiyou = join("",$array);
    echo $filenaiyou;
    ?>

これを見て3秒でマズい事に気づけないようでしたら、PHPを使うのをやめた方がいいと私は思います。

つか、このプログラムの意味がわかってやばいことに気づけない人は、Webアプリ自体書いたらだめだろう。
そういえば、AjaSQLを見たときにも相当あれな感じだった。sqliteのデータベースファイルをそのままリクエストパラメータで渡しているとか、OSコマンドインジェクションが可能とか、エスケープ処理が散らばってたりとか。掲示板でいろいろ突っ込んでいたら、かなりad-hocな対策してたみたいだけど。つっても1年くらい前の話なのでほとんど忘れてしまった。つうか、任意のSQLを実行させつつ、secureなプログラムってSQLをparseしないと無理だと思う。というかparseしても怪しい。
あと、以前のバイト先で採用テストで作らせたプログラムを見たことが何回かあるのだけれども、各種エスケープ処理をしていなかったり、エスケープ処理をしていてもチェックボックスやコンボボックスの入力項目は表示した選択項目以外は入力されない前提になってたりすることが多い。まぁ、その辺は初心者だったりするから仕方ない部分はあるのだが。
まぁ、なにがいいたいかというと、Webアプリとか書きたいならとりあえず、クライアントからの入力を信頼しない、ということを最初に学んで欲しいということだ。