邮递员和同源政策不是障碍。为了理解这一点,我需要解释为什么作为开发人员,您实际上从不信任客户端/前端。
前端和后端信任
如果有人控制一台计算机,他们就控制它向服务器发送的内容。这就是字面意思:它的每个最后一个字节,每个最后一个标头或请求,表单中的每个最后一个 POST 字段或 URI 中的 GET 参数,每个 Web 套接字和连接,每个最后的时间(在广泛的时间限制内,这里不是问题)。
他们可以让那台计算机按字面意思发送后端,无论他们想要什么,都可以按需发送。任何 GET。任何 POST。任何标题字段。任何事物。它们可以包含任何标题。任何来源。他们选择并知道的任何 cookie 信息。从字面上看,任何东西。大多数用例的常见例外可能是物理“黑匣子”加密卡/密钥和客户端的 IP 地址,如果在会话期间检查,这两者都是更棘手的障碍 - 甚至 IP 通常可以通过各种方式被欺骗,尤其是如果他们不关心回复。
结果是,从安全角度来看,您不能信任客户端发送的任何内容。您可以提高标准报价很多,足以满足大多数日常使用。安全传输 (TLS/HTTPS),如果有人控制路由经过的中间计算机,则很难修改、拦截或更改流量。一个实施良好的操作系统和浏览器,可以阻止特定网页之外的脚本或恶意软件在本地进行干扰。证书检查一端或两端。对可能附加的内容进行身份验证的安全网络。
但其中每一个都在提高标准,而不是绝对的防御。每一个都曾经被打破过,现在有时会被打破,将来也会被打破。也没有保证没有错误和漏洞。没有人可以防御在客户端故意或无知地破坏客户端 PC 上的防御的用户、恶意软件或 rootkitted 远程访问,因为这样的用户通常可以更改或绕过任何操作系统或浏览器被编程执行的操作。没有一个是真正完美的防御。
因此,如果您有任何带有后端和前端的软件或基于 Web 的系统,那么您不信任客户端提供的数据是一条黄金法则。您在后端收到时重新检查它。如果请求是访问或发送网页或文件,可以吗,是否应允许该会话访问该文件,文件名是否有效?如果请求是要处理的一些数据或表单,所有字段是否合理且包含有效数据,是否允许该会话进行这些更改。
您不信任不受您自己安全已知控制的事物。
服务器,您将大体上信任(您管理操作系统和安全性,或拥有可信赖的合作伙伴)。但是客户和更广泛的网络根本不信任。甚至对于服务器,您也对其进行了安全检查,无论是恶意软件和行为检测、访问控制还是网络扫描软件,因为您也可能错了。
因此,为了方便客户端,您可以在客户端浏览器/应用程序(前端)进行验证,因为大多数客户端都是诚实的,并且可以在浏览器或应用程序中快速检测到许多错误。
但是您在服务器(后端)进行验证以实际检查请求或数据是否有效并且应该被处理或拒绝。
也就是说,你的答案是...
你问它是怎么做的。执行此操作的软件可以通过多种方式完成 - 恶意软件、蓄意的用户行为、错误配置的客户端系统/软件、拦截计算机/代理。
但是无论怎么做,这是在客户端中利用这些问题的基本过程,使任何客户端数据包从根本上不可信(包括来源和引用字段),并且无法信任它们。它不包括 OP 范围之外的外部问题,例如证书滥用。
- 研究真正的回复/数据包/请求/帖子在应用程序中的样子。
- 使用内置浏览器工具、浏览器扩展、透明代理/代理应用程序修改数据包,或基于它创建一个手工制作的请求,需要不同的标头。
(毕竟,后端实际上并不知道“真实”值应该是什么,或者“真实”来源或引用者是什么,它只知道数据包*说*它们是什么,或者来源或引用者是什么.这需要 15 秒到 2 分钟来修改地球上我想要的任何东西,或者如果它是由软件完成的,则不到一毫秒。)
- 修改或伪造任何其他需要的东西,或制作任何数据包的自定义版本,然后发送它们(预先准备好或当时修改)
- 完毕。