sql-查询在python模块中生成。
数据库是PostgreSQL。
在sql-query中,有一个与子字符串的比较:
'''
SELECT *
FROM TableTemp
WHERE "SomeColumn" LIKE '%{0}%'
'''.format(<some_string>)如果字符串是:
%' --则支票将始终返回"True“。
此外,这也是一个进行sql注入的机会。
提示符,如何正确地处理一个字符串,该字符串在搜索时被认为是正确的,但是没有崩溃请求,并且存在sql注入?
UPD:
问题解决了。评注中的决定
发布于 2017-05-03 16:49:31
您将把字符串作为一个整体传递给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',)]https://stackoverflow.com/questions/43765725
复制相似问题