【计算机网络全面教学】网络安全与加密技术,从对称加密到常见攻击防御Day6(2026年)
2026/6/15 15:57:50 网站建设 项目流程

写在前面:网络安全这块,很多人觉得"跟我关系不大,我又不是安全工程师"。说实话,这种想法很危险。我见过太多项目因为SQL注入被脱库、因为XSS被挂马、因为没配HTTPS被抓包。网络安全不是某个岗位的事,是每个程序员的基本功。今天这篇我把加密原理、攻击手段、防御方案全部串起来讲,内容有点多,但每一条都值得你认真看。

文章目录

    • 一、网络安全概述
    • 二、对称加密与非对称加密
      • 对称加密 vs 非对称加密的锁和钥匙类比
      • 2.1 对称加密
      • 2.2 非对称加密
      • 2.3 对称加密 vs 非对称加密对比
    • 三、哈希函数与数字签名
      • 3.1 哈希函数
      • 3.2 数字签名
        • 数字签名的盖章类比
    • 四、SSL/TLS握手过程详解
      • SSL/TLS握手的密钥交换故事
    • 五、身份认证与访问控制
      • 5.1 多因素认证(MFA)
      • 5.2 防火墙类型
        • 防火墙的小区保安类比
      • 5.3 ACL访问控制列表
    • 六、入侵检测IDS vs 入侵防御IPS
    • 七、VPN虚拟专用网
      • VPN的地下隧道类比
    • 八、常见网络攻击与防御
      • 常见攻击的详细场景故事
        • DDoS攻击 = 一群人堵在门口让正常人进不来
        • ARP欺骗 = 冒充物业给错手机号
        • SQL注入 = 在快递单上写恶意指令
        • XSS攻击 = 在留言板上贴恶意小广告
        • CSRF攻击 = 伪造你的签名做坏事
      • 8.4 中间人攻击(MITM)
      • 8.7 攻击与防御对照表
    • 九、零信任安全模型简介
    • 十、新手常见误区
      • 误区1:HTTPS是绝对安全的
      • 误区2:加密和哈希是一回事
      • 误区3:防火墙能防所有攻击
      • 误区4:XSS和CSRF是同一种攻击
    • 十一、问题与解答
    • 十二、面试高频考点汇总
      • 面试题1:对称加密和非对称加密的区别?HTTPS中如何结合使用?
      • 面试题2:HTTPS的TLS握手过程?
      • 面试题3:常见网络攻击有哪些?如何防御?
      • 面试题4:数字签名的工作原理?
      • 面试题5:什么是零信任安全模型?和传统模型有什么区别?
    • 十三、模拟测试题
      • 1. 以下哪种加密算法属于非对称加密?
      • 2. SQL注入攻击的最佳防御手段是?
      • 3. CSRF攻击利用的是什么?
      • 4. 以下哪种哈希算法已被证明不安全,不推荐使用?
      • 5. 零信任安全模型的核心原则是?
      • 参考答案
    • 十四、互动话题
    • 参考资料

一、网络安全概述

网络安全的核心目标可以概括为三个词:机密性、完整性、可用性,也就是常说的CIA三要素

安全目标含义破坏后的后果举例
机密性(Confidentiality)数据不被未授权的人看到信息泄露数据库被拖库、通信被窃听
完整性(Integrity)数据不被未授权地篡改数据被篡改、伪造网页被植入恶意代码
可用性(Availability)系统和资源随时可用服务中断DDoS攻击导致网站瘫痪

除了CIA三要素,还有几个重要的安全属性:

  • 认证性(Authentication):确认通信双方的身份
  • 不可否认性(Non-repudiation):发送方不能否认自己发送过的消息
  • 可追溯性(Accountability):可以追踪到操作者

踩坑提醒:很多人把"安全"等同于"加密",这是片面的。加密只是保障机密性的一种手段,网络安全还包括访问控制、入侵检测、安全审计等方方面面。


二、对称加密与非对称加密

对称加密 vs 非对称加密的锁和钥匙类比

