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函数缺省值与引用学习笔记分享
Feb 10 Python
python任务调度实例分析
May 19 Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
Python 模板引擎的注入问题分析
Jan 01 Python
python实现的正则表达式功能入门教程【经典】
Jun 05 Python
python将控制台输出保存至文件的方法
Jan 07 Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 Python
Python进度条的制作代码实例
Aug 31 Python
python基于三阶贝塞尔曲线的数据平滑算法
Dec 27 Python
在Pytorch中计算自己模型的FLOPs方式
Dec 30 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
基于python图书馆管理系统设计实例详解
Aug 05 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关于array_multisort多维数组排序的使用说明
2011/01/04 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
PDO::setAttribute讲解
2019/01/29 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
判断脚本加载是否完成的方法
2009/05/26 Javascript
JavaScript移除数组元素减少长度的方法
2013/09/05 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
json格式数据的添加,删除及排序方法
2016/01/21 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
vue中实现回车键登录功能
2020/02/19 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
zbar解码二维码和条形码示例
2014/02/07 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
Django框架模板介绍
2019/01/15 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
Django微信小程序后台开发教程的实现
2020/06/03 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
医护人员英文求职信范文
2013/11/26 职场文书
青年文明号口号
2014/06/17 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
个人自荐书范文
2015/03/09 职场文书
文艺晚会开场白
2015/05/29 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书