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 enumerate遍历数组示例应用
Sep 06 Python
python基础教程之数字处理(math)模块详解
Mar 25 Python
用Python输出一个杨辉三角的例子
Jun 13 Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
Dec 29 Python
Python3中_(下划线)和__(双下划线)的用途和区别
Apr 26 Python
django-rest-swagger对API接口注释的方法
Aug 29 Python
python修改文件内容的3种方法详解
Nov 15 Python
python返回数组的索引实例
Nov 28 Python
Python基于pyecharts实现关联图绘制
Mar 27 Python
Django ORM filter() 的运用详解
May 14 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
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
织梦模板标记简介
2007/03/11 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
2010/02/09 PHP
判断PHP数组是否为空的代码
2011/09/08 PHP
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
php 定义404页面的实现代码
2012/11/19 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
vue.js将unix时间戳转换为自定义时间格式
2017/01/03 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
详解A标签中href=&quot;&quot;的几种用法
2017/08/20 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
Vue项目安装插件并保存
2019/01/28 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
JavaScript日期库date-fn.js使用方法解析
2020/09/09 Javascript
Python完全新手教程
2007/02/08 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
2019/02/08 Python
Python循环实现n的全排列功能
2019/09/16 Python
python 有效的括号的实现代码示例
2019/11/11 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
浅谈keras中的目标函数和优化函数MSE用法
2020/06/10 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
个人实用的自我评价范文
2013/11/23 职场文书
函授自我鉴定范文
2014/02/06 职场文书
《草原》教学反思
2014/02/15 职场文书
行政副总岗位职责
2014/02/23 职场文书
2015年班组长工作总结
2015/04/10 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
浅谈Python中对象是如何被调用的
2022/04/06 Python