服务器如何知道请求来自客户端,而不是窃听的黑客?

2024-02-21

我有一个简单的问题,我找不到简单的答案,可能我遗漏了一些东西,或者我不知道某些网络概念是如何工作的。我想知道我不知道的事情。

简单地说,问题是虽然窃听是可能的,但服务器如何知道请求来自客户端,而不是窃听的黑客。

设想 :

无论我采用什么安全策略,我都应该向客户发送一些内容。它可能是非对称加密令牌或其他东西。客户端没有私钥,因此无论客户端能够做什么、发送等,黑客也可以做什么、发送。

保护 Web 应用程序背后的逻辑可能是什么?应该有一些只有客户知道的秘密。

顺便说一句,我正在学习 JWT,这是我第一次学习 auth。但这个简单的问题我仍然无法找到答案。


服务器如何知道请求来自客户端,而不是客户端 窃听黑客?

事实并非如此。

由客户端来验证服务器是否是它期望与之通信的服务器。它被称为公钥基础设施 https://en.wikipedia.org/wiki/Public_key_infrastructure.

可以使用 TLS/SSL,因此连接是通过 HTTPS 进行的 - 请注意,它不必是 Diffie Hellman,还有其他密钥交换机制,例如 RSA。

想象一下以下场景。

Client --> HTTPS --> example.com

客户端将对 example.com 进行 DNS 查找,并返回 203.0.113.10。客户端将通过 HTTPS 连接到 203.0.113.10,连接的初始部分称为握手过程。在这里,客户端检查它正在考虑连接的域 example.com 是否拥有由受信任的证书颁发机构签名的证书,主题设置为“example.com”。这将防止发生以下情况:

Client --> HTTPS --> Attacker (fake example.com)

例如,如果攻击者接管了 DNS 服务器并将 example.com 更改为指向他 (198.51.100.200)。

这种攻击之所以能被阻止,是因为攻击者无法向证书颁发机构证明 example.com 的所有权,因此无法对其证书进行签名以向客户端证明其服务器是可信的。

HTTPS 还对连接进行加密,并以安全的方式交换密钥。这可确保无法读取已建立的连接。

因此,一旦建立连接并且用户登录,服务器就会向客户端发送会话令牌,该令牌可以采用 JWT 的形式。如果这是一个 cookie 并且安全标志 https://www.owasp.org/index.php/SecureFlag设置后,只能通过 HTTPS 连接进行传输。这就是服务器知道它没有被拦截的原因,因为客户端已经验证了服务器,并使用双方同意的唯一密钥对传输到服务器的数据进行了加密。

Client --> HTTPS --> Attacker (fake example.com) --> HTTPS --> example.com

也不可能(主动中间人),这显示了您最初问题中的情况,其中有人拦截通信并将 JWT 传递到真实服务器,观察传输中的私有数据。然而,如果使用纯 HTTP(无 SSL/TLS):

Client --> HTTP --> Attacker (fake example.com) --> HTTP --> example.com
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

服务器如何知道请求来自客户端,而不是窃听的黑客? 的相关文章

