The SELECT is in fact much more likely to be vulnerable than the COPY, but to be safer you should make sure none of your words matches /\n|^\\\./

cheers

andrew

Kynn Jones wrote:
I have a Perl CGI script (using DBD::Pg) that interfaces with a server-side
Pg database.  This interfacing is more involved than simple SELECT queries,
which increases the vulnerability to SQL injection attacks.  Here's a
summary.

1. the user submits a collection of "words", typical via a browser;
2. the server-side CGI script creates a temporary table, called input_list,
and inserts these words in the table, one word per row.  The code for this
insertion is:

    $dbh->do( <<EOSQL );
COPY input_list ( word ) FROM stdin;
EOSQL

    $dbh->pg_putline( "$_\n" ) for @$words;
    $dbh->pg_endcopy;

3. the script then performs a SELECT query that involves a join with the
temporary table input_list.


The SELECT in (3) seems to me pretty safe, irrespective of the contents of
input_list (but please disabuse me if I'm wrong!).

I'm less certain of the safety of the $dbh->pg_putline statement that
initializes input_list.  Is it vulnerable to SQL-injection?

TIA!

~K

Reply via email to