python+Django实现防止SQL注入的办法


Posted in Python onOctober 31, 2019

先看看那种容易被注入的SQL

id = 11001
    sql = """
    SELECT
      id,
      name,
      age
    FROM
      student
    WHERE
      id = """+id+""" 
    """
    cursor = connection.cursor()
    try:
      cursor.execute(sql)
      result = cursor.fetchall()
      for result1 in result:
        // 代码块
        pass
    finally:
      cursor.close()

一般来说写SQL语句在程序中,若有where条件一般都可能会去直接拼接,到那时这种方式容易被SQL注入,首先说明下什么是SQL的注入,简单来说就是你写的SQL被别人在页面上拼接了SQL。比如拼接1=1这种条件,如果登录接口被注入1=1那么就可以随意进入你的程序了。所以才要防止SQL的注入。

下面再来看看防止SQL的注入

id = 11001
 params = []
    sql = """
    SELECT
      id,
      name,
      age
    FROM
      student
    WHERE
      id = %s
    """
    params.append(id)
    cursor = connection.cursor()
    try:
      cursor.execute(sql, params)
      result = cursor.fetchall()
      for result1 in result:
        // 代码块
        pass
    finally:
      cursor.close()

我们把直接拼接的条件变量放入集合再把集合带入执行SQL的方法,就可以避免被注入的风险,在SQL的条件中使用%s进行站位,要注意的是这个%s是有顺序的,比如说上面这个SQL后面在跟一个条件name=%s那么下面的params集合也要多加一个元素params.append(name)这个时候name是在id后面的在集合中。这样可以一一对应,但如果要是把params.append(name)写在了params.append(id)前面SQL执行就会出现id=name and name = id 的条件就乱了,甚至还会报错。
使用connection完毕之后一定要记得close,connection是django.db中的,导入不要导入错了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
小结Python用fork来创建子进程注意事项
Jul 03 Python
linux 下实现python多版本安装实践
Nov 18 Python
在Python的循环体中使用else语句的方法
Mar 30 Python
Python 专题二 条件语句和循环语句的基础知识
Mar 19 Python
使用python在本地电脑上快速处理数据
Jun 22 Python
Python将多个excel文件合并为一个文件
Jan 03 Python
Python Requests库基本用法示例
Aug 20 Python
解决Python2.7中IDLE启动没有反应的问题
Nov 30 Python
简单了解python单例模式的几种写法
Jul 01 Python
python被修饰的函数消失问题解决(基于wraps函数)
Nov 04 Python
python中sympy库求常微分方程的用法
Apr 28 Python
C3 线性化算法与 MRO之Python中的多继承
Oct 05 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 #Python
基于Python+Appium实现京东双十一自动领金币功能
Oct 31 #Python
如何关掉pycharm中的python console(图解)
Oct 31 #Python
使用python实现男神女神颜值打分系统(推荐)
Oct 31 #Python
python实现根据文件格式分类
Oct 31 #Python
Python简易计算器制作方法代码详解
Oct 31 #Python
python3 pillow模块实现简单验证码
Oct 31 #Python
You might like
php上传文件的增强函数
2010/07/21 PHP
PHP教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
PHP中通过trigger_error触发PHP错误示例
2015/06/23 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
JS获取后台Cookies值的小例子
2013/03/04 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
2016/10/25 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
Element UI框架中巧用树选择器的实现
2018/12/12 Javascript
Vue项目中配置pug解析支持
2019/05/10 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
创建nuxt.js项目流程图解
2020/03/13 Javascript
[03:42]2014DOTA2西雅图国际邀请赛7月9日TOPPLAY
2014/07/09 DOTA
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python使用Supervisor来管理进程的方法
2015/05/28 Python
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
Jones New York官网:美国女装品牌,受白领女性欢迎
2019/11/26 全球购物
科室工作个人总结的自我评价
2013/10/29 职场文书
全国道德模范事迹
2014/02/01 职场文书
宣传工作经验材料
2014/06/02 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
校长四风对照检查材料
2014/09/27 职场文书
舞出我人生观后感
2015/06/16 职场文书
2016三八妇女节慰问信
2015/11/30 职场文书
深入理解go缓存库freecache的使用
2022/02/15 Golang