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 SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
May 06 Python
使用Python抓取模板之家的CSS模板
Mar 16 Python
一些常用的Python爬虫技巧汇总
Sep 28 Python
Python判断中文字符串是否相等的实例
Jul 06 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
windows 10 设定计划任务自动执行 python 脚本的方法
Sep 11 Python
Python 类属性与实例属性,类对象与实例对象用法分析
Sep 20 Python
keras的siamese(孪生网络)实现案例
Jun 12 Python
通过Python实现Payload分离免杀过程详解
Jul 13 Python
python操作ini类型配置文件的实例教程
Oct 30 Python
python之openpyxl模块的安装和基本用法(excel管理)
Feb 03 Python
基于tensorflow权重文件的解读
May 26 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编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
php从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
php中session退出登陆问题
2014/02/27 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
JS 密码强度验证(兼容IE,火狐,谷歌)
2010/03/15 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
FF IE浏览器修改标签透明度的方法
2014/01/27 Javascript
javascript的事件触发器介绍的实现
2014/06/05 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
尝试动手制作javascript放大镜效果
2015/12/25 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
js截取字符串功能的实现方法
2017/09/27 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
centos系统升级python 2.7.3
2014/07/03 Python
你真的了解Python的random模块吗?
2017/12/12 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
python工具——Mimesis的简单使用教程
2021/01/16 Python
详解android与HTML混合开发总结
2018/06/06 HTML / CSS
linux面试题参考答案(2)
2015/12/06 面试题
党员党性分析材料
2014/02/17 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS