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和pyqt实现360的CLable控件
Feb 21 Python
python文件操作相关知识点总结整理
Feb 22 Python
Python中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
浅谈python socket函数中,send与sendall的区别与使用方法
May 09 Python
python基础之包的导入和__init__.py的介绍
Jan 08 Python
Python实现PS图像明亮度调整效果示例
Jan 23 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
学生信息管理系统Python面向对象版
Jan 30 Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
Python for循环搭配else常见问题解决
Feb 11 Python
python实现AHP算法的方法实例(层次分析法)
Sep 09 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控制文件下载速度的方法
2015/03/24 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
PHP类相关知识点实例总结
2016/09/28 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
2018/10/10 jQuery
Vue绑定内联样式问题
2018/10/17 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
实现vuex原理的示例
2020/10/21 Javascript
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
[01:14]英雄,所敬略同——2018完美盛典宣传视频4K
2018/12/05 DOTA
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
Python基础教程之异常详解
2019/01/10 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
史上最全面的Java面试题汇总!
2015/02/03 面试题
广告学专业应届生求职信
2013/10/01 职场文书
党员教师一句话承诺
2014/05/30 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
家属答谢词
2015/01/05 职场文书
网络营销计划书
2015/01/17 职场文书
2015年幼儿园安全工作总结
2015/05/12 职场文书
毕业论文答辩演讲稿
2015/06/23 职场文书
Java实现聊天机器人完善版
2021/07/04 Java/Android
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript