HP-User: Grosses Beispiel für CPAN ;-)

Beitrag lesen

Hallo CPAN ;-)


#!/usr/bin/perl -w

###############################################################################
# guest-writer.pl:                 Version 1.00                               #
# Developed started in:            01.08.2012                                 #
# Finished in:                     01.08.2012                                 #
# Programmed by:                   XXXXXXXXXXXXXXX                            #
###############################################################################

use strict;
use warnings;
use Fcntl ':flock';
use CGI -no_xhtml;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
use Encode;

########################
# Parameter einsammeln #
########################

my $nick = CGI::param('nick');
my $nachricht = CGI::param('nachricht');
my $zaehler = CGI::param('zaehler');
my $gbrgelesen = CGI::param('gbrgelesen');
my $spamschutz = CGI::param('spamschutz');
my $comparator = CGI::param('comparator');
my $IPAdresse = $ENV {'REMOTE_ADDR'};

###############################################
# Cleanup-Input-Filter (CIF) / Umbruchbezogen #
###############################################

$nick =~ s/\015\012|\015|\012//g;
$nachricht =~ s/\015\012|\015|\012//g;
$zaehler =~ s/\015\012|\015|\012//g;
$gbrgelesen =~ s/\015\012|\015|\012//g;
$spamschutz =~ s/\015\012|\015|\012//g;
$comparator =~ s/\015\012|\015|\012//g;

chomp($nick);
chomp($nachricht);
chomp($zaehler);
chomp($gbrgelesen);
chomp($spamschutz);
chomp($comparator);

###########################################
# Evil-Input-Filter (EIF) / Längenbezogen #
###########################################

my $utf8str = decode('utf-8', $nick);
my $size = length($utf8str);
if($size > 30){
               goto NamenUmfangError;
              }

my $utf8str = decode('utf-8', $nachricht);
my $size = length($utf8str);
if($size > 400){
                goto TextUmfangError;
               }

my $utf8str = decode('utf-8', $zaehler);
my $size = length($utf8str);
if($size > 3){
              goto AnzeigeUmfangError;
             }

my $utf8str = decode('utf-8', $gbrgelesen);
my $size = length($utf8str);
if($size > 2){
              goto GBRUmfangError;
             }

my $utf8str = decode('utf-8', $spamschutz);
my $size = length($utf8str);
if($size > 7){
              goto SpamUmfangError;
             }

my $utf8str = decode('utf-8', $comparator);
my $size = length($utf8str);
if($size > 20){
               goto VergleichUmfangError;
              }

############################################
# Evil-Input-Filter (EIF) / Zeichenbezogen #
############################################

$nick =~ s/;//g;
$nick =~ s/<//g;
$nick =~ s/>//g;
$nick =~ s/\*//g;
$nick =~ s/|//g;
$nick =~ s/\[//g;
$nick =~ s/\]//g;
$nick =~ s/{//g;
$nick =~ s/}//g;
$nick =~ s/@//g;
$nick =~ s/&//g;
$nick =~ s/\\//g;
$nick =~ s/ //g;

$nachricht =~ s/#//g;
$nachricht =~ s/;/#/g;
$nachricht =~ s/<//g;
$nachricht =~ s/>//g;
$nachricht =~ s/\*//g;
$nachricht =~ s/|//g;
$nachricht =~ s/\[//g;
$nachricht =~ s/\]//g;
$nachricht =~ s/{//g;
$nachricht =~ s/}//g;
$nachricht =~ s/@//g;
$nachricht =~ s/&//g;
$nachricht =~ s/\\//g;

$zaehler =~ s/;//g;
$zaehler =~ s/<//g;
$zaehler =~ s/>//g;
$zaehler =~ s/\*//g;
$zaehler =~ s/|//g;
$zaehler =~ s/\[//g;
$zaehler =~ s/\]//g;
$zaehler =~ s/{//g;
$zaehler =~ s/}//g;
$zaehler =~ s/@//g;
$zaehler =~ s/&//g;
$zaehler =~ s/\\//g;
$zaehler =~ s/ //g;

