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 Tkinter GUI编程入门介绍
Mar 10 Python
python字典基本操作实例分析
Jul 11 Python
Python函数中的函数(闭包)用法实例
Mar 15 Python
Python如何读取MySQL数据库表数据
Mar 11 Python
Django的信号机制详解
May 05 Python
使用python 和 lint 删除项目无用资源的方法
Dec 20 Python
python实现隐马尔科夫模型HMM
Mar 25 Python
python使用百度文字识别功能方法详解
Jul 23 Python
Kears+Opencv实现简单人脸识别
Aug 28 Python
浅析NumPy 切片和索引
Sep 02 Python
python时间time模块处理大全
Oct 25 Python
Django通过设置CORS解决跨域问题
Nov 26 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学习笔记之二 php入门知识
2011/01/12 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
actionscript与javascript的区别
2011/05/25 Javascript
jquery mobile实现拨打电话功能的几种方法
2013/08/05 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
2013/08/23 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
Vue 获取数组键名的方法
2018/06/21 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
2020/06/02 jQuery
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
py中的目录与文件判别代码
2008/07/16 Python
Python中强大的命令行库click入门教程
2016/12/26 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
python配置文件写入过程详解
2019/10/19 Python
Python导入数值型Excel数据并生成矩阵操作
2020/06/09 Python
英国探险旅游专家:Explore
2018/12/20 全球购物
集世界奢侈品和设计师品牌的意大利精品买手店:Tessabit
2019/08/17 全球购物
局部内部类是否可以访问非final变量?
2013/04/20 面试题
21岁生日感言
2014/02/27 职场文书
乡镇信息公开实施方案
2014/03/23 职场文书
5.12护士节演讲稿
2014/04/30 职场文书
员工安全生产责任书
2014/07/22 职场文书
幼儿园家长安全责任书
2014/07/22 职场文书
幼儿教师师德师风自我剖析材料
2014/09/29 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
在CSS中使用when/else的方法
2022/01/18 HTML / CSS