随机推荐

  • Android Studio:“Gradle 同步失败:无法从选定的 JDK 运行 JVM。”

    自从安装Android Studio 3 2后 我一直无法运行Java 我尝试过jdk 8u181 windows x64 jdk 10 0 2 windows x64 bin jdk 11 windows x64 bin 环境PATH并重
  • 映射到同类 Traversable 的 Traversable 类型

    简洁版本 Scala 中的大多数泛型集合都有一个map实际上 该方法将返回相同类型的集合 List A map f A gt B 返回一个List B 例如 Scala 集合库就是为了实现这一目标而明确设计的 如果我想编写对任何此类集合具有
  • 使用 Selenium 上传文件失败

    我正在尝试使用 Selenium 在 Eclipse 上使用以下代码将文件上传到表单 search driver find element by xpath input type file search send keys D test t
  • 使用 image.complete 查找图像是否缓存在 chrome 上?

    我一直试图找出外部图像是否用js缓存在浏览器上 这是我到目前为止的代码
  • XML 转换导致 FileNotFoundException

    由于缺乏信息 我之前发布的问题已关闭 如果我在这里遗漏了什么 请告诉我 转换器似乎将 file 添加到我的文件路径的开头 我在 Solaris 环境中工作 应用转换时会发生以下情况 DOMSource sourcexml new DOMSo
  • Android模拟器无法创建上下文0x3005

    我对 Android 开发完全陌生 我正在尝试在 Android 中执行一个小任务 注册表单 但是 我收到以下错误 2013 12 05 11 06 26 Emulator could not get wglGetExtensionsStr
  • C++ 随机猜数字游戏

    我必须编写一个程序来运行随机猜谜游戏 游戏的数字是从 1 到 100 猜测者可以尝试 20 次 最后应该被问是否愿意再玩一次 如果猜测者高或低 还必须有多种打印输出选项 我已经完成了程序的一部分 我知道我仍然需要添加其他打印输出选项 但现在
  • 解释UnixTime毫秒

    我正在尝试找到更好的方法在 C 中将 DateTime 转换为 unix 时间戳 我发现有一个 DateTimeOffset ToUnixTimeMilliseconds 方法 public long ToUnixTimeMilliseco
  • MvxCachingFragmentCompatActivity消失了吗?

    我正在尝试升级到 MvvmCross 5 2 但在 MvxCachingFragmentCompatActivity 上出现语法错误 这个班级消失了吗 正如 5 2 博客中所解释的 https www mvvmcross com mvvmc
  • 如何更新d3表?

    鼠标移动时更新 d3 js 表时遇到一些问题 这是一个简化的example https jsfiddle net lszhou2115 npzjLng9 6 在jsfiddle中 这是主要代码 function mousemove var
  • 如何修复 ubuntu 中的“没有名为‘kivy._clock’的模块”错误?

    我正在尝试使用 Ubuntu 16 04 for Python 3 6 安装 kivy GUI lib 我尝试执行kivy官方网站中的步骤 https kivy org doc stable installation installatio
  • GAE java中通过证书进行客户端身份验证

    我正在写一份申请GAE java通过其身份验证用户证书 我已经使用创建了一个自签名证书keytool在客户端 我还在 Google 应用程序引擎中为我的应用程序启用 https 请求 申请流程非常简单 用户使用任何浏览器进入应用程序的主页
  • 为什么 c++ std::max_element 这么慢?

    我需要找到向量中的最大元素 所以我使用std max element 但我发现它是一个非常慢的函数 所以我编写了自己的版本并设法获得 x3 更好的性能 下面是代码 include
  • 如果等于运算符没有被空格包围,为什么它不起作用?

    我尝试了以下脚本 bin bash var1 Test 1 var2 Test 2 if var1 var2 then echo Equal else echo Not equal fi 它给了我Equal 虽然应该已经打印出来了Not e
  • 如何在 ASP.NET Core 2.0 和 EF Core 2.0 中将应用程序设置从项目根获取到 IDesignTimeDbContextFactory 实现

    我正在 ASP NET Core 2 0 中构建应用程序 但在 EntityFramework 迁移方面遇到问题 我的 DbContext 位于一个单独的项目中 解决方案名称 项目名称前缀 Data 因此我创建了 IDesignTimeDb
  • D3 动态重绘Y轴

    我想创建一个具有多个 线性 轴的动态图 绘制轴后 我想 当新数据到达时 更改数据域并重新绘制 更新轴 我可以使用 D3 选择现有轴并执行此操作 还是必须在代码中显式保存每个轴 我希望我的问题不会令人困惑 init all Y Axis ea
  • C++ STL 容器和就地构建

    请考虑以下事项 class CMyClass public CMyClass printf Constructor n CMyClass const CMyClass printf Copy constructor n int main s
  • 什么是棱镜?

    我试图更深入地了解lens库 所以我尝试使用它提供的类型 我已经有了一些使用镜头的经验 知道它们的强大和方便 所以我转向了 Prisms 但我有点迷失了 棱镜似乎可以做两件事 确定实体是否属于总和类型的特定分支 如果属于 则捕获元组或单例中
  • Golang 方法函数中的接收器类型无效

    我正在尝试制作一个简单的包来将 SSH 命令发送到服务器 我有以下代码 type Connection ssh Client func Connect addr user password string conn Connection er
  • 服务器如何知道请求来自客户端,而不是窃听的黑客?

    我有一个简单的问题 我找不到简单的答案 可能我遗漏了一些东西 或者我不知道某些网络概念是如何工作的 我想知道我不知道的事情 简单地说 问题是虽然窃听是可能的 但服务器如何知道请求来自客户端 而不是窃听的黑客 设想 无论我采用什么安全策略 我