理解加密算法,最好的方式是想象锁门和开门

加密类型锁和钥匙类比说明
对称加密同一把钥匙锁门和开门你有一把钥匙,锁门用它,开门也用它。钥匙只有一把,怎么安全地交给对方是个问题
公钥(非对称加密)挂锁(谁都能锁)你把一个挂锁公开给大家,任何人都能用它来锁门,但只有你有钥匙能打开
私钥(非对称加密)唯一的钥匙(只有你有)只有你能开门,别人就算拿到挂锁也打不开

生活场景

  • 对称加密:你和室友共用一把家门钥匙。开门锁门都用它,但如果钥匙丢了或被复制,家里就不安全了。
  • 非对称加密:你在家门口放一个公共挂锁,任何人来都可以把东西锁进你家的信箱里(用公钥加密),但只有你能打开信箱取走(用私钥解密)。

踩坑提醒:对称加密的"钥匙分发问题"是核心难题——怎么把钥匙安全地交给对方?非对称加密解决了这个问题,但速度太慢。所以实际应用中,两者配合:用非对称加密传递对称密钥,再用对称密钥加密数据。

2.1 对称加密

对称加密是指加密和解密使用同一个密钥

算法密钥长度安全性速度应用场景
DES56位已不安全已淘汰
3DES168位(实际112位)一般较慢兼容旧系统
AES128/192/256位非常安全当前主流

AES(Advanced Encryption Standard)是目前最广泛使用的对称加密算法,支持128位、192位和256位密钥长度。256位AES目前没有已知的有效攻击方法。

2.2 非对称加密

非对称加密使用一对密钥:公钥(公开)和私钥(保密)。

算法密钥长度安全性速度应用场景
RSA2048位+安全数字签名、密钥交换
ECC256位(等效RSA 3072位)更安全较快移动端、IoT设备

2.3 对称加密 vs 非对称加密对比

对比维度对称加密非对称加密
密钥数量一个密钥一对密钥(公钥+私钥)
加解密速度(适合大量数据)(适合小数据)
密钥分发困难(如何安全传递密钥)简单(公钥可以公开)
典型算法AES、DES、3DESRSA、ECC
典型应用数据加密传输数字签名、身份认证、密钥交换

踩坑提醒:实际应用中,对称加密和非对称加密是配合使用的。HTTPS就是典型例子:用非对称加密来交换对称密钥,然后用对称密钥加密实际数据。这样既解决了密钥分发问题,又保证了加解密效率。


三、哈希函数与数字签名

3.1 哈希函数

哈希函数将任意长度的输入映射为固定长度的输出(哈希值/摘要)。

算法输出长度安全性状态
MD5128位已被破解不推荐使用
SHA-1160位已被破解不推荐使用
SHA-256256位安全当前主流
SHA-512512位非常安全高安全需求场景

哈希函数的核心特性:

  • 单向性:从哈希值无法反推出原始数据
  • 抗碰撞性:找不到两个不同的输入产生相同的哈希值
  • 雪崩效应:输入微小变化导致输出巨大变化
importhashlib# SHA-256哈希示例data="Hello, World!"hash_value=hashlib.sha256(data.encode()).hexdigest()print(hash_value)# 输出: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f

踩坑提醒:千万不要用MD5来存密码!MD5已经被碰撞攻击破解了。即使加个salt也不够安全。推荐用bcrypt或scrypt这类专门为密码设计的哈希算法。

3.2 数字签名

数字签名用于验证消息的真实性完整性

数字签名的盖章类比

把数字签名想象成盖章验证

概念盖章类比说明
私钥签名用你自己的印章盖在文件上印章只有你手里有,盖了章就代表"我认可这份文件"
公钥验证任何人都可以用印章模板来验证大家手里都有你的印章模板(公钥),可以对比"这个章是不是你的"
哈希值文件的"指纹"文件内容稍有变化,指纹就完全不同

