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 相关文章推荐
Windows下安装python2.7及科学计算套装
Mar 05 Python
python实现批量改文件名称的方法
May 25 Python
关于numpy中np.nonzero()函数用法的详解
Feb 07 Python
python 设置文件编码格式的实现方法
Dec 21 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
实例讲解python中的序列化知识点
Oct 08 Python
用python实现刷点击率的示例代码
Feb 21 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
Aug 23 Python
Django中自定义查询对象的具体使用
Oct 13 Python
python关于调用函数外的变量实例
Dec 26 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
Apr 14 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
Jun 17 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
利用“多说”制作留言板、评论系统
2015/07/14 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
php微信公众号开发之简答题
2018/10/20 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
2016/06/07 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
最常见的左侧分类菜单栏jQuery实现代码
2016/11/28 Javascript
浅析Ajax语法
2016/12/05 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
nodejs创建简易web服务器与文件读写的实例
2017/09/07 NodeJs
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
python中map()函数的使用方法示例
2017/09/29 Python
Python 加密的实例详解
2017/10/09 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
对Xpath 获取子标签下所有文本的方法详解
2019/01/02 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
python re.match()用法相关示例
2021/01/27 Python
Python与C/C++的相互调用案例
2021/03/04 Python
如何在网站上添加谷歌定位信息
2016/04/16 HTML / CSS
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
日语翻译个人求职的自我评价
2013/10/14 职场文书
求职者怎样写自荐信
2014/04/13 职场文书
充分就业社区汇报材料
2014/05/07 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
自我推荐信怎么写
2015/03/24 职场文书
活动宣传稿范文
2015/07/23 职场文书
2016年党员公开承诺书范文
2016/03/24 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书
golang 实现并发求和
2021/05/08 Golang