$gbrgelesen =~ s/;//g;
$gbrgelesen =~ s/<//g;
$gbrgelesen =~ s/>//g;
$gbrgelesen =~ s/\*//g;
$gbrgelesen =~ s/|//g;
$gbrgelesen =~ s/\[//g;
$gbrgelesen =~ s/\]//g;
$gbrgelesen =~ s/{//g;
$gbrgelesen =~ s/}//g;
$gbrgelesen =~ s/@//g;
$gbrgelesen =~ s/&//g;
$gbrgelesen =~ s/\\//g;
$gbrgelesen =~ s/ //g;

$spamschutz =~ s/;//g;
$spamschutz =~ s/<//g;
$spamschutz =~ s/>//g;
$spamschutz =~ s/\*//g;
$spamschutz =~ s/|//g;
$spamschutz =~ s/\[//g;
$spamschutz =~ s/\]//g;
$spamschutz =~ s/{//g;
$spamschutz =~ s/}//g;
$spamschutz =~ s/@//g;
$spamschutz =~ s/&//g;
$spamschutz =~ s/\\//g;
$spamschutz =~ s/ //g;

$comparator =~ s/;//g;
$comparator =~ s/<//g;
$comparator =~ s/>//g;
$comparator =~ s/\*//g;
$comparator =~ s/|//g;
$comparator =~ s/\[//g;
$comparator =~ s/\]//g;
$comparator =~ s/{//g;
$comparator =~ s/}//g;
$comparator =~ s/@//g;
$comparator =~ s/&//g;
$comparator =~ s/\\//g;
$comparator =~ s/ //g;

######################################
# Extra-Skalar-Group (ESG) / Skalare #
######################################

my $sesamkey;
my $masterkey;
my $DB_nick;
my $DB_nachricht;
my $DB_zaehler;
my $DB_gbrgelesen;
my $DB_IPAdresse;
my $DB_Monatstag;
my $DB_Monat;
my $DB_Jahr;
my $DB_Stunden;
my $DB_Minuten;
my $DB_Sekunden;

############################################
# Date-And-Time (DAT) / Datum und  Uhrzeit #
############################################

my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
    $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $CTIME_String = localtime(time);
$Monat+=1;
$Jahrestag+=1;
$Monat = $Monat < 10 ? $Monat = "0".$Monat : $Monat;
$Monatstag = $Monatstag < 10 ? $Monatstag = "0".$Monatstag : $Monatstag;
$Stunden = $Stunden < 10 ? $Stunden = "0".$Stunden : $Stunden;
$Minuten = $Minuten < 10 ? $Minuten = "0".$Minuten : $Minuten;
$Sekunden = $Sekunden < 10 ? $Sekunden = "0".$Sekunden : $Sekunden;
$Jahr+=1900;

###########################################
# Precise-Input-Check (PIC) / Nameninhalt #
###########################################

if ($nick =~ /EZ ?- ?Team/i) {
                              goto NamenUmfangError;
                             }

if ($nick eq "") {
                  goto NamenUmfangError;
                 }

if ($nick eq "XXXXXXXXXXXX") {
                              $nick = "EZ-Team";
                             }

####################################
# Precise-Input-Check (PIC) / Text #
####################################

if ($nachricht eq "") {goto TextUmfangError;}

#######################################
# Precise-Input-Check (PIC) / Anzeige #
#######################################

my $zahlstatus = "N";
my $wertstatus = "N";

if ($zaehler =~ /\d/) { $zahlstatus = "Y";}
if ($zaehler <= "400" ) { $wertstatus = "Y";}
if ($zahlstatus eq "Y" and $wertstatus eq "Y") {goto AnzeigeOK;}
goto AnzeigeUmfangError;

AnzeigeOK:

################################################
# Precise-Input-Check (PIC) / Gaestebuchregeln #
################################################

if ($gbrgelesen ne "on") {goto GBRUmfangError;}

##########################################
# Precise-Input-Check (PIC) / Spamschutz #
##########################################
$sesamkey = "";

if ($comparator eq "Goldfisch") {
                                 $sesamkey = "gold";
                                }

if ($comparator eq "Grünfink") {
                                $sesamkey = "grün";
                               }

if ($comparator eq "Rotbarsch") {
                                 $sesamkey = "rot";
                                }

if ($comparator eq "Braunbär") {
                                $sesamkey = "braun";
                               }

if ($comparator eq "Blauwal") {
                                 $sesamkey = "blau";
                                }

