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注入。
发布于 2018-06-05 22:24:19
在上面的代码中,您不能使用指定DBLink的查询字符串中的变量。只有在允许表达式的地方才允许绑定变量,而且它们永远不会被解释为数据库对象(表名、列名、函数名等)。但是,由于您似乎通过链式if语句完全控制了DBLink,所以(在本例中)将DBLink连接到查询字符串中是安全的:
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)https://stackoverflow.com/questions/50702966
复制相似问题