Formulardaten übernehmen und säubern
Martino
- perl
Liebes Forums-Orakel,
mein Perl-Skript liest übermittelte Formularfelder ein und schreib diese in MySQL. Nun ist besonders hinderlich, wenn jemand " Hochkommas eingibt, denn dann wird nichts hineingeschrieben. Ich habe deshalb folgendes geschrieben:
$Frage = $query->param('Frage');
$Frage =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$Frage =~ s/"/\"/g; #Anf¸hrungszeichen maskieren
$Frage =~ s/'/\'/g;
Das funktioniert. Dumm nur, dass ich es auf alle möglichen Felder anwenden will, die ganze Wurst aber nicht zig-fach schreiben will.
wie geht das, wenn ich folgendes will:
$Frage = $query->param('Frage');
&form_verarbeiten;
sub form_verarbeiten
{
(was kann ich hier schreiben?) =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
(was kann ich hier schreiben?) =~ s/"/\"/g; #Anf¸hrungszeichen maskieren
(was kann ich hier schreiben?) =~ s/'/\'/g;
}
Mit $_ funktioniert das leider nicht.
Vielen Dank, Martino
Moin Moin !
1. Nimm Dir das DBI-Manual mal vor, denn Du kannst BELIEBIGE Zeichen in die Datenbank schreiben, auch " und '. Du brauchst kein Escaping. Das Geheimnis liegt darin, die Werte eben nicht in das SQL-Statement zu schreiben, sondern separat an die execute-Methode zu übergeben.
2. Escaping-Funktionen kann man z.B. so schreiben:
sub escape_it($)
{
my $toescape=shift;
$toescape=~s/......./........../....;
$toescape=~s/......./........../....;
$toescape=~s/......./........../....;
$toescape=~s/......./........../....;
return $toescape;
}
$var1=escape_it(param('p1'));
$var2=escape_it($var2);
Alexander
Hallo Alexander,
ich finde es eine gute Idee, die Sub-Routine mit einem übergebenem Wert aufzurufen, da bin ich leider nicht drauf gekommen. Mit dem DBI werde ich mich auch noch befassen, das ist spannend.
Danke, Martino.