Re: Prepared Statements

Поиск
Список
Период
Сортировка
От Fernando Nasser
Тема Re: Prepared Statements
Дата
Msg-id 3F18065A.1060406@redhat.com
обсуждение исходный текст
Ответ на Re: Prepared Statements  (wsheldah@lexmark.com)
Ответы Re: Prepared Statements
Re: Prepared Statements
Список pgsql-jdbc
Dmitry Tkach wrote:
> Barry Lind wrote:
>
>> If using a PreparedStatement the driver correctly escapes all values
>> to avoid SQL injection attacks.
>
>
> No, it doesn't :-)
> For example:
>
> PreparedStatement s = c.prepareStatement ("select * from user where id =
> ?");
> s.setObject (1, "null;drop database mydatabase", Types.INTEGER);
> System.out.println (s.toString ());
>
> select * from user where id=null;drop database mydb
>
> :-)
>

I don't believe this is actually being sent to the backend, maybe it is
just a toString() bug.

The backend should get:

select * from user where id='null;drop database mydb'

(If it does not it is a bug.)


P.S.: The example case would only succeed if the DBA is an idiot.
You program should not be accessing the database (for this queries at
least) as an user who can drop databases unless it is a privileged
program for privileged users (who could do the damage using plain psql
anyway).  Perhaps the injection of a 'DELETE FROM mytable' would be a
more realistic example.


--
Fernando Nasser
Red Hat Canada Ltd.                     E-Mail:  fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario   M4P 2C9


В списке pgsql-jdbc по дате отправления:

Предыдущее
От: Csaba Nagy
Дата:
Сообщение: Re: Prepared Statements
Следующее
От: Csaba Nagy
Дата:
Сообщение: Re: Prepared Statements