首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python2.7(Sqlite3)到Safe,安全变量(防止SQL注入)

Python2.7(Sqlite3)到Safe,安全变量(防止SQL注入)
EN

Stack Overflow用户
提问于 2018-06-05 14:47:31
回答 1查看 106关注 0票数 2
代码语言:javascript
复制
if instance = "PROD":
     dblink = ('db9_pub',)
elif instance = "BETA":
     dblink = ('dbq9_pub',)
elif instance = "TEST"
     dblink = ('dbt9_pub',)

#Pre-defined SQL Statements    

table1_select = ("""select * from example.table1@? """)
table1_insert = ("""insert into example.table1@? (SQL_SELECT_STATEMNT) """)

conn1 = cx_Oracle.connect(logininfo)
cursor1 = conn1.cursor()

cursor1.execute(table1_select,(dblink))
cursor1.execute(table1_insert,(dblink))

因此,我即将开始编写许多python脚本,这些脚本需要将变量传递到SQL语句中。有些会像发布的脚本那样更安全,有些则需要防范SQL注入攻击。我想了解各种可变技术的使用与哪种技术最合适之间的区别。

** %s,'%s',?,:1对我来说都是一样的。为了安全的代码,什么是合适的方法?**我想我已经解决了这个问题,我需要?s因为我正在使用的API。

顺便说一句,发布的脚本正在抛出一个错误:非法变量名称/数字,所以我显然甚至不理解它的基本应用。

=============编辑:我在一个页面(http://bobby-tables.com/python)上找到了这个信息,它实际上帮助了一些人。它帮助我确定要使用哪个版本的占位符,但没有告诉我如何防范SQL注入。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 22:24:19

在上面的代码中,您不能使用指定DBLink的查询字符串中的变量。只有在允许表达式的地方才允许绑定变量,而且它们永远不会被解释为数据库对象(表名、列名、函数名等)。但是,由于您似乎通过链式if语句完全控制了DBLink,所以(在本例中)将DBLink连接到查询字符串中是安全的:

代码语言:javascript
复制
if instance = "PROD":
     dblink = ('db9_pub',)
elif instance = "BETA":
     dblink = ('dbq9_pub',)
elif instance = "TEST"
     dblink = ('dbt9_pub',)

#Pre-defined SQL Statements    

table1_select = ("""select * from example.table1@%s """%(dblink))
table1_insert = ("""insert into example.table1@%s (SQL_SELECT_STATEMNT) """%(dblink))

conn1 = cx_Oracle.connect(logininfo)
cursor1 = conn1.cursor()

cursor1.execute(table1_select)
cursor1.execute(table1_insert)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50702966

复制
相关文章

相似问题

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