客户端注入到 HTTPS POST 响应的数据是否安全?

Is data injected into a HTTPS POST response secure from the client?

在开发 Web 应用程序时,通常的做法是将变量注入到当前 POST 请求中并从中引用它们 - 例如,Laravel's merge() 帮助程序的存在就是为了做到这一点 - 而且它更容易这样做并通过响应传递变量而不是单独这样做。

如果我以这种方式将数据注入我的 HTTPS POST requests/responses,然后将该响应传回视图,这些变量是否可以被认为是安全的,或者它们是否安全?能在客户端看到吗?

我现在对此提出质疑,因为我最近在某处读到 HTTPS 请求仅在传输过程中加密(而不是端到端)以防止 MITM 攻击,这似乎暗示它们未加密在自己的两端。如果这是真的,则意味着用户能够在客户端看到它们,从而使发送给它们的数据不安全。

回应修改后的问题:

**If I inject data into my HTTPS POST requests in this way and then pass the request to a view, can this data be considered secure, or is it able to be seen on the client-side?

如果您将数据注入传入请求,然后将该数据传递给视图,则数据本身位于服务器上,因此它与您服务器上的任何内容一样安全。客户端无法访问它,除非您将它包含在视图中,从而包含您发送给客户端的呈现响应。一旦您将其发送给客户,它就会对客户开放。

如果您仅将注入的信息用作您的服务器临时用来帮助构建视图的东西(例如客户端凭据或客户端标识符)并且注入的信息本身不存在于您发送给客户端的内容中,那么客户端无法访问注入的信息。

换句话说,如果您将注入的信息作为 http 响应的一部分发送给客户端,则注入的信息仅对客户端可用。客户端无法访问服务器内部使用的数据。

仅供参考,以上所有内容与加密无关。返回客户端的 https 响应在您将其传递给 https 库时(在离开服务器进程之前)被 https 传输加密,并且在到达 http 另一端的客户端进程之前保持加密状态联系。一旦进入客户端,数据就不再加密(因此它可以被客户端使用)。

原始答案基于问题的原始 content/understanding:

If I inject data into my HTTPS POST requests in this way and then pass the request to a view, can this data be considered secure?

它几乎和任何 client-side 数据一样安全。它对外部人员是安全的,但对客户端本身不安全,对客户端本身不安全是 client/server 体系结构的基础。

客户端不应该看到的数据一开始就不应该发送给客户端。它应该保存在服务器上,并可能通过 server-side 会话或类似的技术与客户端请求连接。

I recently read somewhere that HTTPS requests are only encrypted in transit (as opposed to end-to-end) in order to prevent MITM attacks, which seems to imply that they are unencrypted on the ends themselves.

HTTPS 从数据离开客户端代码一直到数据进入服务器代码(反之亦然)。那是 end-to-end 端点是从客户端代码到服务器代码(反之亦然,具体取决于您发送数据的方式)。因此,它在这些端点之间的传输过程中也是加密的。

所以,这个问题很迷茫

If this is true, it would mean that the user is able to see them on the client-side, making data sent to them insecure.

然后,这也糊涂了。 client-side 上存在的所有数据都可能被用户查看(具有少量编码技能)。整个 client-side 对客户端本身来说是不安全的。这只是 client-server 架构的老生常谈。因此,认为您可以将某些数据与 client-side 代码合并并且客户端永远无法查看数据的想法是错误的。

在您的客户端中,数据以某种 user-visible 形式以纯文本形式存在。然后,用户执行一些操作将数据提交给服务器。您的 client-side 代码接收纯文本数据,合并更多纯文本数据,然后调用一些函数来发起 https 请求。到目前为止,所有数据都由您的 client-side 代码管理,并且都是纯文本格式。具有访问客户端的中等技能的编码人员可以了解正在发生的事情。

当调用该函数发出 https 请求时,底层代码会建立与服务器的 https 连接,这包括协商加密机制。然后数据被加密(在它离开您的 client-side 进程之前)并且数据通过 TCP 发送到完全加密的服务器。

网络上的任何人甚至本地 OS 都看不到它,因为它是 end-to-end 加密的。

但是,当数据在客户端中组装时(在发送 https 请求之前),任何可以访问您的客户端并具有一些 coding/hacking 技能的人都可以查看它。