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之不要红头文件(1)
Sep 28 Python
使用Python的Tornado框架实现一个一对一聊天的程序
Apr 25 Python
Python爬取APP下载链接的实现方法
Sep 30 Python
浅谈Python 的枚举 Enum
Jun 12 Python
mac系统安装Python3初体验
Jan 02 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 Python
Python使用Shelve保存对象方法总结
Jan 28 Python
详解爬虫被封的问题
Apr 23 Python
python cv2截取不规则区域图片实例
Dec 21 Python
Python decorator拦截器代码实例解析
Apr 04 Python
离线状态下在jupyter notebook中使用plotly实例
Apr 24 Python
python实现取余操作的简单实例
Aug 16 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
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
解析thinkphp的左右值无限分类
2013/06/20 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
学习YUI.Ext基础第一天
2007/03/10 Javascript
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
2012/02/27 Javascript
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
在浏览器中打开或关闭JavaScript的方法
2015/06/03 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
2016/08/21 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
AngularJS创建一个上传照片的指令实例代码
2018/02/24 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
详解python的数字类型变量与其方法
2016/11/20 Python
python线程池(threadpool)模块使用笔记详解
2017/11/17 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
Weblogic和WebSphere不同特点
2012/05/09 面试题
优秀班主任申报材料
2014/12/16 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python