Pyhton中防止SQL注入的方法


Posted in Python onFebruary 05, 2015
c=db.cursor()

max_price=5

c.execute("""SELECT spam, eggs, sausage FROM breakfast

          WHERE price < %s""", (max_price,))

注意,上面的SQL字符串与后面的tuple之间的分隔符是逗号,平时拼写SQL用的是%。

如果按照以下写法,是容易产生SQL注入的:

c.execute("""SELECT spam, eggs, sausage FROM breakfast

          WHERE price < %s""" % (max_price,))

这个和PHP里的PDO是类似的,原理同MySQL Prepared Statements。

Python

Using the Python DB API, don't do this:

# Do NOT do it this way.

cmd = "update people set name='%s' where id='%s'" % (name, id) curs.execute(cmd)

Instead, do this:
cmd = "update people set name=%s where id=%s" curs.execute(cmd, (name, id))

Note that the placeholder syntax depends on the database you are using.
'qmark' Question mark style, e.g. '...WHERE name=?' 'numeric' Numeric, positional style, e.g. '...WHERE name=:1' 'named' Named style, e.g. '...WHERE name=:name' 'format' ANSI C printf format codes, e.g. '...WHERE name=%s' 'pyformat' Python extended format codes, e.g. '...WHERE name=%(name)s'

The values for the most common databases are:

>>> import MySQLdb; print MySQLdb.paramstyle format >>> import psycopg2; print psycopg2.paramstyle pyformat >>> import sqlite3; print sqlite3.paramstyle qmark

So if you are using MySQL or PostgreSQL, use %s (even for numbers and other non-string values!) and if you are using SQLite use ?
Python 相关文章推荐
Python编码时应该注意的几个情况
Mar 04 Python
python中的hashlib和base64加密模块使用实例
Sep 02 Python
朴素贝叶斯算法的python实现方法
Nov 18 Python
python 读取视频,处理后,实时计算帧数fps的方法
Jul 10 Python
Python解决走迷宫问题算法示例
Jul 27 Python
python3 中文乱码与默认编码格式设定方法
Oct 31 Python
解决python Markdown模块乱码的问题
Feb 14 Python
python 定时器每天就执行一次的实现代码
Aug 14 Python
python将邻接矩阵输出成图的实现
Nov 21 Python
python wxpython 实现界面跳转功能
Dec 17 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
Jan 05 Python
python flask框架快速入门
May 14 Python
Windows系统下安装Python的SSH模块教程
Feb 05 #Python
Python 冒泡,选择,插入排序使用实例
Feb 05 #Python
Python中使用Flask、MongoDB搭建简易图片服务器
Feb 04 #Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
Feb 04 #Python
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
Feb 04 #Python
Python、Javascript中的闭包比较
Feb 04 #Python
线程和进程的区别及Python代码实例
Feb 04 #Python
You might like
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
php实现的ping端口函数实例
2014/11/12 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
Three.js快速入门教程
2016/09/09 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
JavaScript实时更新当前的时间的示例代码
2020/07/15 Javascript
Python切片操作实例分析
2018/03/16 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
Python中一般处理中文的几种方法
2019/03/06 Python
使用matplotlib中scatter方法画散点图
2019/03/19 Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
2019/04/23 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
销售自我评价
2013/10/22 职场文书
电台实习生求职信
2014/02/25 职场文书
财务人员担保书
2014/05/13 职场文书
社区健康教育工作方案
2014/06/03 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
2015年毕业生自我鉴定模板
2014/09/19 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书