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 re正则表达式模块(Regular Expression)
Jul 16 Python
使用Python中的greenlet包实现并发编程的入门教程
Apr 16 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
Sep 28 Python
教你用一行Python代码实现并行任务(附代码)
Feb 02 Python
用python写扫雷游戏实例代码分享
May 27 Python
Python将字符串常量转化为变量方法总结
Mar 17 Python
Python自动化导出zabbix数据并发邮件脚本
Aug 16 Python
Python 类属性与实例属性,类对象与实例对象用法分析
Sep 20 Python
在pytorch中对非叶节点的变量计算梯度实例
Jan 10 Python
使用python求解二次规划的问题
Feb 29 Python
浅谈python3打包与拆包在函数的应用详解
May 02 Python
python程序的组织结构详解
Dec 06 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
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
php实现用户登陆简单实例
2017/04/04 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
jquery实现全屏滚动
2015/12/28 Javascript
JavaScript语言精粹经典实例(整理篇)
2016/06/07 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
详解jQuery简单的表单应用
2016/12/16 Javascript
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
解析python实现Lasso回归
2019/09/11 Python
美国户外烹饪产品购物网站:Outdoor Cooking
2020/01/10 全球购物
城市规划毕业生求职信
2013/10/10 职场文书
分厂厂长岗位职责
2013/12/29 职场文书
保护环境建议书300字
2014/05/13 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
2015年教师节慰问信
2015/03/23 职场文书
学生会招新宣传语
2015/07/13 职场文书
二年级数学教学反思
2016/02/16 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
送给客户微信问候语!
2019/07/04 职场文书
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
MySQL8.0的WITH查询详情
2021/08/30 MySQL
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