盖章的完整过程

  1. 你写了一份合同(原始消息)
  2. 你先按一个指纹在合同上(计算哈希值)
  3. 你用自己独有的印章盖在指纹上(用私钥加密哈希值,生成数字签名)
  4. 你把合同和盖章的指纹一起寄出去(发送消息+数字签名)
  5. 对方收到后,用你公开的印章模板比对(用公钥解密签名)
  6. 对方再自己按一个指纹对比(重新计算哈希值)
  7. 两个指纹一样?说明合同确实是你发的,而且没被篡改过

签名过程:

  1. 发送方用自己的私钥对消息的哈希值进行加密,生成数字签名
  2. 将消息和数字签名一起发送

验证过程:

  1. 接收方用发送方的公钥解密数字签名,得到哈希值A
  2. 接收方对收到的消息重新计算哈希值B
  3. 如果A == B,说明消息未被篡改,且确实来自发送方
发送方 接收方 | | | 消息 → SHA-256 → 哈希值 | | 哈希值 → 用私钥加密 → 数字签名 | | | | 消息 + 数字签名 | | --------------------------------> | | | | 数字签名 → 用公钥解密 → 哈希值A | 消息 → SHA-256 → 哈希值B | 哈希值A == 哈希值B? 验证通过!

四、SSL/TLS握手过程详解

SSL/TLS是保障网络通信安全的核心协议。SSL已经被淘汰,现在使用的是TLS(Transport Layer Security),但大家习惯上还是叫HTTPS/SSL。

SSL/TLS握手的密钥交换故事

想象这样一个场景:小明和小红要交换一个秘密,但中间可能有窃听者(小偷偷听)。他们该怎么办?

故事开始

  1. 小明和小红约定用一种特殊的盒子(非对称加密)
  2. 小红把一把公开挂锁发给小明(服务器发送公钥/证书)
  3. 小明收到挂锁后,确认是真的小红发的(验证证书)
  4. 小明把秘密纸条放进盒子,用挂锁锁上(用公钥加密预主密钥)
  5. 小明把锁好的盒子寄给小红(发送加密后的预主密钥)
  6. 小红用只有自己有的钥匙打开盒子(用私钥解密预主密钥)
  7. 现在小明和小红都有了同一个秘密(预主密钥)
  8. 他们用秘密生成了一把相同的普通钥匙(生成会话密钥)
  9. 之后所有通信都用这把普通钥匙锁门和开门(对称加密通信)

为什么要这么麻烦?

  • 直接用普通钥匙(对称加密)通信最快,但怎么把钥匙安全交给对方?
  • 用挂锁(非对称加密)可以安全传递,但太慢了
  • 所以先用挂锁传递普通钥匙,再用普通钥匙快速通信

踩坑提醒:这个"先用非对称加密交换对称密钥,再用对称密钥通信"的思路,是理解HTTPS、SSH等所有安全协议的核心。记住这个故事,面试时讲出来比背流程图更生动。

TLS 1.2完整握手过程:

客户端 服务器 | | | 1. ClientHello | | - 支持的TLS版本 | | - 支持的加密套件列表 | | - 客户端随机数(Client Random) | | - 支持的扩展 | | --------------------------------------------> | | | | 2. ServerHello | | - 选定的TLS版本 | | - 选定的加密套件 | | - 服务器随机数(Server Random) | | <-------------------------------------------- | | | | 3. Certificate(数字证书) | | <-------------------------------------------- | | | | 4. ServerKeyExchange(密钥交换参数) | | <-------------------------------------------- | | | | 5. ServerHelloDone | | <-------------------------------------------- | | | | 6. 验证证书合法性 | | 7. 生成预主密钥(Pre-Master Secret) | | 8. 用服务器公钥加密预主密钥 | | 9. ClientKeyExchange(加密后的预主密钥) | | --------------------------------------------> | | | | 10. ChangeCipherSpec(切换到加密模式) | | --------------------------------------------> | | 11. Finished(加密握手消息的摘要) | | --------------------------------------------> | | | | 12. ChangeCipherSpec | | <-------------------------------------------- | | 13. Finished | | <-------------------------------------------- | | | | 14. 双方基于预主密钥+两个随机数生成会话密钥 | | 15. 安全通信开始 | | <===========================================> |

