【Django | 安全防护】防止XSS跨站脚本攻击

简介: >🤵‍♂️ 个人主页: [@计算机魔术师](https://cpt-magician.blog.csdn.net/?type=blog)👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。🌐 推荐一款找工作神器网站: [牛客网🎉🎉|笔试题库|面试经验|实习招聘内推 ](https://www.nowcoder.com/link/pc_csdncpt_jsjmss_python) 还没账户的小伙伴 [速速点击链接跳转牛客网登录注册](https://www.nowcoder.com/link/pc_csdncpt_jsjmss_python) 开始刷爆题库,速速通关

在这里插入图片描述

🤵‍♂️ 个人主页: @计算机魔术师
👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。

🌐 推荐一款找工作神器网站: 牛客网🎉🎉|笔试题库|面试经验|实习招聘内推
还没账户的小伙伴 速速点击链接跳转牛客网登录注册 开始刷爆题库,速速通关面试吧🙋‍♂️

该文章收录专栏
---【Django | 项目开发】从入门到上线 专栏---

@[toc]

一、XSS攻击过程原理

在这里插入图片描述
创建一个 XXS脚本漏洞作为演示

我们创建视图函数返回模型对象的字段

  1. 创建视图函数
"""
直接返回 HTML内容的视图,(存在XXS cross site scripting 漏洞,能被攻击者使用)
"""


def resume_datail(request, pk):
    try:
        resume = Resume.objects.get(pk=pk)
        content = f"name: {resume.username} <br> introduction: {resume.candidate_introduction} <br>"
        return HttpResponse(content)
    except Resume.DoesNotExist:
        raise Http404(_("resume does not exist"))
  1. 添加路由环境(只能开发环境使用,由于演示漏洞环境,我们放在添加最后面路由)
from django.conf import settings

# 测试是否为开发环境
if settings.DEBUG:

    urlpatterns += [
        re_path(r'^resume/detail/(?P<pk>\d+)/$', jobs.views.resume_datail, name='resume_datail')
    ]

这个视图函数只返回了两个字段,但已经足够用来演示XXS攻击原理了
在这里插入图片描述

二、假设我是一名攻击者🐱‍👤

原理

攻击者将自己的个人信息填写上 javascript脚本,那么我们作为用户去查看字段时,会 直接渲染 信息内容,此时就会 运行攻击脚本script进行发送信息,删除用户等操作
  1. 创建一名攻击者用户,在个人信息填上攻击的代码

在这里插入图片描述

  1. 跳转到该页面(可以看到直接显示cookie信息😱😱)

在这里插入图片描述
可以看到,攻击者可以通过此方法得到cookie ,还可以对得到用户的更多信息,以及增删改查操作,这是很危险的! 🤯

三、修复漏洞🔨

我们可以用函数html.escape()对其做一个转义最建议的方法是使用系统的render方法django自带模板机制渲染页面

  • html.escape()方法很简单,就是将"&", "<" 和 ">" 符号变成 HTML-safe sequences,这样就可以将字符串单纯表示出来

html.escape()源码

def escape(s, quote=True):
    """
    Replace special characters "&", "<" and ">" to HTML-safe sequences.
    If the optional flag quote is true (the default), the quotation mark
    characters, both double quote (") and single quote (') characters are also
    translated.
    """
    s = s.replace("&", "&amp;") # Must be done first!
    s = s.replace("<", "&lt;")
    s = s.replace(">", "&gt;")
    if quote:
        s = s.replace('"', "&quot;")
        s = s.replace('\'', "&#x27;")
    return s

我们将之前的视图函数添加该方法

import html
def resume_datail(request, pk):
    try:
        resume = Resume.objects.get(pk=pk)
        content = f"name: {resume.username} <br> introduction: {resume.candidate_introduction} <br>"

        return HttpResponse(html.escape(content))
    except Resume.DoesNotExist:
        raise Http404(_("resume does not exist"))

可以看到此时改脚本不会运行🎉

在这里插入图片描述

但是通常情况不用该方法,建议使用render渲染模板,或者使用我们的通用类视图。

                    🤞到这里,如果还有什么疑问🤞
        🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩
            🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳
相关文章
|
11月前
|
JavaScript 安全 前端开发
同源策略如何防止 XSS 攻击?
【10月更文挑战第31天】同源策略通过对 DOM 访问、Cookie 访问、脚本执行环境和跨源网络请求等多方面的严格限制,构建了一道坚实的安全防线,有效地防止了 XSS 攻击,保护了用户在网络浏览过程中的数据安全和隐私。
331 49
|
11月前
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
545 4
|
11月前
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
369 2
|
11月前
|
存储 安全 Go
Web安全基础:防范XSS与CSRF攻击的方法
【10月更文挑战第25天】Web安全是互联网应用开发中的重要环节。本文通过具体案例分析了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的原理及防范方法,包括服务器端数据过滤、使用Content Security Policy (CSP)、添加CSRF令牌等措施,帮助开发者构建更安全的Web应用。
474 3
|
11月前
|
SQL 存储 安全
什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?
理解并防范XSS、SQL注入和CSRF攻击是Web应用安全的基础。通过采用严格的输入验证、使用安全编码实践以及实现适当的身份验证和授权机制,可以有效防止这些常见的Web攻击,保障应用程序和用户的数据安全。
543 0
|
4月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
128 1
|
11月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
620 45
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
419 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
469 7
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
430 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发