使用MySQLdb在Python中执行这样的SQL查询是否安全?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用MySQLdb在Python中执行这样的SQL查询是否安全?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1470字,纯文字阅读大概需要3分钟。
内容图文
![使用MySQLdb在Python中执行这样的SQL查询是否安全?](/upload/InfoBanner/zyjiaocheng/906/22a411d7c34143c0980953abf803fed8.jpg)
我注意到大多数消息来源说在Python中执行SQL语句的最佳实践是这样的:
cursor.execute( 'select * from coworkers where name = :1 and clue > :2', [ name, clue_threshold ] )
其他消息来源说
cursor.execute( "select * from coworkers where name = %s and clue > %s", ( name, clue_threshold ) )
我觉得非常相似.
无论如何,我一直在做的是创建一个字典并存储值.例如,初始字典biz_info如下所示:
biz_info = {
'business' : None,
'name' : None,
'neighborhood' : None,
'address' : None,
'city' : None,
'state' : None,
'zip_code' : None,
'latitude' : None,
'longitude' : None,
'phone' : None,
'url' : None,
'yelp_url' : None,
}
然后我像这样执行SQL语句
execute_sql( cur, "insert into " + TABLE_BIZ_NAME + """ values (
NULL,
%(name)s,
%(neighborhood)s,
%(address)s,
%(city)s,
%(state)s,
%(zip_code)s,
%(latitude)s,
%(longitude)s,
%(phone)s,
%(url)s,
%(yelp_url)s,
NULL
)"""
, biz_info )
这样可以安全地防止sql注入吗?我想使用词典来存储信息,因为它更容易管理.
说实话,我甚至不完全确定在参数化查询中使用%,%s,%d和%()s之间的区别是什么.基本上我所知道的就是不使用
cursor.execute( "select * from coworkers where name = '%s' and clue > %d" % ( name, clue_threshold ) )
解决方法:
用于将参数传递给sql命令字符串的方式取决于数据库(例如,sqlite使用?).
根据MySQLdb documentation,您可以使用paramstyle参数来设置格式化字符串(格式或pyformat)的首选方式.
您的问题中的第一个示例似乎不受支持.无论如何,我会说,只要你不像上一个例子那样格式化整个字符串,你就可以安全,因为可以假设查询参数将被正确转义.
内容总结
以上是互联网集市为您收集整理的使用MySQLdb在Python中执行这样的SQL查询是否安全?全部内容,希望文章能够帮你解决使用MySQLdb在Python中执行这样的SQL查询是否安全?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。