WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:CGIモジュールを使った際のタグ無効の仕方

0:[投稿] atusi [2003/02/12 18:05 ][環境:windows2000 UNIX]

よく
s/</&gt/g;
s/</&lt;/g;

のような形でタグを無効にしますが、

CGIモジュールを使って
下のような形でHTMLのフォームからの入力を取得した場合、

use CGI;
my $query = new CGI;
my $file = $query->param('file');

# タグ無効
$file =~ s/</&gt/g;
$file =~ s/</&lt;/g;

こうやってタグ無効には出来ると思うのですが、
変数がたくさん在る際は手作業だと面倒なので出来れば自動的に
タグ無効化をしたいのですが、CGIモジュール自体にはそういった
機能はあるのでしょうか?

こちらのサイトによるとモジュール HTML::TokeParser の get_text メソッド,または get_trimmed_text メソッドでタグ削除が出来るそうなのですが、
http://www.din.or.jp/~ohzaki/perl.htm#Tag_Remove

やはりこういった別モジュールを使うなどの手法しか無いでしょうか?


1:[回答] andi [2003/02/12 21:10 ]

今手元にPerl環境が無いので確認はできませんが、こんな感じで出来ませんか?

my $file = $query->escapeHTML($query->param('file'));


2:[回答] ふじ [URL] [2003/02/12 21:30 ]

HTMLエスケープは CGI モジュール内の escapeHTML でできますが、
すべての入力に対して自動でエスケープをする方法はないようです。

自前ですべての入力を置換するなら以下のように。

use CGI;                                                        
my $q = CGI->new;                                                                                          

foreach my $name($q->param){                                                                              
   my @vals = $q->param($name);                                                                          
   foreach my $val(@vals){                                                                                
       $val = $q->escapeHTML($val);                                                                          
   }                                                                                                      
   $q->param($name, @vals);                                                                              
}                                                                                                        

$q->param をいったん配列に受けているのは、複数入力可能な(チェックボックスなどの)フォームに対応するためです。

これだと、ファイルアップロードをしたりするとおかしくなるかも。
その場合は、ファイルアップロードに使う param 名だけスキップするように
書き換えてください。


mod_perl なら、Apache::TaintRequest を使うという手もあります。
http://www.perl.com/pub/a/2002/02/20/css.html


3:[完了] atusi [2003/02/22 22:56 ]

遅ればせながらすいません。
どうもありがとうございました。

モジュールを色々と「使いこなす」のは難しいですね。
もちろん、私に実力が無いせいだとは思うのですが・・・

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World