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 + openpyxl处理excel2007文档思路以及心得
Jul 14 Python
Python中实现从目录中过滤出指定文件类型的文件
Feb 02 Python
使用python实现http及ftp服务进行数据传输的方法
Oct 26 Python
python3 实现验证码图片切割的方法
Dec 07 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
Python设计模式之备忘录模式原理与用法详解
Jan 15 Python
Python中常用的8种字符串操作方法
May 06 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
PyQt5使用QTimer实现电子时钟
Jul 29 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
Dec 09 Python
python生成大写32位uuid代码
Mar 03 Python
Windows下Anaconda安装、换源与更新的方法
Apr 17 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
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
Laravel数据库读写分离配置的方法
2019/10/13 PHP
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
angular.bind使用心得
2015/10/26 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
javaScript实现一个队列的方法
2020/07/14 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
在Python中进行自动化单元测试的教程
2015/04/15 Python
使用Python在Windows下获取USB PID&VID的方法
2019/07/02 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
python Scrapy框架原理解析
2021/01/04 Python
Django如何重置migration的几种情景
2021/02/24 Python
python SOCKET编程基础入门
2021/02/27 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
Java如何读取CLOB字段
2013/10/10 面试题
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
师范应届毕业生自荐信
2013/11/18 职场文书
大学生职业规划前言模板
2013/12/27 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
Python学习之异常中的finally使用详解
2022/03/16 Python
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技