Noen som kan se på dette scriptet?

6 innlegg i emnet

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.

Del dette innlegget


Lenke til innlegg
Del på andre sider

Hei petterk, Fort gjort :) Takk for oppdateringen!

Del dette innlegget


Lenke til innlegg
Del på andre sider

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 "");

Del dette innlegget


Lenke til innlegg
Del på andre sider

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.

Del dette innlegget


Lenke til innlegg
Del på andre sider

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.

Del dette innlegget


Lenke til innlegg
Del på andre sider

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

Del dette innlegget


Lenke til innlegg
Del på andre sider

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!


Start en konto

Logg inn

Har du allerede en konto? Logg inn her.


Logg inn nå