首页 > 其他分享 >django开发的safe过滤器适用

django开发的safe过滤器适用

时间:2023-08-04 22:26:02浏览次数:26  
标签:username obj safe django html 过滤器 article

django_safe

在自己开发的博客系统当中,如果使用django框架,那么在发布博客内容的时候,希望可以发布一些被渲染过的样式文本,比如说图片等。

下面是发布文章用到的代码

# views.py
def article_detail(request,username,article_id):
    user = UserInfo.objects.filter(username=username).first()
    blog = user.blog
    article_obj = Article.objects.filter(pk = article_id).first()
    # print(blogs.title)
    # content = getClassificationData(username)
    # return render(request,"article_detail.html",locals())
    # 在Django的视图函数中,locals()函数被用来将当前作用域的局部变量以字典形式传递给模板。它是Python内置函数,返回的是包含当前作用域所有局部变量的字典。
    return render(request, "article_detail.html",{"username":username,"blog":blog, "article_obj":article_obj})

#article_detail.html
{% extends 'base.html' %}

{% block content %}
    <h3 class="text-center">{{ article_obj.title }}</h3>
    <div class="cont">
        {{ article_obj.content }}
{#     加入safe可以拿掉对标签的转义#}
    </div>

{% endblock %}

例如我现在用最简单的<h3>regina</h3>

image-20230804215245026

image-20230804215307126

得到的数据并不是一个我们期待的三级标题的样式,而是原封不动的字符串。这是因为django在我们存入数据库的时候进行的转义,将标签进行了转换存入了数据库。

image-20230804215512439

所以如果我们想得到一个html样式的文本,就要前端的过滤器safe.

image-20230804215632351

image-20230804220043452

再次运行的时候我们就能获得相应的标签了。

image-20230804220121983

但是问题就在于如果我们添加了safe过滤器,拿掉了转义功能,就有可能造成xss存储型攻击,因为我们的数据是保存到数据库里的,例如下图:

image-20230804220401426

image-20230804220413993

这样就会造成永久性的对客户端发起的xss攻击,如果进行payload构造就会泄漏更多的信息。所以在后期我们不能依赖django的转义,我们还是需要在文本处理时就进行转义,保证我们的标签样式可以构造出来的同时,也可以防止这种攻击。

标签:username,obj,safe,django,html,过滤器,article
From: https://www.cnblogs.com/ivanlee717/p/17607195.html

相关文章

  • django(ORM、数据库)
    一单表(增、删、改、查)1测试脚本'''只想测试django中的某一个py文件内容,那么可以不用书写前后端交互的形式而是直接写一个测试脚本即可'''#脚本代码无论是写在应用下的tests.py,还是自己单独开设py文件都可以#测试环境的准备,去manage.py中拷贝前四行代码,然后自己写两......
  • 外键字段的增删改查、多表查询、正反向的概念、子查询、多表查询之连表查询、聚合函数
    外键字段的增删改查多对多的外键增删改查图书和作者是多对多,借助于第三张表实现的,如果想绑定图书和作者的关系,本质上就是在操作第三方表操作第三张表问题:让你给图书添加一个作者,他俩的关系可是多对多让你给图书id=2添加一个作者id=1add方法book_obj=models.Book.objects......
  • 扩展Django:实现自己的manage命令
    我们都用过Django的django-admin.py和manage.py。django-admin.py是一个命令行工具,可以执行一些管理任务,比如创建Django项目。而manage.py是在创建每个Djangoproject时自动添加在项目目录下的,只是对manage.py的一个简单包装,其功能是将Djangoproject放到sys.path目录中,同时设置DJ......
  • Django-4.2博客开发教程:初识模板(九)
    一、模板简介为了更好的维护和展示页面数据,使用直接返回数据显然是呆板的,不够美观,不够灵活,所以要使用模板。模板一般都放到项目根目录下的templates文件夹里。模板包含一些基础的HTML代码和一些特殊的语法,通过特殊的语法将数据动态的插入HTML页面中。特殊的语法中有一些变量......
  • websocke在django中使用
    目录一、websocket介绍:二、后端1.安装(基于django3.x)2.settings配置3.修改asgi文件(默认不支持websocket,只支持http)一、websocket介绍:channels4.0之后默认不带Daphne服务器了。解决方案可以有两种:1.指定channels的版本为3.x;2.安装时使用pip3install-Uchannels[“dap......
  • Django 模型(数据库)
    Django模型是与数据库相关的,与数据库相关的代码一般写在 models.py本节的代码:(Django1.6,Python2.7测试环境)learn_models.zip大家可以按照我的步骤来开始做:django-admin.pystartprojectlearn_models#新建一个项目cdlearn_models#......
  • Django之models模型层2
    一、多表查询之连表查询(基于双下划线的查询)1、2、3、  二、聚合查询(aggregate)1、2、   三、分组查询annotate 1、 2、  四、F与Q查询  五、django中如何开启事务 ......
  • django 1.7 manage.py 详解
    django自从1.7之后解决了很多问题,并且对于数据库的操作带来了几个新命令用以解决数据迁移问题,今天开始看看文档学习一下。部分内容来源于网络Django自1.7之后增加了类似South的migration功能,修改Model后可以在不影响现有数据的前提下重建表结构。这真是个千呼万唤始......
  • Django Rest Framework 教程及API向导
    DjangoRestFramework教程及API向导。一、请求(Request)REST_FRAMEWORK中的Request扩展了标准的HttpRequest,为REST_FRAMEWORK增加了灵活的request解析和request认证。1、请求.data:获取请求的主体,相当于request.POST和request.FILES.query_params:  request.GET的重命名.p......
  • Django常见出错解决方案汇总
    一、模板类型错误:错误原因:在models中漏掉了return:classUserProfile(models.Model):"""功能说明:扩展用户---------------------------------------------------------------------------修改人修改时间修改原因......