踩坑提醒:TLS 1.3简化了握手过程,只需要1-RTT(甚至0-RTT),而TLS 1.2需要2-RTT。面试时如果被问到TLS握手,最好说明是哪个版本。另外,TLS 1.0和1.1已经被正式废弃,现在最低应该用TLS 1.2。


五、身份认证与访问控制

5.1 多因素认证(MFA)

多因素认证要求用户通过两个或多个独立的认证因素来证明身份。

认证因素类型举例
知识因素(你知道什么)密码、PIN码、安全问题“你的第一只宠物叫什么?”
拥有因素(你有什么)手机、U盾、安全令牌短信验证码、Google Authenticator
固有因素(你是什么)生物特征指纹、人脸识别、虹膜

踩坑提醒:短信验证码其实安全性并不高,存在SIM卡劫持风险。推荐使用TOTP(基于时间的一次性密码)类应用,比如Google Authenticator或Authy。

5.2 防火墙类型

防火墙的小区保安类比

把防火墙想象成小区门口的保安

防火墙类型保安类比工作方式
包过滤防火墙只看门牌号放行“3号楼的可以进,5号楼的不行”——只看IP地址和端口号,不看包裹里是什么
状态检测防火墙记住谁进来了谁出去了“这个人刚才出去了,现在回来可以进”——跟踪连接状态,不是随便谁都能进
应用层防火墙检查包裹内容“包裹里装的什么?打开看看”——深度检查数据内容,能识别出恶意代码

场景对比

  • 包过滤:快递员说"我是送3号楼的",保安就放行了。但如果坏人冒充快递员,保安也发现不了。
  • 状态检测:你出门买菜,回来保安记得你,直接放行。陌生人想混进来?没门。
  • 应用层:你收到一个包裹,保安打开检查"里面是不是危险品",确认安全再给你。
防火墙类型工作层级原理优点缺点
包过滤防火墙网络层检查IP地址、端口号、协议类型速度快、实现简单不检查应用层数据,容易被欺骗
状态检测防火墙网络层+传输层跟踪连接状态,维护状态表安全性更高资源消耗较大
应用层防火墙应用层深度检查应用层数据内容最精确、可识别应用速度慢、成本高

5.3 ACL访问控制列表

ACL(Access Control List)是路由器和交换机上常用的访问控制机制。

ACL类型编号范围过滤依据特点
标准ACL1-99只能基于源IP地址过滤简单粗粒度
扩展ACL100-199基于源IP、目的IP、协议、端口过滤精细灵活
# 标准ACL示例:允许192.168.1.0网段,拒绝其他access-list10permit192.168.1.00.0.0.255 access-list10deny any# 扩展ACL示例:允许192.168.1.0访问Web服务,拒绝其他access-list100permit tcp192.168.1.00.0.0.255 any eq80access-list100deny tcp any any eq80

踩坑提醒:ACL的匹配规则是从上到下,一旦匹配就不再往下检查。所以要把更具体的规则写在前面,更宽泛的规则写在后面。这个顺序搞反了,你的ACL就等于没用。


六、入侵检测IDS vs 入侵防御IPS

对比维度IDS(入侵检测系统)IPS(入侵防御系统)
工作方式旁路监听,只检测不拦截串联部署,检测并拦截
对网络影响不影响网络流量可能影响网络性能
误报影响产生告警,不影响业务可能误断正常连接
部署位置交换机镜像端口网络关键路径
类比监控摄像头(只看不动)保安(看+拦截)

简单来说,IDS是"发现入侵后报警",IPS是"发现入侵后直接阻断"。实际部署中,很多企业会同时部署IDS和IPS,形成纵深防御。


七、VPN虚拟专用网

VPN的地下隧道类比

把VPN想象成地下隧道

概念类比说明
公网大街所有人都能看到你在干什么,听到你说什么
VPN地下隧道你和目的地之间有一条加密的通道,外人在大街上看不到隧道里的内容
VPN服务器隧道的另一端出口你的流量从隧道出来,看起来是从出口位置发出的

