Re: Prepared Statements
От | Csaba Nagy |
---|---|
Тема | Re: Prepared Statements |
Дата | |
Msg-id | 1058539593.25132.304.camel@coppola.ecircle.de обсуждение исходный текст |
Ответ на | Re: Prepared Statements (Fernando Nasser <fnasser@redhat.com>) |
Список | pgsql-jdbc |
I have checked, the query is indeed sent like that to the backend, I've just checked. It is a bug. Presumably for number types the parameter set is passed as it is, without any escaping. Cheers, Csaba. On Fri, 2003-07-18 at 16:38, Fernando Nasser wrote: > 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 > > > ---------------------------(end of broadcast)--------------------------- > TIP 8: explain analyze is your friend >
В списке pgsql-jdbc по дате отправления: