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多进程通信Queue、Pipe、Value、Array实例
Nov 21 Python
python修改操作系统时间的方法
May 18 Python
python中的代码编码格式转换问题
Jun 10 Python
总结python实现父类调用两种方法的不同
Jan 15 Python
Python基于正则表达式实现文件内容替换的方法
Aug 30 Python
使用python实现http及ftp服务进行数据传输的方法
Oct 26 Python
python dlib人脸识别代码实例
Apr 04 Python
python爬虫项目设置一个中断重连的程序的实现
Jul 26 Python
Python实现Restful API的例子
Aug 31 Python
keras 读取多标签图像数据方式
Jun 12 Python
Anaconda的安装与虚拟环境建立
Nov 18 Python
解决pycharm 格式报错tabs和space不一致问题
Feb 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
正则表达式语法
2006/10/09 Javascript
PHP 和 MySQL 基础教程(三)
2006/10/09 PHP
PHP闭包(Closure)使用详解
2013/05/02 PHP
php多用户读写文件冲突的解决办法
2013/11/06 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
基于Django的python验证码(实例讲解)
2017/10/23 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
2018/06/11 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
自我鉴定书范文
2013/10/02 职场文书
园长自我鉴定
2013/10/06 职场文书
办公室秘书自我鉴定
2014/01/18 职场文书
财产公证书
2014/04/10 职场文书
领导班子自我剖析材料
2014/08/16 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js