■ 無限フォームからのPOST送信の弊害
Last Update: 2003-12-09 (Tue) 17:26
私も バッドノウハウ という奴に毒されているのか、Perl のスクリプトを書く時は大抵が以前作ったコードを何の疑いも無くコピペしており、内容の完全性については結構おろそかにしてしまっている場合が多々あります。
というわけで、前々から疑問に思っていた「FORM から POST する量には制限はないの?」について調べてみた所、結構嫌な結果になってしまいました。
結論から言うと、合計1.3MB程度でINPUTフィールドが1万個あるフォームがすんなり送信出来ました。
これはつまり、POST されたデータを受け取る段階で、サイズもフィールドの数も考慮しないで処理を行った場合、無駄に1万回のループを発生させる事が可能という事を示しております。1万個以上は試していないのですが、何となくメモリの許す限りループしそうな気はします。Perl だし。
うちのショボイスペックのサーバで検証した所、このフォームを送信した場合の処理速度は、何もない時に比べて200倍以上の時間が掛かりました。途中で jcode なんかで文字コードを変換したりすると、もっと時間が掛かってしまう事でしょう。
フィールド数を数えて、ある程度まで行ったらエラーを出すのと、length 等をチェックして、異常に大きい場合はエラーを出す、両方の対策をした方がいいでしょう。片方だけ対策しても駄目。
ざっと調べてみた所、この脆弱性(?)が発生すると考えられるデコード処理を行っている方は 結構いそう な感じです。お気付きの通り私も対策をしていませんでした。
ついでに言うと、Cookie の処理についても同じようにループ処理させている場合、やっぱり沢山ループしてしまうかもしれません。未検証なので不明ですが、気を付けるに越した事はないですね。
ところで、FORM から POST する量に制限はないんですか?:-)
ちなみに箱庭諸島はループ処理を行っていないので、箱庭管理人の方は安心して下さい。(笑
△トップ
| コメント (3)
| トラックバック(0)