P.S. Nick, I want to clarify that you bringing this up is very important for us and I really appreciate. Security is a priority so if this turns out to be a different issue than the one I suspect we will fix it promptly.
Even if this is not a new issue and it is the problem I suspect, we should still have a discussion about the pros and cons of rewriting the dal using the alternative syntax that delegates the security issue to the driver. massimo On Sep 1, 10:47 pm, Massimo Di Pierro <[email protected]> wrote: > To follow up the discussion on the issue... > > At some point a choice was made in web2py whether the role of escaping > of strings relies in web2py or in the database driver. We decided this > was a job for web2py because we would have more control over it. This > allows the code to be simpler and allows to support more databases as > we do not need to know the details of their APIs. > > The web2py implementation assume the database is conform to SQL > escaping convention. Postgresql before 9.1 does not. Postgresql 8.4 > can be set to be conform (as we do it in web2py). Postgresql 8.2 is > never conform. Postgrsql 8.3 I am not sure. > > Version of postgresql which are non-conform and cannot be made conform > to the SQL standrad MUST not be used with web2py because together they > cause a SQL-Injection vulnerability. > > This is a known issue and I believe this is the issue that is > affecting you. > > Your patch only cures the vulnerability for insert-type queries. The > vulnerability would still be there for updates and selects. Using your > approach for selects would result in a much more complex dal. I am not > convinced we should we worried about this as postgresql 8.3 is now > very old. > > There is also the possibility that I am wrong. That you are using a > more recent version of postgresql and something else it putting in a > non-conformal mode. If that is the case we need to investigate more... > > Massimo > > On Sep 1, 7:52 pm, nick name <[email protected]> wrote: > > > > > > > > > I've just opened issue > > #404<http://code.google.com/p/web2py/issues/detail?id=404>: datetime gets > > downgraded to 1-sec resolution when inserting to database - > > example and full details there. And just 90 minutes before that, someone > > else submitted issue > > #403<http://code.google.com/p/web2py/issues/detail?id=403>, > > which deals with textual vs. parametric SQL queries. > > > Both issues stem from (a) web2py expanding every query to be textual, and > > (b) not properly representing/escaping field values. My proposed solution to > > #404 is to add some control to the textual datetime representation. The > > patch included in #403 switches postgresql to work with parametric queries > > (thus bypassing the escaping issue), but still uses the same textual > > representation. > > > I think it should be possible to combine them robustly, by letting represent > > either return a string (in which case it is textually inserted), or some > > kind of wrapped value object, in which case the query gets a '%s' or '?' in > > the text, and the underlying value is passed to dbapi as a parameter. > > > Massimo / Jonathan / other web2py gurus - does this make sense?

