当前位置: 首页 > news >正文

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令牌校验。

相关文章:

flask web学习之flask与http(四)

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

电子签章Java后端与前端交互签名位置计算

电子签章过程中存在着在网页上对签署文件进行预览、指定签署位置、文件签署等操作&#xff0c;由于图片在浏览器上的兼容性和友好性优于PDF文件&#xff0c;所以一般在网页上进行电子签章时&#xff0c;会先将PDF文件转换成图片&#xff0c;展示给用户。用户在页面上确定好签署…...

为什么选择嬴图?

图数据库、图计算、图中台都是用图论的方式去构造实体间的关联关系&#xff0c;实体用顶点来表达&#xff0c;而实体间的关系用边来表达。图数据库的这种简洁、自由、高维但100%还原世界的数据建模的方式让实体间的关联关系的计算比SQL类的数据库高效成千上万倍。 图&#xff1…...

Python学习之路-编码风格

Python学习之路-编码风格 设计哲学 Python的设计哲学是“优雅”、“明确”、“简单”。它的重要准则被称为“Python之禅”。Python之禅又名PEP 20&#xff0c;在Python解释器内运行import this可以获得完整的列表&#xff0c;下面是我的翻译与解读&#xff1a; 提姆彼得斯&a…...

权威认可!甄知科技猪齿鱼产品荣获信创产品评估证书

近日&#xff0c;依据《信息技术应用创新产品评估规范 第1部分&#xff1a;应用软件》&#xff08;T/SSIA 2001-2022&#xff09;&#xff0c;经过严格评估&#xff0c;甄知科技旗下自主研发的猪齿鱼数智化开发管理平台 V2.0.0&#xff0c;通过信创测试认证&#xff0c;获得上海…...

9. 回文数(Java)

题目描述&#xff1a; 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 例如&#xff0c;121 …...

Python(30):非对称加密算法RSA的使用(openssl生成RSA公私钥对)

Python(30)&#xff1a;非对称加密算法RSA的使用(openssl生成RSA公私钥对) 1、openssl生成RSA公私钥对 1.1、生成RSA公私钥对命令 [rootloaclhost ~]# openssl OpenSSL> genrsa -out rsa_private_key.pem 1024 Generating RSA private key, 1024 bit long modulus .. ...…...

Java学习笔记-day04-NIO核心依赖多路复用小记

NIO允许一个线程同时处理多个连接&#xff0c;而不会因为一个连接的阻塞而导致其他连接被阻塞。核心是依赖操作系统的多路复用机制。 操作系统的多路复用机制 多路复用是一种操作系统的 I/O 处理机制&#xff0c;允许单个进程&#xff08;或线程&#xff09;同时监视多个输入…...

Java+springboot+vue智慧校园源码,数据云平台Web端+小程序教师端+小程序家长端

技术架构&#xff1a; Javaspringbootvue element-ui小程序电子班牌&#xff1a;Java Android演示自主版权。 智慧校园电子班牌人脸识别系统全套源码&#xff0c;包含&#xff1a;数据云平台Web端小程序教师端小程序家长端电子班牌 学生端。 电子班牌系统又称之为智慧班牌&am…...

算法日志的存在核心在于搭建自检系统

"相信每一个人执行与日志有关的任务都会遇到这样难题吧&#xff1f;长达几万行的日志&#xff0c;如果我们单纯用肉眼去一个个排查&#xff0c;那么恐怕所耗费的时间是以天为计量单位了。当然这是一种比较夸张的情况&#xff0c;根据我的项目经验&#xff0c;正常情况是十…...

【2023开发组一等奖】定位家乡味——北京市老乡探店寻味系统

作品介绍 1 需求分析 中国人的身上都系着两根线,一条线牵引着我们去远方,一条线牵引着我们归故乡。在当今社会,我们因为各种各样的原因背起行囊远离故乡去往千里之外的远方,而那暗涌在血脉的乡愁总会使我们在看到家乡菜的时候,心底溢出一种不可言说的温暖。那么,当你在异…...

37-数据类型,一元运算符typeof,字符串string,布尔Boolean,未定义undefined,空null,数组Array

<body><script>// 0.1加0.2不等于0.3&#xff0c;正确的运算方法如下console.log(0.10.2);var x 0.1;var y 0.2;console.log((x*10y*10)/10);</script> </body> 简单数据类型&#xff08;5种&#xff09;&#xff1a;数字number&#xff0c;字符串s…...

zabbix部署

