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

 更新时间:2019年10月31日 10:56:44   作者:王先生cc  
这篇文章主要介绍了python+Django实现防止SQL注入的办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

先看看那种容易被注入的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 中的list和array的不同之处及转换问题

    python 中的list和array的不同之处及转换问题

    python中的list是python的内置数据类型,list中的数据类不必相同的,而array的中的类型必须全部相同。这篇文章给大家介绍了python 中的list和array的不同之处及转换问题,需要的朋友参考下吧
    2018-03-03
  • python机器学习pytorch自定义数据加载器

    python机器学习pytorch自定义数据加载器

    这篇文章主要为大家介绍了python机器学习pytorch自定义数据加载器使用示例学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Python实现问题回答小游戏

    Python实现问题回答小游戏

    这篇文章主要介绍了利用Python制作一个简单的知识竞赛小游戏,可以实现回答问题功能,文中的示例代码介绍详细,感兴趣的同学快跟随小编一起学习吧
    2021-12-12
  • 如何用python实现一个HTTP连接池

    如何用python实现一个HTTP连接池

    这篇文章主要介绍了如何用python实现一个HTTP连接池的步骤,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • Python使用pysmb库访问Windows共享文件夹的详细教程

    Python使用pysmb库访问Windows共享文件夹的详细教程

    本教程旨在帮助您使用pysmb库,通过SMB(Server Message Block)协议,轻松连接到Windows共享文件夹,并列举其中的文件与文件夹,此外,我们还将简要介绍如何下载和上传文件,以及如何处理可能遇到的连接错误,需要的朋友可以参考下
    2024-12-12
  • python读文件保存到字典,修改字典并写入新文件的实例

    python读文件保存到字典,修改字典并写入新文件的实例

    下面小编就为大家分享一篇python读文件保存到字典,修改字典并写入新文件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python元组和字典的内建函数实例详解

    python元组和字典的内建函数实例详解

    这篇文章主要介绍了python元组和字典的内建函数,结合实例形式详细分析了Python元组和字典的各种常见内建函数功能与相关使用技巧,需要的朋友可以参考下
    2019-10-10
  • Python supervisor强大的进程管理工具的使用

    Python supervisor强大的进程管理工具的使用

    这篇文章主要介绍了Python supervisor强大的进程管理工具的使用,本文主要跟大家分享在类unix操作系统下supervisor的使用以及一些关于进程的知识,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • ChatGLM-6B+LangChain环境部署与使用实战

    ChatGLM-6B+LangChain环境部署与使用实战

    这篇文章主要介绍了ChatGLM-6B+LangChain环境部署与使用方法,结合实例形式详细分析了ChatGLM-6B+LangChain环境部署相关步骤、实现方法与相关注意事项,需要的朋友可以参考下
    2023-07-07
  • Python装饰器基础概念与用法详解

    Python装饰器基础概念与用法详解

    这篇文章主要介绍了Python装饰器基础概念与用法,结合实例形式详细分析了Python装饰器的概念、功能、用法及相关操作注意事项,需要的朋友可以参考下
    2018-12-12

最新评论