首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与没有注入的子字符串相比

与没有注入的子字符串相比
EN

Stack Overflow用户
提问于 2017-05-03 16:43:22
回答 1查看 130关注 0票数 0

sql-查询在python模块中生成。

数据库是PostgreSQL。

在sql-query中,有一个与子字符串的比较:

代码语言:javascript
复制
'''
SELECT *
FROM TableTemp
WHERE "SomeColumn" LIKE '%{0}%'
'''.format(<some_string>)

如果字符串是:

代码语言:javascript
复制
%' --

则支票将始终返回"True“。

此外,这也是一个进行sql注入的机会。

提示符,如何正确地处理一个字符串,该字符串在搜索时被认为是正确的,但是没有崩溃请求,并且存在sql注入?

UPD:

问题解决了。评注中的决定

EN

回答 1

Stack Overflow用户

发布于 2017-05-03 16:49:31

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

代码语言:javascript
复制
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()

演示:

代码语言:javascript
复制
>>> 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',)]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43765725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档