Schrift
[thread]3668[/thread]

erste Abfrage dauert lange... (Seite 2)

Leser: 1


<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten
olruebe01
 2006-03-27 14:34
#34152 #34152
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
@master: ah... verstehe.

@renee: Jetzt, wo Apache::DBI installiert ist, besteht das Problem nicht mehr. Kann es daran gelegen haben?
renee
 2006-03-27 15:08
#34153 #34153
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=master,27.03.2006, 11:52]Mach doch sonst ein Int($FORMDATA{item}) vorher.
Code: (dl )
item = $FORMDATA{item}

ok das ist klar unsicher..
Code: (dl )
and Galerie = '$FORMDATA{Galerie}'

Das ist aber sicher, da es mysql-gequotet ist.

[/quote]

Nöö, was passiert, wenn in $FORMDATA{Galerie} ein ' vorkommt??

Bitte den von mir verlinkten Artikel über Wiki:CGI-Sicherheit lesen!! Dort wird unter anderem die ?-Notation von CPAN:DBI angesprochen!

Quote
[...]

Code: (dl )
1
2
3
4
&prepare();

sub mein_prepare
{$dbh->prepare($_);}

Dieser Quellcode ist irgendwie aus dem Zusammenhang gerissen.

Du rufst prepare auf, ohne zu sagen, was das für eine Methode ist und schreibst dann eine Sub hin (mein_prepare), die nirgends aufgerufen wird. Du solltest dann auch mit Übergabeparametern arbeiten und nicht mit $_. Denn es ist nicht garantiert, dass in $_ das Gewünschte steht...\n\n

<!--EDIT|renee|1143457740-->
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/
nepos
 2006-03-27 16:03
#34154 #34154
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Uhm wie man bei meiner 2. Variante an das Statement kommt, weiss ich gar nicht. Muesste man mal in der DBI-Doku nachlesen.
Je nach Parametern, die du reinbekommst, kannst du simple Regexes zum Pruefen nutzen.
z.B. wenn $FORMDATA{item} eine ganze Zahl sein soll:
Code (perl): (dl )
die "Fehlerhafte Daten" unless ($FORMDATA{item} =~ /^\d+$/);

Je nach Daten kann das natuerlich auch komplexer werden.
renee
 2006-03-27 16:13
#34155 #34155
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=master,27.03.2006, 11:52][...]
@nepos:
deine 2. Version würde mir gefallen, jedoch kann man so das Statement nicht mehr lesen. gibts keinen besseren Weg?
[...][/quote]
Was kann man da nicht mehr lesen?? Da hat man genauso viel Informationen wie in der Ursprungsversion, ist aber viel sicherer...

Es gibt auch etliche Module zum Testen von allem Möglichen. Man sollte also evtl. mal einen Besuch auf CPAN wagen... Aber auch geprüfte Daten sollten trotz allem aus Sicherheitsgründen mit der CPAN:DBI-Methode quote gequotet werden oder man arbeitet mit der ?-Notation.
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/
MartinR
 2006-03-28 09:02
#34156 #34156
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
[quote=master,27.03.2006, 11:59]select bla bla....   where item = 1; DELETE
FROM 'blacklist' --
[/quote]
Hallo Master,

ich möchte Dir zustimmen bei Deiner Meinung, dass man nie direkt Variablen aus Formularfeldern ungeprüft in das SQL-Statement übernimmt.

Aber ist es bei DBI (1.50) nicht so, dass sowieso nur der erste Teil des SQL-Statements ausgeführt wird und alles nach dem Semikolon ignoriert wird?

Quote
Multiple SQL statements may not be combined in a single statement handle ($sth), although some databases and drivers do support this (notably Sybase and SQL Server).


Somit besteht also die von Dir geschilderte Gefahr, dass jemand einen weiteren SQL-Zweig ins Formular einträgt der dann mit ausgeführt wird, nicht (bei Verwendung von DBI). Oder habe ich das falsch verstanden?
master
 2006-03-29 17:26
#34157 #34157
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
[quote=renee,27.03.2006, 13:08][/quote]
Quote
Nöö, was passiert, wenn in $FORMDATA{Galerie} ein ' vorkommt??

Ich habe mal irgendwo (mysql Perl, DBI oder so..) gelesen, das
dank magic quotes dann das ' so oder so -> \' geschrieben wird.

Somit wird das gefährlichste entschärft..

im Prinzip Muss man nur ' quoten (falls es es doch nicht machen sollte) bei Stings und bei Zahlen, sicherstellen das es unr eine Zahl ist, dann kann nix passieren


Ich habe aber das sogar mal getestet.
(MSSQL ist z.B. viel anfälliger als MySQL.)

MySQL hat bereits ein paar eigene mechanismen gegen Injections.

Quote
Dieser Quellcode ist irgendwie aus dem Zusammenhang gerissen.

Es ging nur darum das Prinzip klarzumachen, der Code war nicht ganz vollständig und korrekt.

Code: (dl )
1
2
3
4
5
6
7
8
9
#<--Paramenter müssen hier schon geprüft sein.
&mein_prepare($statement);

sub mein_prepare
{
my $state = $_; #man kann auch shiften
# hier ev. Statement parsen
$dbh->prepare($_);
}
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
master
 2006-03-29 17:37
#34158 #34158
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
@MartinR
Kann sein... aber verlassen würde mich nicht darauf..
Es ist besser wenn man von der Syntax her niemandem eine Chance gibt.\n\n

<!--EDIT|master|1143641784-->
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
master
 2006-03-29 18:24
#34159 #34159
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
[quote=renee,27.03.2006, 14:13][/quote]
Quote
Was kann man da nicht mehr lesen??

Naja die ist nicht übersichtlich...



Code: (dl )
SELECT art FROM `blacklist` WHERE item = $FORMDATA{item} and Galerie = '$FORMDATA{Galerie}'");
ist leserlicher als
Code: (dl )
1
2
("SELECT art FROM `blacklist` WHERE item = ? and Galerie = ?");
$sth->execute($FORMDATA{item},$FORMDATA{Galerie})

mit den ? ? ? weil das -> ? zu anonym ist... man muss erst abzählen beim wievielten ? welcher wert reinkommt. wenn man einen Fehler sucht oder die Abfrage verstehen/lesen will.

Gibts nicht die möglichkeit den ? z.B. einen namen zu geben?
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
pq
 2006-03-29 19:56
#34160 #34160
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=master,29.03.2006, 15:26][quote=renee,27.03.2006, 13:08][/quote]
Quote
Nöö, was passiert, wenn in $FORMDATA{Galerie} ein ' vorkommt??

Ich habe mal irgendwo (mysql Perl, DBI oder so..) gelesen, das
dank magic quotes dann das ' so oder so ->  \'   geschrieben wird.[/quote]
bitte? du willst also ernsthaft behaupen, wenn ich das hier schreibe:
$FORMDATA = q/a23' OR id != '/;
$dbh->prepare("select ... where id = '$FORMDATA{ID}'");

wird in sql letztendlich select ... where id = 'a23\' OR id != \''
ausgeführt? wie soll das denn gehen? das prepare kriegt einen
einfachen string. woher soll DBI wissen, welche ' es escapen muss und welche nicht?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
master
 2006-03-29 21:07
#34161 #34161
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Magic Quotes macht das irgendwie..
es gab hier mal ein Skript wo man das sieht.

Es werden dann variabeln automatisch escaped...
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten



View all threads created 2006-03-27 11:02.