flask web学习之flask与http(四)

文章目录

      • 一、重定向进阶功能
        • 1.1 重定向回上一个页面
        • 1.2 对URL进行安全验证
      • 二、使用Ajax技术发送异步请求
        • 2.1 什么是Ajax
        • 2.2使用jQuery发送Ajax请求
      • 三、服务器推送
      • 四、web安全规范
        • 1. 注入攻击
        • 2. XSS攻击
        • 3. CSRF攻击

一、重定向进阶功能

1.1 重定向回上一个页面

有时候,我们在某些界面执行操作一些操作后,不希望界面跳转到其他指定网页上,而希望网页能重定向为用户刚才浏览的界面,以便继续完成操作,例如在某个页面需要登录后才能进行操作,我们希望登录后不跳转到主页界面,而是重定向为刚才操作的页面,从而能够方便的继续刚才未完成的操作。

  1. 获取上一个页面的URL
    要重定向为上一个页面,最关键的是要获取上一个页面的URL。获取的方法主要有两种:
  • HTTP referer
    是一个用来记录请求发源地址的HTTP首部字段,即访问来源。当用户在某个网站点击链接时,浏览器发送请求的数据中包含的HTTP_REFERER字段记录了用户所在的原站点URL。
    在Flask中,我们可以通过request.referrer进行获取。
return redirect(request.referrer)# 为了防止用户出于隐私保护设置清除了或修改了该字段,添加备用选项
return redirect(request.referrer or url_for('index'))  
  • 查询参数
    除了从referer中获取之外,我们还可以在URL中手动加入包含当前页面URL的查询参数,一般命名为next
@app.route('/index')
def index():return '<a href="%s">登陆</a>' % url_for("login", next=request.full_path)@app.route("/login")
def login():执行登陆操作......return rediect(request.args.get("next"))# 添加备选项return rediect(request.args.get("next"), url_for("index")))

通用重定向函数,避免重复代码

def redirect_back(default="hello", **kwargs):for target in request.args.get('next'), request.referrer:if target:return redirect(target)return redirect(url_for(default, **kwargs))@app.route("/login")
def login:return redirect_back()
1.2 对URL进行安全验证

由于referer和next容易被篡改的特性,如果不对这些值进行验证,则会形成开放重定向漏洞。
URL验证函数

for urllib.parse import urlparse, urljoin
from flask import requestdef is_safe_url(target):ref_url = urlparse(request.host_url)test_url = ulparse(urljoin(request.host_url, target))return test_url.scheme in ("http", "https") and ref_ul.netloc == test_url.netloc# 在重定向通用代码中使用
def redirect_back(default="hello", **kwargs):for target in request.args.get('next'), request.referrer:if not target:continueif is_safe_ul(target):return redirect(target)return redirect(url_for(default, **kwargs))

这段代码定义了一个名为 is_safe_url() 的函数,用于判断给定的 URL 是否安全。

具体来说,is_safe_url() 函数接受一个参数 target,表示要检查的 URL。在函数体内,首先使用 urlparse() 函数从当前请求的 request.host_url 中解析出引用 URL(即当前页面的 URL),并将其赋值给 ref_url 变量。然后,使用 urljoin() 函数将 request.host_url 和 target 合并成完整的 URL,并使用 urlparse() 函数解析出测试 URL,并将其赋值给 test_url 变量。

最后,函数会判断 test_url 是否安全。具体来说,它会检查 test_url 的协议是否为 “http” 或 “https”,并且检查 test_url 的域名与 ref_url 的域名是否相同。如果这两个条件都满足,那么 is_safe_url() 函数将返回 True,表示 URL 是安全的;否则,返回 False,表示 URL 不安全。

二、使用Ajax技术发送异步请求

2.1 什么是Ajax

Ajax(Asynchronous JavaScript and XML)是一种在网页中使用的技术,通过在后台与服务器进行异步通信,实现页面内容的局部更新,而无需刷新整个页面。

传统的网页交互是同步的,即用户发起请求后,需要等待服务器返回完整的页面并刷新整个页面才能看到结果。而使用 Ajax 技术,可以在不刷新整个页面的情况下,通过发送异步请求,获取服务器返回的数据,并使用 JavaScript 动态更新页面的部分内容。

Ajax 基于以下几个核心的技术:

  • XMLHttpRequest 对象:用于在后台与服务器进行数据交换。通过创建 XMLHttpRequest 对象,可以发送请求和接收服务器返回的数据。
  • JavaScript 和 DOM 操作:通过 JavaScript 代码和 DOM(文档对象模型)操作,可以动态地修改页面的内容,将服务器返回的数据插入到指定的位置,更新页面的部分内容,而不需要刷新整个页面。
  • 异步请求和回调函数:Ajax 请求是异步的,意味着浏览器在发送请求后,不会阻塞页面的其他操作,而是继续执行后续的 JavaScript 代码。当服务器返回数据后,可以通过回调函数处理这些数据,更新页面或执行其他操作。

Ajax 技术它可以用于实现实时搜索、动态加载内容、表单验证、无刷新提交等功能。