生活场景

  • 你在咖啡厅连公共WiFi(大街上),旁边坐着一个黑客在"偷听"。
  • 你打开VPN,相当于钻进了一条地下隧道。
  • 黑客只能看到"有个人进了隧道",但完全看不到你在隧道里干什么、访问什么网站。
  • 你的流量从隧道另一端的VPN服务器出来,网站看到的是VPN服务器的地址,不是你的真实位置。

踩坑提醒:不要把VPN和"翻墙"画等号。VPN的核心价值是在不安全的网络上建立安全通道,企业远程办公、保护公共WiFi下的通信安全,这些都是VPN的正经用途。

VPN(Virtual Private Network)在公共网络上建立加密的专用通道。

VPN类型协议特点适用场景
IPsec VPNIPsec网络层加密,安全性高,配置复杂企业站点间互联(Site-to-Site)
SSL VPNTLS应用层加密,无需客户端,使用方便远程办公(Remote Access)
WireGuardWireGuard代码极简(约4000行),性能优异,现代加密新一代VPN首选

WireGuard的优势:

  • 代码量极小,安全审计容易
  • 使用现代密码学(Curve25519、ChaCha20、Poly1305)
  • 连接建立快,支持漫游
  • 内核态运行,性能远优于OpenVPN

踩坑提醒:不要把VPN和"翻墙"画等号。VPN的核心价值是在不安全的网络上建立安全通道,企业远程办公、保护公共WiFi下的通信安全,这些都是VPN的正经用途。


八、常见网络攻击与防御

常见攻击的详细场景故事

DDoS攻击 = 一群人堵在门口让正常人进不来

场景故事
一家餐厅正常营业,能容纳100位客人。攻击者雇了1000个人,不是来吃饭的,就是堵在门口不让真正的客人进去。餐厅门口被堵得水泄不通,正常客人根本进不来,餐厅生意完全瘫痪。

技术原理:攻击者控制大量僵尸主机(肉鸡),同时向目标发送海量请求,耗尽服务器资源。

常见类型:

  • SYN Flood:发送大量SYN报文但不完成三次握手,耗尽服务器半连接队列
  • UDP Flood:发送大量UDP包到随机端口,迫使服务器回复ICMP不可达
  • HTTP Flood:发送大量看似合法的HTTP请求,耗尽应用层资源

防御方法:

  • 流量清洗(CDN、云清洗中心)
  • 限流和降级
  • SYN Cookie技术
  • 扩容和弹性伸缩

ARP欺骗 = 冒充物业给错手机号

场景故事
你住在一个小区,物业有个通讯录记录每家对应的电话号码。坏人冒充物业工作人员,偷偷把通讯录上"1号楼物业电话"改成了自己的手机号。以后1号楼住户有问题打物业电话,其实都打给了坏人。坏人可以监听、甚至篡改住户和物业之间的沟通。

技术原理:ARP协议没有认证机制,攻击者发送伪造的ARP响应,将自己的MAC地址伪装成网关的MAC地址,从而截获网络流量。

防御方法:

  • 静态绑定ARP表
  • 部署ARP防火墙
  • 使用动态ARP检测(DAI)
  • 划分VLAN隔离广播域

SQL注入 = 在快递单上写恶意指令

场景故事
你在快递单的"备注"栏里写了:“请放在门口,顺便帮我把隔壁的门也打开”。快递员如果不仔细看,真的照做了。SQL注入就是攻击者在输入框里填写"恶意指令",如果程序不检查就直接拼进数据库查询,数据库就会执行攻击者的指令。

-- 正常查询SELECT*FROMusersWHEREusername='admin'ANDpassword='123456'-- SQL注入攻击SELECT*FROMusersWHEREusername='admin'OR'1'='1'--' AND password='anything'-- 这样直接绕过了密码验证!

防御方法:

  • 参数化查询(预编译语句)——最有效的防御手段
  • 输入验证和过滤
  • 使用ORM框架
  • 最小权限原则(数据库账户只给必要权限)