zabbix部署 部署zabbix服务被监测主机部署zabbix-agent2 使用版本 组件版本centos7.9zabbix5.0php7.2.24MariaDB5.5.68 部署zabbix服务 关闭防火墙和selinux [rootnode ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemonLoaded: …...

深入理解Java源码:提升技术功底,深度掌握技术框架,快速定位线上问题

为什么要看源码&#xff1a; 1、提升技术功底&#xff1a; 学习源码里的优秀设计思想&#xff0c;比如一些疑难问题的解决思路&#xff0c;还有一些优秀的设计模式&#xff0c;整体提升自己的技术功底 2、深度掌握技术框架&#xff1a; 源码看多了&#xff0c;对于一个新技术…...

寒假前端第一次作业

1、用户注册&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用户注册</title> …...

【LabVIEW FPGA入门】创建第一个LabVIEW FPGA程序

本教程仅以compactRIO&#xff08;FPGA-RT&#xff09;举例 1.系统配置 1.1软件安装 FPGA-RT 1. LabVIEW Development System (Full or Professional) 2. LabVIEW Real-Time Module 3. LabVIEW FPGA Module 4. NI-RIO drivers 1.2硬件配置 1.使用线缆连接CompactRIO至主机…...

【STM32】STM32学习笔记-USART串口数据包(28)

00. 目录 文章目录 00. 目录01. 串口简介02. HEX数据包03. 文本数据包04. HEX数据包接收05. 文本数据包接收06. 预留07. 附录 01. 串口简介 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式&#xff0c;因为它简单便捷&#xff0c;因此大部分电子设备都支持…...

Java网络爬虫--HttpClient

目录标题 技术介绍有什么优点&#xff1f;怎么在项目中引入&#xff1f; 请求URLEntityUtils 类GET请求带参数的GET请求POST请求 总结 技术介绍 HttpClient 是 Apache Jakarta Common 下的子项目&#xff0c;用来提供高效的、功能丰富的、支持 HTTP 协议的客户端编程工具包。相…...

若依项目的table列表中对每一个字段增加排序按钮(单体版和前后端分离版)

一、目标:每一个字段都添加上下箭头用来排序 只需要更改前端代码,不需要更改后端代码,后面会讲解原理 二、单体版实现方式: 1.在options中添加sortable:true 2.在需要排序的字段中添加sortable:true 三、前后端分离版 1.el-table上添加@sort-change=“handleSortChange”…...

Linux自动化部署脚本

1:最近项目部署比较频繁终于熬不住了 就有下面的这东西 #!/bin/sh #报错停止运行 set -e # 获取tomcat的PID TOMCAT_PID$(ps -ef | grep tomcat | grep -v grep | awk {print $2}) # tomcat的启动文件位置 START_TOMCAT/mnt/tomcat/bin/startup.sh # 项目文件部署位置 PROJECT…...

别再被FFmpeg里的12bpp搞懵了!手把手教你理解YUV420sp与BPP的关系

别再被FFmpeg里的12bpp搞懵了&#xff01;手把手教你理解YUV420sp与BPP的关系 第一次在FFmpeg文档里看到"12bpp"这个描述时&#xff0c;我盯着屏幕愣了半天——RGB24格式不是8bpp吗&#xff1f;YUV420不是应该更节省空间吗&#xff1f;怎么反而变成了12bpp&#xff1…...

可编程逻辑器件(PLD/CPLD/FPGA)核心原理、选型指南与EDA设计实战

1. 项目概述&#xff1a;从怀旧到硬核&#xff0c;聊聊可编程逻辑的“前世今生”那天在网上闲逛&#xff0c;本想找点微马赛克艺术&#xff08;Micromosaic&#xff09;的制作视频&#xff0c;结果算法一个拐弯&#xff0c;把我带回了上世纪七八十年代的《大青蛙布偶秀》&#…...

如何轻松管理你的PS4游戏存档:Apollo工具终极指南

如何轻松管理你的PS4游戏存档&#xff1a;Apollo工具终极指南 【免费下载链接】apollo-ps4 Apollo Save Tool (PS4) 项目地址: https://gitcode.com/gh_mirrors/ap/apollo-ps4 你是否曾经遇到过这样的困扰&#xff1f;辛苦打了几十个小时的游戏进度&#xff0c;因为PS4硬…...

Selenium自动化ChatGPT:绕过API限制,实现Web端高效批量交互

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“Michelangelo27/chatgpt_selenium_automation”。光看名字&#xff0c;你大概能猜到它想做什么&#xff1a;用Selenium自动化操作ChatGPT。这听起来是不是有点“用大炮打蚊子”的感觉&#xff1f;毕…...

TinyTroupe:轻量级智能体协作范式与确定性AI工程实践

1. 项目概述&#xff1a;这不是另一个“小模型”&#xff0c;而是一套轻量级智能体协作范式你可能已经看过不少标题带“Tiny”“Mini”“Lite”的AI项目&#xff0c;它们大多是在说“把大模型压缩一下&#xff0c;跑在手机上”。但 Microsoft 的TinyTroupe完全不是这个路数——…...

为Odoo ERP构建安全的AI数据访问层:基于权限治理的语义查询实践

1. 项目概述&#xff1a;为Odoo ERP构建一个受治理的AI数据访问层如果你正在使用Odoo管理企业业务&#xff0c;同时又希望让AI助手&#xff08;比如Claude、Cursor&#xff09;能够安全地查询销售数据、分析库存状况&#xff0c;而不是让它们直接面对你的生产数据库写SQL&#…...

企业内如何安全地通过Taotoken管理各部门的AI模型使用权限

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业内如何安全地通过Taotoken管理各部门的AI模型使用权限 对于中大型企业而言&#xff0c;引入大模型能力是提升效率的关键一步&a…...

实战复盘:我是如何用Elastic Security+Zeek构建一个小型企业安全监控平台的

实战复盘&#xff1a;Elastic SecurityZeek构建小型企业安全监控平台 当企业规模扩张到50人以上时&#xff0c;网络资产和终端设备数量会呈现指数级增长。去年为某电商团队部署安全系统时&#xff0c;他们的CTO向我展示了一份令人不安的数据&#xff1a;平均每天遭遇23次暴力破…...

Chrome QRCode:浏览器原生二维码生成与解析的极简技术方案

Chrome QRCode&#xff1a;浏览器原生二维码生成与解析的极简技术方案 【免费下载链接】chrome-qrcode :zap: A Chrome plugin to Genrate QRCode of URL / Text, or Decode the QRcode in website. 一个Chrome浏览器插件&#xff0c;用于生成当前URL或者选中内容的二维码&…...

如何快速破解Cursor Pro限制:一键激活AI编程助手的完整指南

如何快速破解Cursor Pro限制&#xff1a;一键激活AI编程助手的完整指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached you…...