Sign in to follow this  
Followers 0

Noen som kan se på dette scriptet?

6 posts in this topic

Hei, holder på med et "include" perl-script for å lage en enkel løsning på nettsiden min med dynamisk footer/header/innhold. Problemet er at jeg får feil, selvom jeg egentlig ikke skal få feil :P

#!/usr/bin/perl use warnings; use strict; use CGI qw(:standard); # Filplasseringer: my $header_file = '/home/xxx/public_html/include/header.inc'; # Header my $footer_file = '/home/xxx/public_html/include/footer.inc'; # Footer my $content_dir = '/home/xxx/public_html/include'; # Innhold # Lovlige filtyper my @safe_files_ext = qw( inc ); # Spesifisert innholdside my $query = new CGI; chomp(my $page = $query->param('page') || ''); # Fjern mellomrom $page =~ s/\s+//g if ($page ne ""); # Vis header (for CGI): print header(); # Statisk fil (0) eller spesifisert fil (1) : read_file(0, $header_file); read_file(1, $content_dir . '/' . $page) if ($page ne ""); read_file(0, $footer_file); # Hvis lovlig, vis fil sub read_file { my ($in_page, $file) = @_; if ($in_page) { # Hvis fil er spesifisert error("Invalid syntax") if ($file =~ /\.\./); foreach my $file_ext (@safe_files_ext) { # Sjekk hver filtype # Stopp og vis feilmelding hvis ulovlig error("Invalid syntax for $file") if ($file !~ /\.$file_ext$/i); } } # Hvis lovlig, vis fil open(FILE, $file) or error("Can't open $file $!"); # Vis feilmelding hvis annen type feil # Ekstra ting kommer her print while (); # Print file line by line for best efficiency. close(FILE); } # Vis feil og avslutt sub error { my $reason = shift; print "Error: $reason\n"; exit; }
EDIT: Løste det, hadde gjort en bommert selv når jeg spesfiserte lovlige filtyper.. hehe.

Share this post


Link to post
Share on other sites

Hei petterk, Fort gjort :) Takk for oppdateringen!

Share this post


Link to post
Share on other sites

Har forsåvidt et spørsmål til i forbindelse med det scriptet: Mulig å gjøre det slik at jeg kan ha ?page=main, og ikke ?page=main.inc,men at samme fil blir calla? Altså at den selv leter etter main.inc/shtml, uten at jeg må spørre etter det direkte. EDIT; Løste det.

read_file(1, $content_dir . '/' . $page) if ($page ne "");
endres til
read_file(1, $content_dir . '/' . $page . '.inc') if ($page ne "");

Share this post


Link to post
Share on other sites

Ja, det kan jo løses slik, men vær svært forsiktig med å gjøre det slik. Du bør da alltid sjekke nøye strengen som kommer inn slik at hackere ikke endrer den slik at de får tilgang til mer enn ønskelig. Du kan også benytte deg av mod_rewrite for eksempel.

Share this post


Link to post
Share on other sites

Hei Jon Eivind, det har jeg tenkt mye på! Hvis du ser på

# Lovlige filtyper my @safe_files_ext = qw( inc );
, er det kun filer som ender i .inc som vil bli brukt, slik at man ikke kan bruke enkle triks som ?page=../../../../etc/passwd f.eks! I tillegg antar nå scriptet at alle filer slutter på .inc fra før av, f.eks ?page=main tilsvarer main.inc, og uavhengig av om en fil heter main.exe, så vil den aldri bli brukt fordi den da vil bli called som main.exe.inc.

Share this post


Link to post
Share on other sites

Hei petterk, Flott! Mod_security vil normalt sett også fange opp de mest vanlige av disse angrepene.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  
Followers 0