// 正确做法:使用预编译语句PreparedStatementstmt=connection.prepareStatement("SELECT * FROM users WHERE username=? AND password=?");stmt.setString(1,username);stmt.setString(2,password);

踩坑提醒:SQL注入至今仍是OWASP Top 1的安全威胁。我见过有人用"替换关键字"的方式来防御SQL注入,比如把SELECT替换成空字符串——这种做法完全不可靠,用SeLeCt就能绕过。老老实实用预编译语句。


XSS攻击 = 在留言板上贴恶意小广告

场景故事
商场门口有个公共留言板,大家都可以贴便签。坏人在上面贴了一张"假中奖通知",上面写"恭喜你中奖了,点击链接领取"。路过的人看到便签,信以为真,点击后手机中毒了。XSS就是攻击者在网站上注入恶意脚本,其他用户浏览时脚本自动执行。

技术原理:攻击者将恶意脚本注入到网页中,当其他用户浏览该网页时,恶意脚本在其浏览器中执行。

三种类型:

类型存储位置危害程度举例
存储型XSS服务器数据库恶意评论、个人签名
反射型XSSURL参数中钓鱼链接
DOM型XSS客户端DOM前端代码漏洞

防御方法:

  • 对用户输入进行HTML转义
  • 设置Content-Security-Policy(CSP)响应头
  • 设置Cookie的HttpOnly和Secure属性
  • 使用框架自带的XSS防护(如React默认转义)
// 危险:直接插入用户输入element.innerHTML=userInput;// 安全:使用textContentelement.textContent=userInput;// 安全:使用转义函数functionescapeHTML(str){returnstr.replace(/[&<>'"]/g,tag=>({'&':'&amp;','<':'&lt;','>':'&gt;',"'":'&#39;','"':'&quot;'}[tag]));}

CSRF攻击 = 伪造你的签名做坏事

场景故事
你已经签好名在一张空白支票上(登录了银行网站,Cookie保存在浏览器)。坏人趁你不注意,把这张支票填上"转账给坏人10万元",然后冒充你交给银行。银行一看"签名是真的",就照办了。CSRF就是攻击者利用你已登录的状态,在你不知情的情况下发起恶意请求。

用户已登录银行网站(有Cookie) ↓ 攻击者发来一个链接:img src="http://bank.com/transfer?to=attacker&amount=10000" ↓ 用户浏览器自动携带Cookie发起转账请求 ↓ 银行服务器认为是用户的合法操作 ↓ 转账成功!

防御方法:

  • CSRF Token:服务器生成随机Token,每次请求携带验证
  • SameSite Cookie:设置Cookie的SameSite属性为Strict或Lax
  • 验证Referer/Origin头:检查请求来源
  • 关键操作二次确认:转账、修改密码等操作要求重新输入密码

踩坑提醒:CSRF和XSS经常被混淆。XSS是"攻击者往你的网站注入恶意脚本",CSRF是"攻击者利用用户的登录状态伪造请求"。XSS可以利用CSRF,但CSRF不一定需要XSS。


8.4 中间人攻击(MITM)

原理:攻击者拦截并可能篡改通信双方的消息,双方毫不知情。

防御方法:

  • 使用HTTPS(TLS加密)
  • 证书固定(Certificate Pinning)
  • 验证证书链的完整性
  • 避免使用不安全的公共WiFi

8.7 攻击与防御对照表

攻击类型攻击层级核心原理主要防御手段
DDoS网络层/应用层海量请求耗尽资源流量清洗、限流、CDN
ARP欺骗数据链路层伪造ARP响应静态ARP、DAI
SQL注入应用层恶意SQL代码注入预编译语句、输入验证
MITM网络层/传输层拦截篡改通信HTTPS、证书固定
XSS应用层恶意脚本注入网页输入转义、CSP、HttpOnly
CSRF应用层利用登录状态伪造请求CSRF Token、SameSite

九、零信任安全模型简介