2.2使用jQuery发送Ajax请求

jQuery中文网

并不一定需要使用jQuery来实现Ajax请求,可以使用原生的XMLHttpRequest,其它JavaScript框架内置的Ajax接口,或这使用更新的Fetch API来发送异步请求。

三、服务器推送

服务器推送(Server Push)是一种在客户端与服务器之间建立持久连接,并由服务器主动向客户端发送数据的通信方式。它与传统的客户端发起请求、服务器响应的模式不同,可以实现实时更新数据或推送通知给客户端,而无需客户端主动请求。
常见实现方式和协议:

名称说明
传统轮询在特定的时间内,客户端使用Ajax技术不断向服务器发起HTTP请求,然后获取的新的数据并更新页面。
长轮询和传统相比,如果服务器一直没有返回数据,那就保持连接一直开启,直到有数据时才返回,取回数据后再次发送另一个请求。
Server-Sent Events(SSE)SSE 是一种基于 HTTP 的服务器推送技术。通过 SSE,服务器可以使用单向的持久连接向客户端发送数据。客户端通过 EventSource API 接收服务器发送的事件流,实现实时更新数据或接收通知。
WebSocketWebSocket 是一种支持全双工通信的网络协议,它提供了双向的持久连接,使得服务器可以主动向客户端发送数据。通过 WebSocket,服务器可以实时地将更新的数据或通知推送给客户端,而客户端也可以向服务器发送消息。

四、web安全规范

1. 注入攻击

重点注意SQL注入攻击

  • 原理:在编写SQL语句时,如果直接将用户传入的数据作为参数使用字符串拼接的方式插入SQL语句中,那么攻击者就可以通过注入其它语句来执行攻击操作,进行数据库增删改查。
  • 防范:使用orm,验证输入类型,参数化查询,转义特殊字符等。
2. XSS攻击
  • 原理:又称跨站脚本攻击,历史悠久,是注入攻击的一种,通过将代码注入被攻击者的网站中,用户一但访问就会执行被注入的恶意脚本。
  • 防范:HTML转义,验证用户输入
3. CSRF攻击
  • 原理:又称跨站伪造请求,利用用户已经通过身份验证的会话来执行未经授权的操作的攻击方式。攻击者通过欺骗用户访问恶意网站或点击恶意链接,利用用户的身份来发送伪造的请求。
  • 防范:使用正确的HTTP请求,csrf令牌校验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/592162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

是否需要跟上鸿蒙(OpenHarmony)开发岗位热潮?

前言 自打华为2019年发布鸿蒙操作系统以来&#xff0c;网上各种声音百家争鸣。尤其是2023年发布会公布的鸿蒙4.0宣称不再支持Android&#xff0c;更激烈的讨论随之而来。 本文没有宏大的叙事&#xff0c;只有基于现实的考量。 通过本文&#xff0c;你将了解到&#xff1a; Har…

虚幻UE 材质-进阶边界混合之WAT世界对齐纹理

边界混合前篇&#xff1a;虚幻UE 材质-边界混合之PDO像素深度偏移量 上一篇主要讲材质相似或者不同的两个物体之间的边界混合 这一篇主要讲自建材质且相同的两个物体之间的边界混合 文章目录 一、世界对齐纹理二、世界对齐纹理实验1、制作材质 三、进一步优化 一、世界对齐纹理…

【算法题】33. 搜索旋转排序数组

