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