Perl

Die Perl-Datenbankschnittstelle DBI, erhältlich vom CPAN, beherrscht parameterisierte SQL-Aufrufe. Die Methoden do und prepare unterstützen Parameter (dort: "Platzhalter") für die meisten Datenbanktreiber. Zum Beispiel:

$sth = $dbh->prepare("SELECT * FROM users WHERE email = ?");
foreach my $email (@emails) {
    $sth->execute($email);
    $row = $sth->fetchrow_hashref;
    [...]
}

Man kann aber Parameterisierung nicht für Benenner (Tabellennamen, Spaltennamen) verwenden, also muss man die Methode quote_identifier() aus DBI verwenden:

# Dafür sorgen, dass der zu verwendende Tabellenname sicher ist:
my $quoted_table_name = $dbh->quote_identifier($table_name);

# Unter der Annahme, dass @cols eine Liste der zu holenden Spaltennamen enthält:
my $cols = join ',', map { $dbh->quote_identifier($_) } @cols;

my $sth = $dbh->prepare("SELECT $cols FROM $quoted_table_name ...");

Man kann auch vermeiden, SQL manuell zu schreiben, indem man DBIx::Class, SQL::Abstract usw. verwendet, um SQL programmatisch zu erzeugen.

Was ist der Taint-Modus?

Der Taintmodus stellt besondere Sicherheitsprüfungen dar, die Perl an Eingabedaten durchführt, welche aus externen Quellen stammen. Die Eingabedaten werden als "unrein" (nicht vertrauenswürdig) markiert und können nicht in Befehlen verwendet werden, mit denen man sich ins eigene Fleisch schneiden würde. Siehe perlsec für eine detaillierte Übersicht, was der Taintmodus überwacht.

Um den Taintmodus anzuschalten:

# Auf der Kommandozeile
perl -T program.pl

# Am Anfang des Skripts
#!/usr/bin/perl -T

Wenn eine Taintprüfung im Skript fehlschlägt, gibt die Anwendung eine fatale Fehlermeldung aus. Für Testzwecke gibt -t Warnungen statt fataler Fehler aus. -t ist kein Ersatz für -T.

In Vorbereitung

Erklärung zum Taintmodus von Perl und wie DBI den Taintmodus sowohl einwärts als auch ausgehend unterstützt.

Mach auf GitHub mit