*img.inc.phpで指定されるファイル名のチェックがされていない -ページ: BugTrack -投稿者: [[reimy]] -優先順位: 重要 -状態: 提案 -カテゴリー: プラグイン -投稿日: [[2002-06-30]] (日) 23:14:01 -バージョン: **メッセージ -指定されたファイル名のチェックがされていない --gif、jpg、jpeg、pngに限定すべき、aviなど動画はいらんでしょ。cgiを許すとやばそうな… --ファイル名に使えない文字がないかのチェック→XSS脆弱性の可能性も ---- -が~ん。そんなのが残っていたのか。。。hackだhack!! -- [[seagull]] SIZE(1):2002-06-30 (日) 23:14:54 -。。。ってか、URLエンコードすべき所をHTMLエンコードしてるし。。一回ふやかさないと。。 -- [[seagull]] SIZE(1):2002-06-30 (日) 23:26:13 -URLはファイル名云々とは関係ない話なので、文字種検査しては行けません。単に、URLエンコードしてからHTMLエンコードを(この順番で)すればいいだけなんですけどね。(HTMLエンコードは一応なされているので、XSSにはならないです) -- [[seagull]] SIZE(1):2002-07-01 (月) 00:36:05 -% ; ) ( +などはそのまま通すみたいです。 -- [[reimy]] SIZE(1):2002-07-01 (月) 00:43:15 -URLエンコードしてませんからね。それらの文字がURLに入っていた場合、XSSや誤動作を回避するのは呼ばれた側の責任です。 -- [[seagull]] SIZE(1):2002-07-01 (月) 00:48:09 -あ~でも、思った通りのURLが渡せないのは問題だなぁ~ -- [[seagull]] SIZE(1):2002-07-01 (月) 00:48:39 -とりあえず、画像以外が貼られるのを防ぐための暫定処置 -- [[reimy]] <? // $id$ function plugin_img_convert() { if(func_num_args()!=2) { return; } $aryargs = func_get_args(); $url = $aryargs[0]; $align = strtoupper($aryargs[1]); if($align == 'R' || $align == 'RIGHT') { $align = 'right'; } else if($align == 'L' || $align == 'LEFT') { $align = 'left'; } else { return "<br style=\"clear:both\">"; } if(preg_match("/^http:\/\/(\S+?)(\.jpg|\.jpeg|\.gif|\.png)$/si", $url) == false) return; return "<div style=\"float:$align;padding:.5em 1.5em .5em 1.5em\"><img src=\"$url\" alt=\"\" /></div>"; } ?> #comment