题目 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], ..., nums[n-1], nums[0], nums[…

Unity ShaderGraph 技能冷却转圈效果

Unity ShaderGraph 技能冷却转圈效果 前言项目场景布置代码编写ShaderGraph 连线总结 参考 前言 遇到一个需求&#xff0c;要展示技能冷却的圆形遮罩效果。 项目 场景布置 代码编写 Shader核心的就两句 // 将uv坐标系的原点移到纹理中心 float2 uv i.uv - float2(0.5, 0…

Linux账户安全

一.Linux账户与组的基本概念 在Limux操作系统中&#xff0c;每一个文件和程序都归属于一个特定的 “用户”。每个用户都由一个唯一的身份来标识&#xff0c;这个标识称为用户ID (UserID, UID )。系统中的每一个用户也至少需要属于一个“用户分组”&#xff0c;即由系统管理员所…

IIS通过ARR实现负载均衡

一、实现整体方式介绍 项目中部署在windows服务器上的项目,需要部署负载均衡,本来想用nginx来配置的,奈何iis上有几个项目,把80端口和443端口占用了,nginx就用不了了(因为通过域名访问的,必须要用80和443端口),只能通过IIS的方式实现了。 这里用2个服务在一台机器上…

【心得】PHP文件包含高级利用攻击面个人笔记

目录 一、nginx日志文件包含 二、临时文件包含 三、php的session文件包含 四、pear文件包含 五 、远程文件包含 文件包含 include "/var/www/html/flag.php"; 一 文件名可控 $file$_GET[file]; include $file.".php"; //用php伪协议 &#xff0…

【一文入门】Git常用命令集锦--分支操作和版本管理篇

前言 Git 是一种分布式版本控制系统&#xff0c;可以帮助团队协作开发、管理和维护代码&#xff0c;提高代码质量和效率&#xff0c;掌握常用版本管理命令可以帮助我们更好地管理代码变更和历史记录。下面我将介绍开发中常用的一些Git分支操作和版本管理命令 1 分支操作 1.1 …

PowerBI:如何在以SharePoint文件做为数据源?

问题描述&#xff1a; 有朋友最近询问&#xff0c;在PowerBI中如何以SharePoint中的文件做为数据源&#xff0c;进行报告的设计开发&#xff1f; 今天抽一些时间&#xff0c;为大家做一个样例&#xff0c;供大家参考。 解决方案&#xff1a; 找到将要使用的SharePoint中文件…

【LeetCode 面试经典150题】27. Remove Element 移除元素

27. Remove Element 题目描述 Given an integer array nums and an integer val, remove all occurrences of val in nums in-place. The order of the elements may be changed. Then return the number of elements in nums which are not equal to val. Consider the num…

Alice Bob推出16量子比特量子处理单元——“Helium 1”

​&#xff08;图片来源&#xff1a;网络&#xff09; 容错量子计算机硬件开发商Alice & Bob宣布已成功流片一款新芯片“Helium 1”&#xff0c;希望能借助该芯片降低随着量子比特数增加而提高的错误率&#xff0c;这是该公司第一个纠错逻辑量子比特&#xff08;纠错量子计…

test ui-04-testcomplete 入门介绍

About TestComplete TestComplete是一款适用于各种应用程序类型和技术的自动化测试环境&#xff0c;包括&#xff08;但不限于&#xff09;Windows、.NET、WPF、Visual C、Visual Basic、Delphi、CBuilder、Java以及Web应用程序和服务。 TestComplete既适用于功能测试&#x…

k8s的声明式资源管理

在k8s当中支持两种声明资源的方式&#xff1a; 1、 yaml格式&#xff1a;主要用于和管理资源对象 2、 json格式&#xff1a;主要用于在API接口之间进行消息传递 声明式管理方法(yaml)文件 1、 适合对资源的修改操作 2、 声明式管理依赖于yaml文件&#xff0c;所有的内容都…

python股票分析挖掘预测金融大数据获取方法和实现(2)

本人股市多年的老韭菜了&#xff0c;各种股票分析书籍&#xff0c;技术指标书籍阅历无数&#xff0c;萌发想法&#xff0c;何不自己开发个股票预测分析软件&#xff0c;选择python因为够强大&#xff0c;它提供了很多高效便捷的数据分析工具包&#xff0c; 我们已经初步的接触…

DDD+SOA的事件驱动微服务读写分离架构

DDD DDD是Eric Evans于2003年出版的书名&#xff0c;同时也是这个架构设计方法名的起源 Eric Evans “领域驱动设计之父”&#xff0c;世界杰出软件建模专家。 他创建了Domain Language公司&#xff0c;致力于帮助公司机构创建与业务紧密相关的软件。 他在世界各地宣讲领域驱动…

DrGraph原理示教 - OpenCV 4 功能 - 二值化

二值化&#xff0c;也就是处理结果为0或1&#xff0c;当然是针对图像的各像素而言的 1或0&#xff0c;对应于有无&#xff0c;也就是留下有用的&#xff0c;删除无用的&#xff0c;有用的部分&#xff0c;就是关心的部分 在图像处理中&#xff0c;也不仅仅只是1或0&#xff0c;…

test dbtest-02-Liquibase 是一个数据库变更管理工具

拓展阅读 DbUnit-01-数据库测试工具入门介绍 database tool-01-flyway 数据库迁移工具介绍 什么是 Liquibase&#xff1f; Liquibase 是一种开源的数据库架构变更管理解决方案&#xff0c;它使你能够轻松地管理数据库变更的修订版本。 Liquibase使得参与应用程序发布流程的…

采用 SO-8 封装的 LDO(如 MIC5209BM),用于密封环境时,为保证热应力降额满足要求,通常热耗不应超过 0.3W。

在密封环境中使用SO-8封装的LDO(如MIC5209BM)时,通常会对热耗进行限制,以确保热应力降额满足要求。其主要原因是; 封装热阻 SO-8封装的热阻较高,这意味着它在将内部产生的热量传递到周围环境时效率不高。热阻可以用θJA(连接到环境的热阻)和θJC(连接到芯片的热阻)来…

element-ui table-自定义表格某列的表头样式或者功能

自带表格 自定义表格某列的表头样式或者功能 <el-table><el-table-column :prop"date">//自定义表身每行数据<template slot-scope"scope">{{scope.row[scope.column.label] - ? - : scope.row[scope.column.label]}}</template>…

向爬虫而生---Redis 基石篇1 <拓展str>

前言: 本来是基于scrapy-redis进行讲解的,需要拓展一下redis; 包含用法,设计,高并发,阻塞等; 要应用到爬虫开发中,这些基础理论我觉得还是有必要了解一下; 所以,新开一栏! 把redis这个环节系统补上,再转回去scrapy-redis才好深入; 正文: Redis是一种内存数据库&#xff0c…