网页源代码检查时隐藏 WebSocket 的后端地址

news2024/11/20 13:19:42

背景

近期在自研如何通过 OpenAI 实现 与ChatGPT 官网一样的聊天对话效果。
用到了 html5+websocket+python 三项技术 , 于是用一天时间自学了一下这方面技术。 当实现了功能之后,就得考虑安全问题:
在用 html5 实现与 websocket 通讯时,如何保证网页源代码检查时看不到 ws 的后端地址? 进而保证安全?

先给大家显摆一下我的成果(雏形),哈哈~
一个 html 文件+一个 python 文件搞定的与 chatgpt 对话。
在这里插入图片描述

为了在网页源代码检查时隐藏 WebSocket 的后端地址,您可以采用以下方法:

方法一:使用 JavaScript 动态生成 WebSocket 连接地址

在 HTML 页面中,不要直接写入 WebSocket 连接地址。而是通过 JavaScript 动态生成 WebSocket 连接地址。这样,当用户查看网页源代码时,将无法直接看到 WebSocket 的后端地址。

例如:

<!DOCTYPE html>
<html>
<head>
  <title>WebSocket Example</title>
  <script>
    function setupWebSocket() {
      // 动态生成 WebSocket 连接地址
      var wsUrl = "wss://" + window.location.hostname + "/websocket";
      var websocket = new WebSocket(wsUrl);

      websocket.onopen = function(event) {
        console.log("WebSocket 连接已打开");
      };

      websocket.onmessage = function(event) {
        console.log("收到消息: " + event.data);
      };

      websocket.onclose = function(event) {
        console.log("WebSocket 连接已关闭");
      };
    }
  </script>
</head>
<body onload="setupWebSocket()">
  <h1>WebSocket Example</h1>
</body>
</html>

方法二:使用后端代码生成 WebSocket 连接地址

在后端代码中生成 WebSocket 连接地址,并将其传递给前端。这样,当用户查看网页源代码时,将无法直接看到 WebSocket 的后端地址。

例如,在 Python 的 Flask 框架中,可以这样做:

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def index():
    ws_url = "wss://" + request.host + "/websocket"
    return render_template("index.html", ws_url=ws_url)

if __name__ == "__main__":
    app.run()

然后,在 HTML 模板中使用传递的 ws_url 变量:

<!DOCTYPE html>
<html>
<head>
  <title>WebSocket Example</title>
  <script>
    function setupWebSocket() {
      var websocket = new WebSocket("{{ ws_url }}");

      websocket.onopen = function(event) {
        console.log("WebSocket 连接已打开");
      };

      websocket.onmessage = function(event) {
        console.log("收到消息: " + event.data);
      };

      websocket.onclose = function(event) {
        console.log("WebSocket 连接已关闭");
      };
    }
  </script>
</head>
<body onload="setupWebSocket()">
  <h1>WebSocket Example</h1>
</body>
</html>

需要注意的是,虽然这些方法可以在一定程度上保护 WebSocket 连接地址,但无法完全阻止有恶意意图的用户找到 WebSocket 地址。因此,建议您在后端实现一定的安全措施,例如验证用户身份、限制连接速率等,以确保 WebSocket 通信的安全。

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

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

相关文章

管理后台项目-05-SKU列表-上下架-详情抽屉效果-深度选择器

目录 1-SKU列表 2-SKU上下架 3-SKU详情 1-SKU列表 当用户点击Sku管理&#xff0c;组件挂载的时候&#xff0c;我们需要获取sku列表信息&#xff1b;但是获取列表方法在分页列表改变页码和每页显示大小的时候也需要触发&#xff0c;我们封装为一个方法。 //sku列表的接口 /adm…

Elasticsearch聚合、自动补全 | 黑马旅游

一、数据聚合 1、聚合的分类 聚合&#xff08;aggregations&#xff09;可以实现对文档数据的统计、分析、运算。 聚合常见有三类&#xff1a; 桶聚合 Bucket&#xff1a;对文档数据分组&#xff0c;并统计每组数量 TermAggregation&#xff1a;按照文档字段值分组&#xf…

中国电子学会2023年03月青少年软件编程Scratch图形化等级考试试卷二级真题(含答案)

中国电子学会2023年03月青少年软件编程Scratch图形化等级考试试卷二级 1.小猫的程序如图所示&#xff0c;积木块的颜色与球的颜色一致。点击绿旗执行程序后&#xff0c;下列说法正确的是&#xff1f;&#xff08;C&#xff09;&#xff08;2分&#xff09; A.小猫一直在左右移…

JDBC详解(二):获取数据库连接(超详解)

JDBC详解&#xff08;二&#xff09;&#xff1a;获取数据库连接 前言一、要素一&#xff1a;Driver接口实现类1、Driver接口介绍2、加载与注册JDBC驱动 二、要素二&#xff1a;URL三、要素三&#xff1a;用户名和密码四、数据库连接方式举例4.1 连接方式一4.2 连接方式二4.3 连…

15天学习MySQL计划-数据库引擎(进阶篇)第六天

15天学习MySQL计划-数据库引擎&#xff08;进阶篇&#xff09;第六天 1.数据库引擎 1.MySQL体系结构 连接层服务层引擎层存储层 2.存储引擎 存储引擎简介 ​ 1.概述 ​ 存储引擎就是存储数据&#xff0c;建立索引&#xff0c;更新/查询数据等技术的实现方式。存储引擎是基…

android ANativeWindow surface显示

