在线编译器:https://onecompiler.com/
桌面应用和Web应用在架构上有显著的区别。桌面应用通常是在本地运行的独立程序,而Web应用则需要依赖客户端和服务端的协作。
数据包的传输与路由 想象一下,数据包就像是一封封信件,而网络则是遍布全球的邮政系统。当我们在电脑上点击发送邮件时,数据被切割成一个个小包裹,即数据包。这些数据包随后被送往最近的邮局,也就是路由器。路由器就像邮局的分拣员,根据包裹上的地址(即IP地址),决定将它们送往下一个邮局,直至最终到达目的地。这个过程中,每个路由器都会查看数据包的目的地,并选择最佳路径,确保数据包能够快速、准确地到达。
域名与DNS系统
在网络的世界里,IP地址就像是门牌号码,虽然精确,但记忆起来却颇为困难。这时,域名系统(DNS)就如同一个智能的电话簿,将复杂的IP地址转化为易于记忆的域名,比如www.example.com
。当你在浏览器中输入一个域名时,DNS服务器会像查电话簿一样,找到对应的IP地址,并指引你的请求到达正确的服务器。
OSI模型和TCP/IP模型 正如我们写代码层层封装,计算机网络的总体架构也是分层的。这样每个层各司其职,下层上上层的基础设施,逐渐构建复杂的功能。
OSI 七层模型
TCP/IP 四层模型:广泛使用
TCP/IP 协议详解
HTTP 协议详解
后端是Web应用的核心,它负责处理业务逻辑、数据存储和安全。在这一部分,我们会介绍常见的后端技术栈,并重点讨论后端安全,尤其是如何防范和应对CTF(Capture the Flag)中常见的逻辑漏洞攻击。
常见后端技术栈(如Node.js、PHP、Python、Ruby、Go、Rust 等)
后端安全:永远不要相信用户的数据,一切前端的过滤都等于没有过滤!
CTF: 通过逻辑漏洞等欺骗后端
逻辑漏洞:if money!=0 then money-=price.
What if money=-1
?
没接触安全领域前关于安全的错觉:
事实:连SSH今年都还能有高危漏洞 CVE-2024-6387
真实例子(出自隔壁EE学院同学的手笔,科班-半路出家=安全+质量):
注入:混淆了数据和代码。
例如printf("%d", _____)
正常输入:1
2
3
恶意输入:1); system("shutdown -s -t 0"); //
就变成了printf("%d", 1); system("shutdown -s -t 0"); //)
爆了