Schrift
[thread]3516[/thread]

Sonderzeichen escapen



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Gast Gast
 2005-01-06 15:22
#32823 #32823
Hallo

Ich habe das PRoblem bisher dass ich:

z.B.

my $wert= $cgi->param...;
my $wert2= ....;

$wert wird überprüft ob was anderes als Zahlen vorkomme
$wert2 wird überprüft ob ' vorkommt.

einlese einer Benutzereingabe
und dann
diese Werte
in einer SQL Anweisung verwende.

z.B.
my $statement= "SELECT * FROM eine WHERE nummer=$wert2 and name ='$wert'";

dann halt
my $sth=prepare,execute,finish....


Nun können aber schlaue benutzer durch bestimmte eingaben das umgehen und eigene Anweisungen irgendwie ausführen.

Wie kann jetzt z.B. alle Sonderzeichen escapen also ein \ voransetzten, damit kein Müll mehr gemacht werden kann?


Danke für eure Hilfe
ppm1
 2005-01-06 15:25
#32824 #32824
User since
2003-09-14
142 Artikel
BenutzerIn
[default_avatar]
Sorry:
Ich benutze DBI und DBD::MYSQL
und eine aktuelle MYSQL-Datenbank
renee
 2005-01-06 15:42
#32825 #32825
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mach's Dir einfach und benutze die Features von DBI:
Code: (dl )
1
2
3
4
my $wert = $cgi->param();
my $sql = "SELECT * FROM eine WHERE nummer=? AND name=?";
my $sth = $dbh->prepare($sql) or die $dbh->errstr();
$sth->execute($wert2,$wert) or die $dbh->errstr();


Dann wird automatisch gequotet. Siehe Doku zu CPAN:DBI!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ppm1
 2005-01-06 15:55
#32826 #32826
User since
2003-09-14
142 Artikel
BenutzerIn
[default_avatar]
Okay.. Das ist mir jetzt klar.

Aber wie soll ich dies machen wenn ich ein UPDATE oder INSERT benutze und zwar der folgendenden Art:

my $wert2=$cgi->param(...);
$rows = $dbh->do("UPDATE your_table SET meine=$wert2");
renee
 2005-01-06 16:11
#32827 #32827
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
splitte es auf in
Code: (dl )
1
2
3
4
my $wert = $cgi->param();
my $sql = "UPDATE eine SET x = ? WHERE name=?";
my $sth = $dbh->prepare($sql) or die $dbh->errstr();
$sth->execute($wert2,$wert) or die $dbh->errstr();


Oder Du benutzt quote():
Code: (dl )
1
2
3
my $wert2=$cgi->param(...);
$wert2 = $dbh->quote($wert2);
$rows = $dbh->do("UPDATE your_table SET meine=$wert2");
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ppm1
 2005-01-06 18:36
#32828 #32828
User since
2003-09-14
142 Artikel
BenutzerIn
[default_avatar]
Und welchen der beiden Wege sollte man von der Server-Belastung her wählen, bei sehr vielen abfragen?
Relais
 2005-01-06 19:05
#32829 #32829
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ersteren... mit den ? ?
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
esskar
 2005-01-06 20:01
#32830 #32830
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Relais,06.01.2005, 18:05]ersteren... mit den ? ?[/quote]
begründung?
Strat
 2005-01-07 00:26
#32831 #32831
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
das haengt ein bisschen vom RDBMS ab... manche datenbanken wie mysql pruefen beim prepare nur die syntax, und schicken dann beim execute erst alles zur DB; ich schaetze mal, da ist kein unterschied; andere datenbanken hingegen lassen sich schon das prepare schicken und compilieren die abfrage; wenn dann beim execute noch die variable(n) eingesetzt werden, ist es (vor allem bei wiederholter ausfuehrung des executes mit unterschiedlichen parametern) dann um einiges schneller, weil der prepare-schritt nicht jedesmal neu gemacht werden muss.

aber bei einer einzelnen abfrage faellt mir gerade kein technischer grund ein, wieso die platzhaltervariante der quote-variante vorzuziehen ist... hoechstens, dass man das quote einfacher vergisst...
die platzhaltervariante gefaellt mir aber auch besser\n\n

<!--EDIT|Strat|1105050426-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
renee
 2005-01-07 09:31
#32832 #32832
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ein riesen Vorteil der ?-Methode ist, dass automatisch alle Variablen gequotet werden. Da muss man nicht alles "manuell" machen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2005-01-06 15:22.