前言 最近做车机camera 倒车影像问题&#xff0c;需要通过c调用camera&#xff0c;并显示在android ui界面之上。 最终效果图 代码实现 Android.bp cc_binary {name: "stest",vendor: true,srcs: ["main.cpp"],shared_libs: ["libcutils",&q…

Android入门基础教程

第1章 Android Studio运行第一个程序 1.1 Android Studio下载&#xff1a; 1.1.1 Android开发者官网&#xff1a; https://developer.android.google.cn ​ 1.1.2 下载Android Studio开发者工具&#xff1a; 进入Android开发者官网&#xff1b;找到Android Studio工具下载页…

【LeetCode刷题笔记】反转链表、移除链表元素、两两交换链表中的节点、删除链表的倒数第N个结点

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;数据结构与算法 &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;道阻且长&#xff0c;行则将至&#x1f497; 文章目录 反转链表移除链表元素两两交换链表中的节点删除链表的倒数第 N 个结点&…

脉搏波信号去噪方法

一、引言 脉搏波信号是血管中血液流动产生的振动信号&#xff0c;反映了血管的弹性特性和血流动力学信息。由于其丰富的生理信息&#xff0c;脉搏波信号在诊断和监测心血管疾病、神经系统疾病等方面具有重要意义。然而&#xff0c;原始脉搏波信号往往受到生理干扰、环境噪声等…

人工智能在心电信号的心律失常应用

心律失常是一种常见的心脏疾病&#xff0c;它会导致心脏跳动不规律&#xff0c;严重的甚至会引发心脏骤停。传统的心律失常诊断方法是通过心电图对心律失常进行分析&#xff0c;但是这种方法需要医生具备专业的知识和经验&#xff0c;而且容易出现误诊。而人工智能技术可以对心…

倾斜摄影三维模型OSGB格式转换3DTILES的关键技术浅析

倾斜摄影三维模型OSGB格式转换3DTILES的关键技术浅析 将三维模型从OSGB格式转换为3DTILES格式需要掌握以下关键技术&#xff1a; 1、数据结构转换&#xff1a;OSGB格式和3DTILES格式采用了不同的数据结构&#xff0c;因此需要进行数据结构转换。OSGB格式采用了分层划分数据结构…

D3.js(3) path/折线图

一、概念 path 元素是用来绘制各种形状&#xff08;例如线条、曲线、弧形、圆弧等&#xff09;的元素。path 元素的 d 属性用来定义绘制的路径。具体来说&#xff0c;d 属性是一个字符串&#xff0c;包含一系列的命令和参数&#xff0c;用来描述路径的形状。 1.1 d属性 Mmov…

Linux子进程信号处理机制

Linux中子进程的信号处理与父进程的联系有以下三条&#xff1a; fork后子进程会继承父进程绑定的信号处理函数&#xff08;很好解释&#xff0c;子进程会拷贝父进程的代码&#xff0c;包括信号处理函数&#xff09;如果子进程调用exec族函数&#xff0c;子进程代码段被新的程序…

Qt 项目Mingw编译器转换为VS编译器时的错误及解决办法

错误 在mingw生成的项目&#xff0c;转换为VS编译器时通常会报些以下错误&#xff08;C4819警告&#xff0c;C2001错误&#xff0c;C2143错误&#xff09; 原因及解决方式 这一般是由于字符编码引起的&#xff0c;在源代码文件中包含了中文字符导致的。Qt Creator 生成的代码文…

算法的时间复杂度和空间复杂度分析

文章目录 实验目的实验内容实验过程运行结果复杂度分析 实验目的 通过本次实验&#xff0c;了解算法复杂度的分析方法&#xff0c;掌握递归算法时间复杂度的递推计算过程。 实验内容 二路归并排序的算法设计和复杂度分析。 实验过程 1.算法设计 归并排序&#xff1a;是指将…

活动回顾|多模态 AI 开发者的线下聚会@深圳站(内含福利)

回顾来了&#xff01; 4 月 22 日&#xff0c;由 Jina AI 和 OpenMMLab 联合主办的 「多模态 AI 」Office Hours 深圳站圆满结束&#xff0c;迎来了将近 60 位开发者的热情参与&#xff01;现场不仅有别开生面的「开发者集市」供大家打卡赢取好礼&#xff0c;更有四场干货满满的…

传统机器学习(六)集成算法(1)—随机森林算法及案例详解

传统机器学习(六)集成算法(1)—随机森林算法及案例详解 1、概述 集成学习&#xff08;Ensemble Learning&#xff09;就是通过某种策略将多个模型集成起来&#xff0c;通过群体决策来提高决策准确率。 集成学习首要的问题是选择什么样的学习器以及如何集成多个基学习器&…

杂谈 看唯工具论的问题 与 瑞典马工的一些言论 如何辩证看

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

华为OD机试真题(Java),根据员工出勤信息,判断本次是否能获得出勤奖(100%通过+复盘思路)

一、题目描述 公司用一个字符串来标识员工的出勤信息 absent&#xff1a;缺勤late&#xff1a;迟到leaveearly&#xff1a;早退present&#xff1a;正常上班 现需根据员工出勤信息,判断本次是否能获得出勤奖&#xff0c;能获得出勤奖的条件如下&#xff1a; 缺勤不超过1次没…

闲聊之π和e到底是个啥

π和e 1. 圆周率π 耳熟能详的π&#xff0c;到底是什么&#xff0c;怎么来的&#xff1f; 圆周率π&#xff0c;圆的周长C2πr&#xff0c;其中r是圆的半径 1.1 刘徽割圆术 如图中所示&#xff0c;作出圆内的正十二边形&#xff0c;正二十四边形&#xff0c;…&#xff0c;用…