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中使用HTMLParser解析html实例
Feb 08 Python
python创建关联数组(字典)的方法
May 04 Python
python中将字典形式的数据循环插入Excel
Jan 16 Python
Python实现带参数的用户验证功能装饰器示例
Dec 14 Python
Python考拉兹猜想输出序列代码实践
Jul 05 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
Oct 23 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 Python
jupyter notebook 写代码自动补全的实现
Nov 02 Python
python多线程和多进程关系详解
Dec 14 Python
python周期任务调度工具Schedule使用详解
Nov 23 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 数组二分法查找函数代码
2010/02/16 PHP
phpmyadmin 常用选项设置详解版
2010/03/07 PHP
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
Javascript实现禁止输入中文或英文的例子
2014/12/09 Javascript
js数组常见操作及数组与字符串相互转化实例详解
2015/11/10 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
浅析Bootstrip的select控件绑定数据的问题
2016/05/10 Javascript
如何使用bootstrap框架 bootstrap入门必看!
2017/04/13 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
Python读写Redis数据库操作示例
2014/03/18 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
用 Python 制作地球仪的方法
2020/04/24 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
澳大利亚手袋、珠宝和在线时尚精品店:The Way
2019/12/21 全球购物
劳资专员岗位职责
2013/12/27 职场文书
大学毕业生通用自我评价
2014/01/05 职场文书
创建文明城市标语
2014/06/16 职场文书
学校领导干部民主生活会整改方案
2014/09/29 职场文书
校运动会广播稿300字
2014/10/07 职场文书
诉讼授权委托书
2014/10/15 职场文书
婚前协议书范本两则
2014/10/16 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
2016保送生自荐信范文
2016/01/29 职场文书
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python
MYSQL如何查看操作日志详解
2022/05/30 MySQL
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS