HTML::MasonPluginsを使用してこれを処理しました。これは私が望んでいた解決策ではありません。なぜなら、それらが解析される前に引数をサニタイズしないからです。引数の構文解析に悪用可能なコードがある場合、それでも問題が発生する可能性があります。これは何もないより優れていますが、真の解決策のようには感じられません。 ApacheHandlerへ
追加プラグイン:
my $ah = HTML::Mason::ApacheHandler->new (
...
session_use_cookie => 0,
args_method => "mod_perl",
session_args_param => 'session_id',
plugins => [PolMaker::Plugins::SanitizeArgs->new],
);
プラグインコード:$context->args
は重い物を持ち上げるのほとんどを行います。入力を考える:
?session_id=c45a0309191691cd5b4714c936d0f9a2&foo=bar&baz=pop
我々は$context->args
で、次を得る:
['session_id', 'c45a0309191691cd5b4714c936d0f9a2', 'foo', 'bar', 'baz', 'pop']
これもPOST
要求のために働く、およびHTML ::メイソンの通常の構文解析と同じ規則に従います。実際のプラグインは次のようになります:
package PolMaker::Plugins::SanitizeArgs;
use base qw(HTML::Mason::Plugin);
my %SANITIZE = (
"session_id" => 1,
## Room for future expansion.
);
sub start_request_hook { ## Executes once per request.
my $self = shift;
my $context = shift;
my @clean_args;
my $next = 0;
foreach my $arg (@{ $context->args }) {
if (defined($SANITIZE{$arg})) {
$next = 1;
} elsif ($next > 0) {
$arg =~ s/[^\w \d\-\.]//g; # Leave words, digits, dashes and periods.
$next = 0;
}
push @clean_args, $arg;
}
@{$context->args} = @clean_args;
}
1;
このオプションも、私が望んだほど最適ではありませんが、うまくいきます。この「解決策」の追加や強化も歓迎されるだろう。
Ick、このための指針は[驚くほど楽観的です](http://www.masonbook.com/book/chapter-9.mhtml)です。 [このサイト](http://www.perl.com/pub/2002/02/20/css.html)では、いくつかの追加ガイダンスが提供されています。 ['HTML :: Mason :: CGIHandler'](http://search.cpan.org/~drolsky/HTML-Mason-1.48/lib/HTML/Mason/CGIHandler.pm)を使ってみましたか? – MrGomez
動作しないコードのサンプルを投稿できますか? – benrifkah
はい、 'HTML :: Mason :: DGIHandler'を試しました。これは' POST'と 'GET'データの両方で使用すると問題を引き起こしました。私は動作するパッチを見つけることができましたが、最適なパッチは見つけられません。私はすぐに回答を投稿します。 –