Skip to content

Commit cfe2447

Browse files
authored
Merge pull request #3 from PeaceWorksTechnologySolutions/add_args_to_prevent_sql_injection
To prevent SQL injection, allow MiddleKit queries to be made with parms passed separately
2 parents 6ef0f46 + 84a1419 commit cfe2447

File tree

4 files changed

+13
-13
lines changed

4 files changed

+13
-13
lines changed

MiddleKit/Run/MySQLObjectStore.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@ def retrieveLastInsertId(self, conn, cur):
9191
def dbapiModule(self):
9292
return MySQLdb
9393

94-
def _executeSQL(self, cur, sql):
94+
def _executeSQL(self, cur, sql, clausesArgs=None):
9595
try:
96-
cur.execute(sql)
96+
cur.execute(sql, clausesArgs)
9797
except MySQLdb.Warning:
9898
if not self.setting('IgnoreSQLWarnings', False):
9999
raise

MiddleKit/Run/PostgreSQLObjectStore.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ def retrieveNextInsertId(self, klass):
7575
def dbapiModule(self):
7676
return dbi
7777

78-
def _executeSQL(self, cur, sql):
78+
def _executeSQL(self, cur, sql, clausesArgs=None):
7979
try:
80-
cur.execute(sql)
80+
cur.execute(sql, clausesArgs)
8181
except Warning:
8282
if not self.setting('IgnoreSQLWarnings', False):
8383
raise

MiddleKit/Run/SQLObjectStore.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ def fetchObject(self, aClass, serialNum, default=NoDefault):
348348
return objects[0]
349349

350350
def fetchObjectsOfClass(self, aClass,
351-
clauses='', isDeep=True, refreshAttrs=True, serialNum=None):
351+
clauses='', isDeep=True, refreshAttrs=True, serialNum=None, clausesArgs=None):
352352
"""Fetch a list of objects of a specific class.
353353
354354
The list may be empty if no objects are found.
@@ -379,7 +379,7 @@ def fetchObjectsOfClass(self, aClass,
379379
if isDeep:
380380
for subklass in klass.subklasses():
381381
deepObjs.extend(self.fetchObjectsOfClass(
382-
subklass, clauses, isDeep, refreshAttrs, serialNum))
382+
subklass, clauses, isDeep, refreshAttrs, serialNum, clausesArgs))
383383

384384
# Now get objects of this exact class
385385
objs = []
@@ -391,7 +391,7 @@ def fetchObjectsOfClass(self, aClass,
391391
clauses = 'where %s=%d' % (klass.sqlSerialColumnName(), serialNum)
392392
if self._markDeletes:
393393
clauses = self.addDeletedToClauses(clauses)
394-
conn, cur = self.executeSQL(fetchSQLStart + clauses + ';')
394+
conn, cur = self.executeSQL(fetchSQLStart + clauses + ';', clausesArgs=clausesArgs)
395395
try:
396396
for row in cur.fetchall():
397397
serialNum = row[0]
@@ -429,7 +429,7 @@ def klassForId(self, id):
429429

430430
## Self utility for SQL, connections, cursors, etc. ##
431431

432-
def executeSQL(self, sql, connection=None, commit=False):
432+
def executeSQL(self, sql, connection=None, commit=False, clausesArgs=None):
433433
"""Execute the given SQL.
434434
435435
This will connect to the database for the first time if necessary.
@@ -450,18 +450,18 @@ def executeSQL(self, sql, connection=None, commit=False):
450450
self._sqlEcho.write('SQL %04i. %s %s\n' % (self._sqlCount, timestamp, sql))
451451
self._sqlEcho.flush()
452452
conn, cur = self.connectionAndCursor(connection)
453-
self._executeSQL(cur, sql)
453+
self._executeSQL(cur, sql, clausesArgs)
454454
if commit:
455455
conn.commit()
456456
return conn, cur
457457

458-
def _executeSQL(self, cur, sql):
458+
def _executeSQL(self, cur, sql, clausesArgs=None):
459459
"""Invoke execute on the cursor with the given SQL.
460460
461461
This is a hook for subclasses that wish to influence this event.
462462
Invoked by executeSQL().
463463
"""
464-
cur.execute(sql)
464+
cur.execute(sql, clausesArgs)
465465

466466
def executeSQLTransaction(self, transaction, connection=None, commit=True):
467467
"""Execute the given sequence of SQL statements and commit as transaction."""

MiddleKit/Run/SQLiteObjectStore.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ def dbapiModule(self):
2626
def dbVersion(self):
2727
return "SQLite %s" % sqlite.sqlite_version
2828

29-
def _executeSQL(self, cur, sql):
29+
def _executeSQL(self, cur, sql, clausesArgs=None):
3030
try:
31-
cur.execute(sql)
31+
cur.execute(sql, clausesArgs)
3232
except sqlite.Warning:
3333
if not self.setting('IgnoreSQLWarnings', False):
3434
raise

0 commit comments

Comments
 (0)