【问题标题】:Sanitize HTML::Mason arguments in the handler?在处理程序中清理 HTML::Mason 参数?
【发布时间】:2012-04-18 14:32:39
【问题描述】:

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

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

有没有一种好方法可以在处理程序级别清理所有输入到 HTML::Mason 中?

【问题讨论】:

  • Ick,为此 is surprisingly optimistic 提供的指导。 This site 提供了一些额外的指导。您是否尝试过使用HTML::Mason::CGIHandler
  • 你能发布一个不起作用的最小代码示例吗?
  • 是的,我尝试了HTML::Mason::DGIHandler,但在与POSTGET 数据一起使用时会导致问题。我能够找到一个工作补丁,但我认为它不是最佳的。我会尽快发布回复。

标签: security sanitization mod-perl2 mason


【解决方案1】:

所以我使用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::Mason 的正常解析相同的规则。实际的插件如下所示:

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;

同样,这个选项并不如我所愿,但它会起作用。对此“解决方案”的补充和改进也将受到欢迎。

【讨论】:

    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 2017-06-24
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    相关资源
    最近更新 更多