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实现的百度站长自动URL提交小工具
Jun 27 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
Apr 05 Python
基于wxpython开发的简单gui计算器实例
May 30 Python
Python中数字以及算数运算符的相关使用
Oct 12 Python
Python基础之getpass模块详细介绍
Aug 10 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
Feb 15 Python
Python动态强类型解释型语言原理解析
Mar 25 Python
用 Python 制作地球仪的方法
Apr 24 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
Jun 11 Python
Python中的特殊方法以及应用详解
Sep 20 Python
Python 操作SQLite数据库的示例
Oct 16 Python
Python的三个重要函数详解
Jan 18 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/12/09 PHP
php中static静态变量的使用方法详解
2010/06/04 PHP
PHP迭代器的内部执行过程详解
2013/11/12 PHP
php中in_array函数用法探究
2014/11/25 PHP
php对象工厂类完整示例
2018/08/09 PHP
求解开jscript.encode代码的asp函数
2007/02/28 Javascript
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
js中用window.open()打开多个窗口的name问题
2014/03/13 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
2015/04/20 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
2017/03/03 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
vue配置接口域名方法总结
2019/05/12 Javascript
详解小程序如何改变onLoad的执行时机
2019/11/01 Javascript
vue-quill-editor的使用及个性化定制操作
2020/08/04 Javascript
[50:21]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/19 DOTA
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
HTML5边玩边学(2)基础绘图实现方法
2010/09/21 HTML / CSS
美国社交购物市场:MassGenie
2019/02/18 全球购物
我的画教学反思
2014/04/28 职场文书
区级文明单位申报材料
2014/05/15 职场文书
给校长的建议书300字
2014/05/16 职场文书
离婚协议书标准格式
2014/10/04 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
创业计划书之废品回收
2019/09/26 职场文书
浅谈python中的多态
2021/06/15 Python