From: | Harald Fuchs <hf0722x(at)protecting(dot)net> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Sql injection attacks |
Date: | 2004-07-28 15:30:11 |
Message-ID: | pu4qnsgnek.fsf@srv.protecting.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
In article <6(dot)1(dot)2(dot)0(dot)1(dot)20040728170935(dot)01f2ef38(at)localhost>,
Lincoln Yeoh <lyeoh(at)pop(dot)jaring(dot)my> writes:
> Just curious on what are the correct/official ways for dealing with
> the following scenarios:
> 1) Input string contains % and _ and would be used in a LIKE query
> that should not have user controllable wildcards.
Perhaps you mean something like the following:
my $sth = $dbh->prepare (q{
SELECT whatever
FROM mytable
WHERE somecol LIKE ? || '%'
});
$sth->execute ($input);
Even if $input contains '%' or '_', those characters get properly escaped.
> 2) Input string are numbers which can hold negative and positive
> values and could potentially be used in the following query:
> update tablea set a=10-$inputstring where key=1;
> When I tested at least one version of DBD::Pg doesn't appear to escape
> the inputstring when it's a number.
> e.g.
> $SQL="update tablea set a=10-? where key=1";
> And $SQL is used in a prepared statement with $inputstring as a parameter.
> I found that when $inputstring contained a negative number, all rows
> in tablea are set to the same value.
What exactly did you do? I tried
$sth = $dbh->prepare (q{
UPDATE t1
SET val = 10-?
WHERE id = ?
});
$sth->execute (-1, 1);
and it surely set val to 11.
> 3) Postgresql queries with select .... from ... where ... LIMIT $inputstring
The same thing:
$sth = $dbh->prepare ("SELECT id, val FROM t1 ORDER BY id LIMIT ?");
$sth->execute ($inputstring);
From | Date | Subject | |
---|---|---|---|
Next Message | =?iso-8859-1?q?Dag-Erling_Sm=F8rgrav?= | 2004-07-28 15:34:25 | Re: tablename type? |
Previous Message | Tom Lane | 2004-07-28 15:25:06 | Re: tablename type? |