传统的安全模型是"城堡与护城河"——只要进了内网就是可信的。但现实证明,这种假设是错误的。一旦攻击者突破边界,内网就任人宰割。

**零信任(Zero Trust)**的核心原则:

  • 永不信任,始终验证:不管请求来自内网还是外网,都必须验证
  • 最小权限原则:每个用户/设备只拥有完成任务所需的最小权限
  • 持续认证:不是登录一次就永远信任,而是持续评估信任状态
  • 微分段:将网络划分为小的安全区域,限制横向移动
传统模型: 外网(不信任)→ [防火墙] → 内网(完全信任) 零信任模型: 任何请求 → [身份验证] → [设备健康检查] → [权限评估] → [访问控制] → 资源

踩坑提醒:零信任不是某个产品,而是一种安全理念。Google的BeyondCorp是零信任的典型案例,它证明了"不依赖VPN也能实现安全访问"。


十、新手常见误区

以下是新手最容易搞混的几个概念,建议反复看:

误区1:HTTPS是绝对安全的

错误理解:“用了HTTPS,我的数据就绝对安全了,什么都不用担心。”

正确理解:HTTPS解决的是"传输过程中"的安全问题,不是万能的。如果用户主动点击"继续访问不安全网站",或者电脑被安装了恶意根证书,HTTPS也能被破解。另外,HTTPS防不了XSS、SQL注入等应用层攻击。

误区2:加密和哈希是一回事

错误理解:“MD5是加密算法,可以用来加密密码。”

正确理解:加密是"可逆的"(能加密就能解密),哈希是"不可逆的"(只能算指纹,不能还原)。MD5、SHA-256是哈希算法,不是加密算法。存密码应该用哈希(如bcrypt),而不是加密。

误区3:防火墙能防所有攻击

错误理解:“我们部署了防火墙,所以网站很安全。”

正确理解:防火墙主要防的是网络层攻击,对应用层攻击(如SQL注入、XSS)基本无能为力。就像小区保安能防陌生人进小区,但防不了业主家里进小偷。需要WAF(Web应用防火墙)、代码审计等多重防护。

误区4:XSS和CSRF是同一种攻击

错误理解:“XSS和CSRF都是跨站攻击,差不多吧。”

正确理解:XSS是"攻击者往你的网站注入恶意脚本",利用的是网站对用户输入的信任。CSRF是"攻击者利用用户的登录状态伪造请求",利用的是浏览器自动携带Cookie的机制。两者原理完全不同,防御方法也不同。


十一、问题与解答

Q1:对称加密和非对称加密分别用在什么场景?

A:对称加密速度快,适合加密大量数据,比如HTTPS中传输的实际网页内容。非对称加密速度慢但解决了密钥分发问题,适合加密小数据(如密钥交换、数字签名)。实际应用中两者配合使用:用非对称加密传递对称密钥,再用对称密钥加密数据。

Q2:HTTPS一定能防止中间人攻击吗?

A:不一定。如果用户主动忽略证书警告(“继续访问不安全网站”),或者攻击者成功安装了自签名根证书到用户系统,HTTPS也能被中间人攻击。另外,如果网站使用了过时的加密算法(如RC4、DES),也可能被破解。HTTPS是重要的安全措施,但不是万能的。

Q3:为什么说MD5不安全?

A:2004年王小云教授团队证明了MD5存在碰撞攻击,即可以构造两个不同的文件产生相同的MD5值。这意味着攻击者可以伪造数字证书或文件而不被发现。SHA-1也已被证明不安全,目前推荐使用SHA-256或更强的哈希算法。


十二、面试高频考点汇总

面试题1:对称加密和非对称加密的区别?HTTPS中如何结合使用?

参考答案:

对称加密使用同一密钥加解密,速度快,适合大量数据加密,但密钥分发困难。非对称加密使用公钥私钥对,安全性高,密钥分发方便,但速度慢。HTTPS中结合使用:先用非对称加密(RSA/ECDHE)交换对称密钥(预主密钥),然后双方基于预主密钥生成会话密钥,后续通信全部使用对称加密(AES)。这样既保证了密钥分发的安全性,又保证了数据传输的效率。

