您可能以前见过,但我基本上是为了避免MySQL注入,所以我使用Python将查询格式化如下:
if "username" in form:
username = form["username"].value
else:
success = 0
error = "User Name is Missing"
cur.execute("SELECT COUNT(*) FROM users WHERE screenName=':1'",[username])
results = int(cur.fetchall()[0][0])
这会抛出一个错误:
^{pr2}$你知道怎么回事吗? 谢谢
您没有指定您正在使用的库,但是假设它符合Python-DB-API,您可能需要将
execute
行改为:根据OP的评论进行编辑:
使用
%s
是防止SQL注入的当前标准。我不知道你链接的答案里的帖子是什么意思。。。需要记住的是,这个问题的答案是“不具有建设性”,而且这个答案也已经有7年的历史了,所以很有可能当时的问题是,这个答案可能已经不再适用了。在但是
%s
意味着库(在execute
方法中)处理所有转义和引用,是防止注入的方法。(与使用常规插值相反,比如说,通过format
,这将使其暴露于注入中。)注意,这是非常具体的不是
'%s'
,然后在execute
调用中使用foo % bar
,而是一个未加引号的%s
,并将参数作为第二个参数传递给execute
。在例如,我使用psycopg2,它完全兼容dbapi,它的current doc描述了使用
%s
来防止注入。在相关问题 更多 >
编程相关推荐