Also habe ich das mit HTML::MasonPlugins ausgearbeitet. Dies ist nicht die Lösung, auf die ich gehofft hatte, da es die Argumente nicht bereinigt, bevor sie geparst werden, sondern danach. Wenn beim Parsen von Argumenten ein auswertbares Stück Code vorhanden ist, kann es dennoch Probleme verursachen. Das ist besser als nichts, aber es fühlt sich nicht wie eine echte Lösung an.
Hinzufügen von Plugins zum 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],
);
Plugin Code:$context->args
hat die meisten schweres Heben. In Anbetracht der Eingabe:
?session_id=c45a0309191691cd5b4714c936d0f9a2&foo=bar&baz=pop
wir folgende erhalten in $context->args
:
['session_id', 'c45a0309191691cd5b4714c936d0f9a2', 'foo', 'bar', 'baz', 'pop']
Dies funktioniert auch für POST
Anforderungen und folgt den gleichen Regeln wie HTML :: Mason normalen Parsing. Die eigentliche Plugin sieht wie folgt aus:
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;
Auch diese Option nicht so optimal ist, wie ich wollte, aber es wird funktionieren. Ergänzungen und Erweiterungen dieser "Lösung" wären ebenfalls zu begrüßen.
Ick, die zur Verfügung gestellte Anleitung dafür [ist überraschend optimistisch] (http://www.masonbook.com/book/chapter-9.mhtml). [Diese Seite] (http://www.perl.com/pub/2002/02/20/css.html) bietet einige zusätzliche Anleitungen. Haben Sie versucht, ['HTML :: Mason :: CGIHandler'] (http://search.cpan.org/~drolsky/HTML-Mason-1.48/lib/HTML/Mason/CGIHandler.pm) zu verwenden? – MrGomez
Können Sie ein minimales Code-Beispiel posten, das nicht funktioniert? – benrifkah
Ja, ich habe versucht 'HTML :: Mason :: DGIHandler' und es verursachte Probleme bei der Verwendung mit beiden' POST' und 'GET' Daten. Ich konnte einen funktionierenden Patch finden, finde ihn aber nicht optimal. Ich werde die Antwort in Kürze veröffentlichen. –