Changeset 292

Show
Ignore:
Timestamp:
01/26/08 16:52:11 (1 year ago)
Author:
johnbywater
Message:

Fixed startswith method SQL-injection attack vulnerability.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/dm/db.py

    r273 r292  
    803803                    mapper = kwds[metaAttr.domName] 
    804804                    del kwds[metaAttr.domName] 
     805 
     806                    # Todo: Whether this causes the snag in sqlobject>=0.8? 
     807                     
     808                    metaAttrDbName = metaAttr.dbName + 'ID' 
    805809                    if mapper: 
    806                         kwds[metaAttr.dbName +'ID'] = mapper.id 
     810                        kwds[metaAttrDbName] = mapper.id 
    807811                    else: 
    808                         kwds[metaAttr.dbName +'ID'] = None 
     812                        kwds[metaAttrDbName] = None 
    809813                else: 
    810814                    value = kwds[metaAttr.domName] 
     
    815819 
    816820    def startsWith(self, value, attributeName, **kwds): 
     821        sqlSafeValue = sqlrepr(value, 'postgres')[1:-1] # drop quotes 
    817822        dbName = self.getAttributeDbName(attributeName) 
    818823        sqlSafeName = self.makeSqlName(dbName) 
    819         sqlLike = "UPPER(%s) LIKE UPPER('%s')" % (sqlSafeName, value+'%') 
     824        sqlLike = "UPPER(%s) LIKE UPPER('%s')" % (sqlSafeName, sqlSafeValue+'%') 
    820825        sqlWhere = " ( " + sqlLike + " ) " 
    821826        self.coerceKwds(kwds)