面试题2:HTTPS的TLS握手过程?

参考答案:

以TLS 1.2为例:1)客户端发送ClientHello(支持的加密套件、随机数);2)服务器回复ServerHello(选定加密套件、随机数)和数字证书;3)客户端验证证书(CA链、域名、有效期);4)客户端生成预主密钥,用服务器公钥加密后发送;5)服务器用私钥解密得到预主密钥;6)双方基于预主密钥和两个随机数通过PRF函数生成会话密钥;7)双方发送Finished消息确认握手完成;8)开始对称加密通信。

面试题3:常见网络攻击有哪些?如何防御?

参考答案:

  • SQL注入:通过预编译语句(参数化查询)防御,避免拼接SQL
  • XSS:对用户输入进行HTML转义,设置CSP头,Cookie设置HttpOnly
  • CSRF:使用CSRF Token,设置Cookie的SameSite属性,验证Referer
  • DDoS:部署CDN和流量清洗,限流降级,SYN Cookie
  • ARP欺骗:静态ARP绑定,部署DAI,划分VLAN
  • 中间人攻击:使用HTTPS,证书固定,避免不安全WiFi

面试题4:数字签名的工作原理?

参考答案:

发送方先对消息进行哈希运算得到摘要,然后用自己的私钥对摘要加密生成数字签名。接收方收到消息和签名后,用发送方的公钥解密签名得到摘要A,同时对消息重新计算哈希得到摘要B。如果A等于B,说明消息确实来自发送方且未被篡改。数字签名保证了真实性、完整性和不可否认性。

面试题5:什么是零信任安全模型?和传统模型有什么区别?

参考答案:

零信任的核心原则是"永不信任,始终验证"。传统安全模型基于边界防御,认为内网是可信的,外网是不可信的。零信任模型不信任任何来源的请求,无论来自内网还是外网,都需要进行身份验证、设备健康检查和权限评估。零信任强调最小权限、持续认证和微分段。Google的BeyondCorp是零信任的典型案例。


十三、模拟测试题

1. 以下哪种加密算法属于非对称加密?

A. AES
B. DES
C. RSA
D. 3DES

2. SQL注入攻击的最佳防御手段是?

A. 替换SQL关键字
B. 使用预编译语句(参数化查询)
C. 限制数据库用户权限
D. 使用防火墙

3. CSRF攻击利用的是什么?

A. 服务器端漏洞
B. 用户浏览器的Cookie自动携带机制
C. 网络传输层的明文传输
D. DNS解析的缓存机制

4. 以下哪种哈希算法已被证明不安全,不推荐使用?

A. SHA-256
B. SHA-512
C. MD5
D. bcrypt

5. 零信任安全模型的核心原则是?

A. 信任内网,防御外网
B. 一次认证,永久信任
C. 永不信任,始终验证
D. 只依赖防火墙防御

参考答案

  1. C。RSA是非对称加密算法,AES/DES/3DES都是对称加密算法。
  2. B。预编译语句(参数化查询)是防御SQL注入最有效的方法,它将数据和SQL语句分离,从根本上杜绝了注入。
  3. B。CSRF攻击利用的是浏览器会自动携带目标网站的Cookie,从而利用用户的已登录状态发起伪造请求。
  4. C。MD5已被证明存在碰撞攻击,不安全。bcrypt是专门为密码设计的哈希算法,不是传统意义上的哈希函数。
  5. C。零信任的核心原则是"Never trust, always verify"(永不信任,始终验证),不区分内外网,所有请求都需要验证。

十四、互动话题

你在开发过程中遇到过哪些安全问题?有没有被SQL注入、XSS、CSRF坑过?你们公司的安全防护做得怎么样?欢迎在评论区分享你的经历和看法。


参考资料

  1. OWASP Top 10 Web Application Security Risks
  2. Cloudflare - What is SSL/TLS?
  3. NIST Cybersecurity Framework
  4. Zero Trust Architecture - NIST SP 800-207

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询