与无注入的子串比较

2024-09-30 00:22:09 发布

您现在位置:Python中文网/ 问答频道 /正文

sql查询是在python模块中生成的。
数据库是PostgreSQL。你知道吗

在sql查询中,存在与子字符串的比较:

'''
SELECT *
FROM TableTemp
WHERE "SomeColumn" LIKE '%{0}%'
'''.format(<some_string>)

如果字符串为:

%' --

然后检查将始终返回“True”。
另外,这是一个进行sql注入的机会

提示,如何正确处理一个字符串,它被认为是在搜索,但没有崩溃的请求和有sql注入?你知道吗

升级版:
问题解决了。评注中的决定


Tags: 模块字符串from数据库trueformatsqlstring
1条回答
网友
1楼 · 发布于 2024-09-30 00:22:09

将字符串作为一个整体传递给psycopg2,作为.execute()的第二个参数。引用:http://initd.org/psycopg/docs/usage.html#passing-parameters-to-sql-queries

import psycopg2    

conn = psycopg2.connect("dbname=test user=postgres")
curs = conn.cursor()
search_term = 'some string'
search_tuple = ('%{0}%'.format(search_term,) # note that this has to be a container
curs.execute('''select  
                from TableTemp 
                where SomeColumn like %s''',search_tuple).fetchall()

演示:

>>> conn.execute('select * from t').fetchall()
[(u'10:00',), (u'8:00',)]
>>> conn.execute('select * from t where c like ?',('%8%',)).fetchall()
[(u'8:00',)]
>>> conn.execute('select * from t where c like ?',('%:%',)).fetchall()
[(u'10:00',), (u'8:00',)]

相关问题 更多 >

    热门问题