求检查以下代码.
只要是我想通过执行:
db.query(table='users', columns=['name', 'money'], locate={'group': 'customer'}, order_by='money desc', limit=10)
这样的操作来进行查询,以及插入,修改什么的.
但是应该有很大的安全隐患, 因为我用的是 psql, 所以 我可以 $$ 来代替 单引号('),并且过滤掉用户的 $ 符号,这样的话,如果还有安全问题应该是出现在哪里?
以下是 db 类提取出来的两个方法
def group_location(self, locate={}):
cond = dict(locate)
args = []
sql = ' WHERE '
if 'union' in cond:
union = cond['union']
del cond['union']
else:
union = ' AND '
for k, v in cond.items():
if isinstance(v, str):
if v.startswith('%') or v.endswith('%'):
sql += "%s LIKE %%s" % k
else:
sql += "%s=%%s" % k
args.append(v)
elif isinstance(v, int) or isinstance(v, float):
sql += "%s=%%s" % k
args.append(v)
elif isinstance(v, list):
sql += '%s in (%s)' % (k, ','.join(['%s'] * len(v)))
args.extend(v)
sql += union
return sql[:-5], tuple(args)
def query(self, table=None, columns=None, locate={}, order_by='', limit=0):
sql = "SELECT %s FROM %s " % (','.join(columns), table,)
args = ()
if locate:
sql_cond, args = group_location(locate)
sql += sql_cond
if order_by:
sql += ' ORDER BY %s' % order_by
# args += (order_by, )
if limit:
sql += ' LIMIT %s' % limit
# args += (limit, )
cursor = self.__getCursor()
# print(sql, '--sql')
cursor.execute(sql, args)
其实,我也想把 order,limit 里面的东西也放进 args, 但是他会变成奇奇怪怪的东西,所以只好直接拼接
1
dikT OP 求数据库爆破大神回复 - -!
|
2
holystrike 2017-03-24 11:15:59 +08:00 1
sqlmap 走起
|
3
dikT OP @holystrike thanks
|