I've been asked if this script is secure. I believe it is. Can anyone find
any problems with it?

#!/usr/bin/perl -w -t
use strict;
use Apache;
$ENV{GATEWAY_INTERFACE} =~ /^CGI-Perl/ or die "GATEWAY_INTERFACE not Perl!";
my $r = Apache->request();
my %args = $r->args();
my $path = $r->uri;

############################################################################
###
$path  =~ s/\/(.*?)$//; # Strip off the scriptname
my $tmplpath = "template/";  # Setup the template path
my $cont_ext = ".html";  # Allow only content files with this extension
my $tmpl_ext = ".tmpl";  # Allow only template files with this extension
my $template = $tmplpath ."mcti". $tmpl_ext; # Setup the template path
my $page = $args{page} || "index"; # Are we requesting a page or root?
my $title = "Microdyne";  # Default Title of not specified in page
my $debug = 1;
############################################################################
###
my ($content, $pageout, $newtitle, $newtmpl);

($content, $newtitle, $newtmpl) = pullpage( $page . $cont_ext );
if ($newtitle) {$title = $newtitle;}
if ($newtmpl) {$template = $tmplpath . $newtmpl . $tmpl_ext;}
$pageout = readfile( $template );
$pageout =~ s/%%TITLE%%/$title/g;
$pageout =~ s/%%CONTENT%%/$content/g;

pageout($pageout);

############################################
# Spit out the content
############################################
sub pageout {
    my $pageout = shift;
    $r->content_type('text/html');
    $r->header_out( 'Content-Length', length($pageout) );
    $r->send_http_header();

    my $start = 0;
    my $len = 63000;
    while (my $p = substr($pageout, $start, $len)) {
 $start += $len;
 $r->print($p);
    }
    $r->rflush();
}

############################################
# Open content page, and check for options
# checks for tags in format: %%TAG=VALUE%%
############################################
sub pullpage {
    my $file = shift;
    my ($content, $title, $template);
    $content = readfile( $file );

    while ($content =~ m/%%(.*?)=(.*?)%%/) {
 my $key = $1;
 my $value = $2;
 SWITCH: for ($key) {
     /TEMPLATE/ && do {
  # Override default template
  logit("Found $key - $value",2);
  $template = $value;
  $content =~ s/%%$key=$value%%//g;
  last SWITCH;
     };
     /TITLE/ && do {
  logit("Found $key - $value",2);
  $title = $value;
  $content =~ s/%%$key=$value%%//g;
  last SWITCH;
     };
     /INCLUDE/ && do {
  #Read in an Included file
  logit("Found $key - $value",2);
  my $repl = readfile( $value );
  $content =~ s/%%$key=$value%%/$repl/g;
  last SWITCH;
     };
 };
    }
    return ($content, $title, $template);
}

############################################
# Reads a file and returns the content
############################################
sub readfile {
    my $file = shift;
    my $rv;
    logit("Opening file $file",2);
    open( FILE, $file ) || return "Could not find file $file";
    my @lines = <FILE>;
    close FILE || return "Could not close filehandle";
    logit("Closed file $file",2);
    for (@lines) {
 $rv .= $_;
    }
    return $rv;
}

sub logit {
    my $warning = shift;
    my $level = shift || 1;
    my $caller = (caller(1))[3];
    if ($debug >= $level) {
 warn "    $caller:\t$warning";
    }
}

1;



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to