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实现批量转换文件编码(批转换编码示例)
Jan 23 Python
举例详解Python中循环语句的嵌套使用
May 14 Python
python通过apply使用元祖和列表调用函数实例
May 26 Python
Python两个内置函数 locals 和globals(学习笔记)
Aug 28 Python
Python学习入门之区块链详解
Jul 25 Python
python编程使用selenium模拟登陆淘宝实例代码
Jan 25 Python
python实现单向链表详解
Feb 08 Python
Python下使用Scrapy爬取网页内容的实例
May 21 Python
Python3.8中使用f-strings调试
May 22 Python
详解Python 切片语法
Jun 10 Python
基于python2.7实现图形密码生成器的实例代码
Nov 05 Python
python 模拟在天空中放风筝的示例代码
Apr 21 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
默默简单的写了一个模板引擎
2007/01/02 PHP
PHP书写格式详解(必看)
2016/05/23 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
php 实现银联商务H5支付的示例代码
2019/10/12 PHP
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
Js获取当前日期时间及格式化代码
2016/09/17 Javascript
jQuery设置Easyui校验规则(推荐)
2016/11/21 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
Vue基础配置讲解
2019/11/29 Javascript
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python的绘图工具matplotlib使用实例
2014/07/03 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
python实现教务管理系统
2018/03/12 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
django-filter和普通查询的例子
2019/08/12 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
用python写爬虫简单吗
2020/07/28 Python
Python基于gevent实现文件字符串查找器
2020/08/11 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
Ajax的优点和缺点
2014/11/21 面试题
公务员的自我鉴定
2013/10/26 职场文书
中英双版中文教师求职信
2013/10/27 职场文书
护士思想汇报
2014/01/12 职场文书
2015感人爱情寄语
2015/02/26 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
指导教师推荐意见
2015/06/05 职场文书