python+Django实现防止SQL注入的办法
作者:王先生cc 发布时间:2022-05-22 13:13:13
标签: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中的,导入不要导入错了。
来源:https://blog.csdn.net/qq_42010901/article/details/102812513


猜你喜欢
- 在使用一些 Javascript 框架时,或许会看到类似的代码var MyClass = new Class({initialize: fu
- 平时制作页面中可对属性list-style在list-item对象中常用,但用的都不深。一般都设为none重置整个页面就差不多OK,可能很多
- 1.本人第一次学python做出来的,当时满满的成就感,当作纪念!!!!!非常简单,复制即可使用代码块import json#把字符串类型的
- 如何在网站上提供音乐下载?为用户提供歌曲下载,一般有两种方式,一是直接通过Http,浏览器下载,二是通过ftp协议下载。我们来用Http和浏
- oracle10g数据备份 1.用sql/plus developer,选中要备份的数据表,右击选择"Export data&qu
- 不论你做什么样的设计,色彩都是一个不容忽视的问题。色彩以一种“隐蔽”的方式传达的各种信息,这些信息会影响观看者的心理和感受,左右他们的判断和
- 【基本介绍】【格式】:pivot(聚合函数 for 需要转为列的字段名 in(需要转为列的字段值))【说明】:实现将指定字段的字段值转换为列
- 每次和朋友聊天苦于没有表情包,而别人的表情包似乎是取之不尽、用之不竭。作为一个程序员哪能甘愿认输,于是做了一个表情包下载器供大家斗图。首先,
- 要写爬虫爬取大量的数据,就会面临ip被封的问题,虽然可以通过设置延时的方法来延缓对网站的访问,但是一旦访问次数过多仍然会面临ip被封的风险,
- 自动发送邮件功能是我们经常要用到的,比如每天定时统计报表信息,然后自动发送给运营人员,协助运营人员进行业务数据分析。本文是用Python写的
- 在应用程序的开发中,有些输入信息是动态的,比如我们要注册一个员工的工作经历,比如下图如果做成死的,只能填写三个,如果是四个呢?或者更多呢,那
- 1、初识 errgroupWaitGroup 主要用于控制任务组下的并发子任务。它的具体做法就是,子任务 goroutine 执行前通过 A
- 看代码吧~name = r"\u6697\u88d4\u5251\u9b54"print(name.encode(
- 1、Session的存储方式。 session其实分为客户端Session和服务器端Session。 当用户首次与Web服务器建立连接的时候
- 最近一周每天早上起来第一件事,就是打开新闻软件看疫情相关的新闻。了解下自己和亲友所在城市的确诊人数,但纯数字还是缺乏一个直观的概念。那我们来
- 由于python多线程无法发挥多核的作用,因此当计算量很大的时候就需要考虑多进程。只不过多进程比较麻烦一些,进程中通信向来是一件麻烦事。py
- 概述迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。延迟计算或惰性
- 话不多说,直接看示例首先是图片标记的写法<img data-src="/images/image.jpg" alt
- Timedelta转换为Int或Float方式Pandas处理import pandas as pddataSet['t']
- 前言索引(index)是帮助MySQL高效获取数据的数据结构。 它对于高性能非常关键,但人们通常会忘记或误解它。 索引在数据越大的时候越重要