if ($comparator eq "Silberreiher") {
                                    $sesamkey = "silber";
                                   }

if ($comparator eq "Gelbkopfgecko") {
                                     $sesamkey = "gelb";
                                    }

if ($comparator eq "Schwarzfußiltis") {
                                       $sesamkey = "schwarz";
                                      }

if ($comparator eq "Weißkopfseeadler") {
                                        $sesamkey = "weiß";
                                       }
if ($sesamkey eq "") {
                      goto SpamUmfangError;
                     }

if ($spamschutz ne $sesamkey) {
                               goto SpamUmfangError;
                              }

####################################################
####################################################
## Point-Of-Released-Input (PORI) / Wertefreigabe ##
####################################################
####################################################

#################################################
# Multi-Post-Blocker (MPB) / Mehrfachpostsperre #
#################################################

open(FILEMASTER, "<XXXXXXXXXX.csv") or die "ERROR: Unable to open the Message-file during read-access!";
flock(FILEMASTER, LOCK_EX);
my $DeltaMinuten = "";
my $GlobalDB_Minuten = "";

while(! eof(FILEMASTER)){
my $zeile = <FILEMASTER>;
my ($DB_nick, $DB_nachricht, $DB_zaehler, $DB_gbrgelesen, $DB_IPAdresse, $DB_Monatstag, $DB_Monat, $DB_Jahr, $DB_Stunden, $DB_Minuten, $DB_Sekunden) = split(/;/,$zeile);
$GlobalDB_Minuten = $DB_Minuten;
$DeltaMinuten = ($Minuten - $DB_Minuten);
if ($DB_IPAdresse eq $IPAdresse and $DB_Monatstag eq $Monatstag and $DB_Monat eq $Monat and $DB_Jahr eq $Jahr and $DB_Stunden eq $Stunden and $DeltaMinuten < 5) {
close(FILEMASTER);
goto TimeLock;
}
}
close(FILEMASTER);

#############################################
# Data-Save-Engine (DSE) / Datenspeicherung #
#############################################

open(FILEMASTER, "+>>XXXXXXXXXX.csv") or die "ERROR: Unable to open the Message-file during write-access!";
flock(FILEMASTER, LOCK_EX);
print FILEMASTER $nick,';',$nachricht,';',$zaehler,';',$gbrgelesen,';',$IPAdresse,';',$Monatstag,';',$Monat,';',$Jahr,';',$Stunden,';',$Minuten,';',$Sekunden,"\n";
close(FILEMASTER);

####################
# HTML-Textausgabe #
####################

print CGI->header('text/html');

print <<"ENDE";
ENDE
exit;

###############################################
# Error-Block-Output (EBO) / NamenUmfangError #
###############################################

NamenUmfangError:
print CGI->header('text/html');

print <<"ENDE";
ENDE
exit;

##############################################
# Error-Block-Output (EBO) / TextUmfangError #
##############################################

TextUmfangError:
print CGI->header('text/html');

print <<"ENDE";
ENDE
exit;

#################################################
# Error-Block-Output (EBO) / AnzeigeUmfangError #
#################################################

AnzeigeUmfangError:
print CGI->header('text/html');

print <<"ENDE";
ENDE
exit;

#############################################
# Error-Block-Output (EBO) / GBRUmfangError #
#############################################

GBRUmfangError:
print CGI->header('text/html');

print <<"ENDE";
ENDE
exit;

##############################################
# Error-Block-Output (EBO) / SpamUmfangError #
##############################################

SpamUmfangError:
print CGI->header('text/html');

print <<"ENDE";
ENDE
exit;

#########################################
# Time-Lock-Security (TLS) / Zeitsperre #
#########################################

TimeLock:
print CGI->header('text/html');

print <<"ENDE";
ENDE
exit;

###################################################
# Error-Block-Output (EBO) / VergleichUmfangError #
###################################################

VergleichUmfangError:
print CGI->header('text/html');

print <<"ENDE";
ENDE
exit;

Damit du mal den "Writer" siehst und sich deine Bedenken zerstreuen lassen...

Gruss HP-User

PS.: Du wirst das von Berufswegen machen, und wer 6000 € im Monat verdient, der muss halt schon noch ein bischen mehr können als ich. Für mich reicht das hier allemal - ich verdien ja auch keine 6000,- Klötze hehe