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中的,导入不要导入错了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python中防止sql注入的方法详解

    前言 大家应该都知道现在web漏洞之首莫过于sql了,不管使用哪种语言进行web后端开发,只要使用了关系型数据库,可能都会遇到sql注入攻击问题.那么在Python web开发的过程中sql注入是怎么出现的呢,又是怎么去解决这个问题的? 当然,我这里并不想讨论其他语言是如何避免sql注入的,网上关于PHP(博主注:据说是世界上最屌的语言)防注入的各种方法都有,Python的方法其实类似,这里我就举例来说说. 起因 漏洞产生的原因最常见的就是字符串拼接了,当然,sql注入并不只是拼接一种情况,还有

  • Python实现SQL注入检测插件实例代码

    扫描器需要实现的功能思维导图 爬虫编写思路 首先需要开发一个爬虫用于收集网站的链接,爬虫需要记录已经爬取的链接和待爬取的链接,并且去重,用 Python 的set()就可以解决,大概流程是: 输入 URL 下载解析出 URL URL 去重,判断是否为本站 加入到待爬列表 重复循环 SQL 判断思路 通过在 URL 后面加上AND %d=%d或者OR NOT (%d>%d) %d后面的数字是随机可变的 然后搜索网页中特殊关键词,比如: MySQL 中是 SQL syntax.*MySQL Micr

  • 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 res

  • python django 原生sql 获取数据的例子

    如下所示: node2:/django/mysite/blog#cat views.py 1, # -*- coding: utf-8 -*- from __future__ import unicode_literals # from django.shortcuts import render, render_to_response from .models import * # Create your views here. from django.http import HttpResp

  • Python sql注入 过滤字符串的非法字符实例

    我就废话不多说了,还是直接看代码吧! #coding:utf8 #在开发过程中,要对前端传过来的数据进行验证,防止sql注入攻击,其中的一个方案就是过滤用户传过来的非法的字符 def sql_filter(sql, max_length=20): dirty_stuff = ["\"", "\\", "/", "*", "'", "=", "-", &quo

  • 使用Python防止SQL注入攻击的实现示例

    文章背景 每隔几年,开放式Web应用程序安全项目就会对最关键的Web应用程序安全风险进行排名.自第一次报告以来,注入风险高居其位!在所有注入类型中,SQL注入是最常见的攻击手段之一,而且是最危险的.由于Python是世界上最流行的编程语言之一,因此了解如何防止Python SQL注入对于我们来说还是比较重要的 那么在写这篇文章的时候我也是查询了国内外很多资料,最后带着问题去完善总结: 什么是Python SQL注入以及如何防止注入 如何使用文字和标识符作为参数组合查询 如何安全地执行数据库中的查

  • 手把手教你用Django执行原生SQL的方法

    前言 Hey,各位小伙伴,这次怎么来玩一下,如何使用Django执行原生SQL. 我们都知道,Python在web界的扛把子--Django,可谓是集大成为统一,各种各样的插件.forms组件.model模型.Admin后台等等,后面我会专门出文章娓娓道来,反正就是一个字,NB. 本次就来学一下,如何在Django执行原生语句. 起因 在使用Django时,一般情况下,我们使用Django自带的model查询是没有问题的,基本能满足80%的问题 但是,但是,那20%就不要了吗???肯定不行哎,小

  • 利用Python Django实现简单博客系统

    第一节 - 基础 1. 简单的导览图,学会不迷路 对 Django 的评价:借用李清照的<鹧鸪天 桂花>来表达, 暗淡轻黄体性柔.情疏迹远只香留.何须浅碧深红色,自是花中第一流. 梅定妒,菊应羞.画阑开处冠中秋.骚人可煞无情思,何事当年不见收. Django makes it easier to build better Web apps more quickly and with less code. 容易上手,开发速度快 囊括了网站开发中的用户管理,内容管理,网站地图,RSS等常用的插件

  • python django事务transaction源码分析详解

    python Django事务 网上关于django1.6的事务资料很多,但是1.8的却搜不到任何资料,自己要用的时候费了不少劲就是不行,现在记下要用的人少走弯路 version:Django 1.8 事务官方文档 事务中文文档里面介绍很多方法,不一一赘述,按照文档即可,下面只分析下atomic方法的源码 按照官方文档 transaction.atomic 有两种用法装饰器和上下文管理器 # atomic() 方法 # from django.db import transaction ####

  • XSS & SQL注入

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  X Web Security - XSS & more X  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  作者: CyberPhreak 翻译: 黯魂 [S.S.T] ~介绍 在这篇文章中我将说明所有关于XSS以及更多相关的知识.通过这篇文档,我希望能让你明白什么是XSS,为什么使用XSS,以及怎样使用XSS.一旦你学会了,你将需要发挥自己的创造力,因为大多数人都修补了简单的XSS漏洞.但是他们所忘记做的是修补比

随机推荐