首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清理处理程序中的HTML::Mason参数?

清理处理程序中的HTML::Mason参数?
EN

Stack Overflow用户
提问于 2012-04-05 04:19:56
回答 1查看 298关注 0票数 1

我使用的是HTML::Mason,在最近的一次安全审计之后,我发现我们的一些软件容易受到头注入的攻击。具体来说,这与session_id参数有关,该参数通过GETPOST请求传递。

我尝试从自定义处理程序修改我的handler()方法中的环境,但Apache2::RequestRec已经创建,所以它不接受更改。

有没有一种好方法可以在处理程序级别将所有输入整理成HTML::Mason?

EN

回答 1

Stack Overflow用户

发布于 2012-04-12 05:17:42

所以我使用HTML::Mason Plugins解决了这个问题。这不是我希望的解决方案,因为它不会在参数被解析之前对它们进行消毒,而是在解析之后。如果在参数解析中有一段可利用的代码,它仍然可能导致问题。这总比没有好,但感觉不像是一个真正的解决方案。

向ApacheHandler添加插件的

代码语言:javascript
复制
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完成了大部分繁重的工作。给定输入:

代码语言:javascript
复制
?session_id=c45a0309191691cd5b4714c936d0f9a2&foo=bar&baz=pop

我们在$context->args中获得了以下内容

代码语言:javascript
复制
['session_id', 'c45a0309191691cd5b4714c936d0f9a2', 'foo', 'bar', 'baz', 'pop']

这也适用于POST请求,并且遵循与HTML::Mason的正常解析相同的规则。实际的插件如下所示:

代码语言:javascript
复制
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;

再说一次,这个选项并不像我想要的那样是最优的,但它可以工作。对此“解决方案”的添加和增强也将受到欢迎。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10018657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档