Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3583[/thread]

Methode gegen SQL-Injections



<< >> 9 Einträge, 1 Seite
master
 2005-06-13 17:38
#33334 #33334
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen...

Gilt nur bei Strings:
Meiner Ansicht nach sollte es genügen alle Aprostroph ' zu entschärfen oder entfernen.

und dann in den Abfragen ignoriert SQL ja alles zwsichen den
zwei ' '.

Beispiel:
Code: (dl )
1
2
$user =~ s/'//gis;   #Bei MSSQL jedoch verdoppeln  ($user =~ s/'/''/gis; )
$dbh->do("SELECT * FROM accounts WHERE user='$user' ");


Liege ich richtig doch richtig? Oder gibt es jemand der hier eine Schwachstelle sieht oder das hacken könnte?
Wenn MySQL/MSSQL richtig arbeiten wird alles zwischen ' '
nur als string interpretiert.
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
renee
 2005-06-13 17:43
#33335 #33335
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Benutze einfach die ?-Notation:
Code: (dl )
$dbh->do("SELECT * FROM accounts WHERE user= ? ",$user) or die $dbh->errstr();


Dann wird das Quoten von DBI übernommen!
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/
Strat
 2005-06-13 19:16
#33336 #33336
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich empfehle auch renee's vorschlag, mit platzhaltern zu arbeiten... es gibt ja unter umstaenden noch weitere "komische" zeichen, die u. U. schaden anrichten koennen, z.B. ", %, ...

alternativ zu Platzhaltern kannst du auch manuell quoten:
Code: (dl )
$user = $dbh->quote($user);

(wobei ich den Weg ueber Platzhalter bevorzuge)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pKai
 2005-06-14 00:24
#33337 #33337
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
[quote=master,13.June.2005, 15:38]
Code: (dl )
$user =~ s/'//gis;   #Bei MSSQL jedoch verdoppeln  ($user =~ s/'/''/gis; )
[/quote]
Anmerkung und Frage:
Bei MSSQL mache ich das alle Nasenlang so (s/'/''/g; per Biliotheksfunktion). M.W. gibt es keinen DBI-Treiber für den aktuellen MSSQL-Server, und so arbeite ich da mit Roth's Win32::ODBC und "Autoquoting"/Platzhalternotation gibt's da auch nicht.
Wenn du allerdings bei MySQL die Hochkomma einfach entfernst, kann es das ja auch irgendwie nicht sein. Wie ist denn die korrekte (manuelle) Schutzmethode in MySQL-Zeichenketten? Mit Gegenschrägem? Also s/(['\\])/\\$1/g ?
I sense a soul in search of answers.
renee
 2005-06-14 00:41
#33338 #33338
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Warum benutzt Du nicht DBI mit DBD::ODBC?? Das müsste doch gehen!
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/
pKai
 2005-06-14 01:29
#33339 #33339
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
@renee: Die Applikation ist nicht mehr in der Entwicklungsphase un d die Entscheidung Win32::ODBC einzusetzen 1.5 Jahre alt. Im Prinzip gab's da auch keine Probleme mit, und wenn wissen wir bei dem Modul wie wir sie umgehen ;). Nur mal so wird da nix umgestellt. Die Kosten trägt ja niemand, wenn nicht massive Vorteile rausspringen.
I sense a soul in search of answers.
jan
 2005-06-14 02:19
#33340 #33340
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
für's nächste mal: DBI und DBD::ODBC funktioniert soweit wunderbar.
Relais
 2005-06-14 12:03
#33341 #33341
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@pKai für die $dbh->quote() Methode kannst Du ja nun DBI und DBD dazunehmen =)
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
Froschpopo
 2006-10-28 03:37
#33342 #33342
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Jetzt muss ich auch mal meinen Senf dazugeben:
Die Methode mit den Platzhaltern ist ja nicht nur praktisch um SQL Injection's vorzubeugen, sondern man kann das Statement auch in eine Konfigurationsdatei auslagern, wie ich es z.b. mache.
Das sieht bei größeren Codesegmenten schöner aus.
<< >> 9 Einträge, 1 Seite



View all threads created 2005-06-13 17:38.