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 相关文章推荐
linux 下实现python多版本安装实践
Nov 18 Python
Python中的tuple元组详细介绍
Feb 02 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
Nov 23 Python
Python读取txt某几列绘图的方法
Oct 14 Python
Python读取mat文件,并保存为pickle格式的方法
Oct 23 Python
Python静态类型检查新工具之pyright 使用指南
Apr 26 Python
django表单的Widgets使用详解
Jul 22 Python
wxpython实现按钮切换界面的方法
Nov 19 Python
python循环嵌套的多种使用方法解析
Nov 29 Python
Pytorch根据layers的name冻结训练方式
Jan 06 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
Apr 21 Python
无需压缩软件,用python帮你操作压缩包
Aug 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
PHP编程网上资源导航
2006/10/09 PHP
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
PageSwitch插件实现100种不同图片切换效果
2015/07/28 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
Python生成随机验证码的两种方法
2015/12/22 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
Python+微信接口实现运维报警
2016/08/27 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
文秘专业毕业生就业推荐信
2013/11/08 职场文书
英文简历中的自我评价用语
2013/12/09 职场文书
学生党员思想汇报
2013/12/28 职场文书
银行办理业务介绍信
2014/01/18 职场文书
办公室文员自荐书
2014/02/03 职场文书
运动会口号8字
2014/06/07 职场文书
应届生求职信范文
2014/06/30 职场文书
停水通知
2015/04/16 职场文书
mysql优化
2021/04/06 MySQL
JavaScript实例 ODO List分析
2022/01/22 Javascript
Golang Web 框架Iris安装部署
2022/08/14 Python