信息安全核心技术详解:网络、系统与密码学
详细阐述了信息安全领域的三大核心分支:网络安全、系统安全与密码学。在网络安全方面,涵盖了 SQL 注入、XSS、CSRF、DDoS 等常见攻击原理及防御手段;系统安全部分解析了栈溢出、整数溢出、权限提升等底层漏洞机制;密码学章节介绍了对称与非对称加密、密钥交换及多因子认证技术。文章旨在帮助开发者建立安全思维,理解底层原理以减少漏洞产生。

详细阐述了信息安全领域的三大核心分支:网络安全、系统安全与密码学。在网络安全方面,涵盖了 SQL 注入、XSS、CSRF、DDoS 等常见攻击原理及防御手段;系统安全部分解析了栈溢出、整数溢出、权限提升等底层漏洞机制;密码学章节介绍了对称与非对称加密、密钥交换及多因子认证技术。文章旨在帮助开发者建立安全思维,理解底层原理以减少漏洞产生。

对于程序员来说,了解一些信息安全的技术知识大有裨益。这不仅能帮助理解计算机和网络的底层原理,还能反哺开发工作,带着安全思维编程,减少漏洞的产生。
信息安全大体可分为三个大的分支:
SQL 注入是 Web 安全中最常见的攻击手段之一。其核心在于让 Web 服务器执行攻击者期望的 SQL 语句,从而获取数据库中的敏感数据或对数据库进行读取、修改、删除、插入等操作。
常规套路是将 SQL 语句放置于 Form 表单或请求参数之中提交到后端服务器。如果后端服务器未做输入安全校验,直接将变量取出进行数据库查询,则极易中招。
例如,对于一个根据用户 ID 获取用户信息的接口,后端的 SQL 语句一般是这样:
SELECT name, ... FROM t_user WHERE id = $id
其中 $id 是前端提交的用户 ID。如果前端的请求是这样:
GET /userinfo?id=1 OR 1=1
请求参数 id 转义后就是 1 or 1=1。如果后端不做安全过滤直接提交数据库查询,SQL 语句就变成了:
SELECT name, ... FROM t_user WHERE id = 1 OR 1=1
其结果是把用户表中的所有数据全部查出,达到泄露数据的目的。
防御手段:对输入进行检测,阻断带有 SQL 语句特征的输入;使用预编译语句(Prepared Statements)或 ORM 框架。
重点关注:前端工程师、Web 后端工程师。
XSS 全称跨站脚本攻击(Cross Site Scripting),为了与层叠样式表 CSS 区分,使用了另一个缩写 XSS。其核心是将可执行的前端脚本代码(一般为 JavaScript)植入到网页中,诱导浏览器执行攻击者的 JS 代码。
示例:
http://localhost:8080/test?name=<script>alert("you are under attack!")</script>
存储型 XSS 的区别在于能够将攻击脚本入库存储,在后面进行查询时,再将攻击脚本渲染进网页,返回给浏览器触发执行。
常见套路:
防御手段:前后端均需要做好内容检测,过滤掉可执行脚本的侵入;设置 Content-Security-Policy (CSP) 策略。
重点关注:前端工程师、Web 后端工程师。
CSRF(跨站请求伪造)的核心思想在于,在打开 A 网站的情况下,另开 Tab 页面打开恶意网站 B。此时在 B 页面的'唆使'下,浏览器发起一个对网站 A 的 HTTP 请求。
危害在于两点:
防御手段:使用 Token 验证、SameSite Cookie 属性、Referer 检查。
重点关注:前端工程师、Web 后端工程师。
DDoS 全称分布式拒绝服务攻击(Distributed Denial of Service)。是拒绝服务攻击的升级版,旨在让服务不可用。
早期互联网技术不发达时,一台性能强劲的计算机写个程序多线程不断向服务器请求,服务器应接不暇,最终无法处理正常请求。现在服务器架构复杂,有 CDN 节点和负载均衡,单台计算机难以造成满载。
攻击者转而通过成规模的网络集群发起拒绝服务攻击。常见的细分类型包括 SYN Flood、ICMP Flood、UDP Flood 等。
防御手段:目前面对 DDoS 没有 100% 的防御方法,只能靠缓解技术减轻威力。包括流量清洗、SYN Cookie、限制连接频率等。
重点关注:运维工程师、安全工程师。
DNS 负责将域名转换成 IP 地址。由于早期协议设计未充分考虑安全性,存在被篡改的风险。
劫持路径可能包括:
为了解决问题,出现了 DNSSEC 技术,但部署有限。此外,httpDNS 服务通过将 DNS 变为 HTTP 协议之上的应用服务,在一定程度上规避了传统 DNS 劫持。
重点关注:安全工程师、后端工程师、运维工程师。
TCP 协议本身没有对传输的数据包进行身份验证。只要知道一个 TCP 连接中的 seq 和 ack,就可以伪造传输包,假装任意一方与另一方通信,称为 TCP 会话劫持。
这是一种较老的技术,随着操作系统安全机制增强和防火墙能力提升,已逐渐淡出视野。
重点关注:安全工程师、运维工程师。
端口扫描是黑客常用的前期探测技术,用于发现目标开启了哪些服务。
常见服务端口:
21: FTP25: SMTP53: DNS80: HTTP443: HTTPS3389: RDP原理:对于 UDP 服务发送请求包查看应答;对于 TCP 服务尝试发起三次握手发送 SYN 包查看应答。
防御手段:使用防火墙等安全产品,即时发现和阻断非法的扫描探测行为;关闭不需要的服务端口。
重点关注:运维工程师、安全工程师。
系统安全版块的技术通常指攻击发生在终端之上,与操作系统息息相关。
现代计算机基于冯·诺伊曼体系,数据和指令都保存在存储器中。内存中既包含代码指令,又包含数据,没有强制机制区分。
CPU 采用寄存器+堆栈式设计,堆栈中保存函数调用产生的返回地址。栈溢出攻击是通过输入到栈中的缓冲区冲破界限,将返回地址覆盖为一个指向恶意代码位置的数值,劫持程序执行流程。
防御手段:利用 Stack Canary(Linux)、GS 机制(Windows)等成熟方案。
重点关注:C/C++ 工程师。
整数溢出是指整数运算结果超出数据类型表示范围。例如 16 位 short 变量最大值为 32767,加 1 后变成 -32768。
如果该变量用作数组下标或内存分配长度,可能导致进程崩溃、服务宕机,甚至远程代码执行。
重点关注:所有程序员。
空指针一般出现在指针未初始化或内存分配失败时。访问空指针通常导致内存访问异常,程序崩溃退出,造成拒绝服务。特殊情况下,若操作系统允许分配起始地址为 0 的内存页,攻击者可提前在该页面布置代码,导致风险。
访问一个已经释放后的内存块。如果程序员在 delete 对象后未及时将指针置为 NULL,后续继续使用该指针访问对象,可能出现内存访问异常。
若攻击者在 delete 后马上 new 一个同样大小的对象,新对象可能占据旧位置,导致'鸠占鹊巢',执行恶意代码。
建议:养成好的编程习惯,对象 delete 后,指针及时置空。
重点关注:C/C++ 工程师。
HOOK 原意钩子,用来改变原有程序执行流程。常用于键盘记录器木马,钩住键盘敲击事件消息。
更多用于程序执行流程层面的 HOOK。恶意代码注入目标程序后,在函数入口处添加跳转指令,导致线程执行攻击者代码,实现修改或过滤参数。
安全软件也广泛使用 HOOK 技术,在各处敏感 API 设立检查,抵御非法调用。软件补丁修复漏洞时也常用到 HOOK 技术。
重点关注:C/C++ 工程师。
现代操作系统提供权限管理,限制进程/线程的影响范围。攻击者想要做更多事情,需突破限制,获取更高权限(如 Windows 管理员、Linux Root、iOS 越狱)。
方式通常是利用内核漏洞(如栈溢出、整数溢出等)执行攻击者代码,篡改安全令牌,使其通过系统的安全审核。
重点关注:安全工程师。
可信计算(Trusted Computing)旨在提高系统整体安全性。概念包括可信执行环境 TEE(Trusted Execution Environment),在现有计算机内部构建秘密基地运行机密程序,操作系统也难以访问。
移动端 ARM 芯片提供 TrustZone 技术,在硬件层面新增可信计算环境,包含可信 OS 和可信 APP,与普通环境隔离。
重点关注:终端系统工程师。
由于数据传输过程中会遇到信息泄漏、篡改、伪造的风险,加密技术应运而生。
根据加密和解密使用的密钥是否相同,分为两类。
对称加密:加密密钥和解密密钥一致,速度快、效率高。常用算法:DES、AES、RC4。缺点是密钥传输不安全。
非对称加密:加密密钥与解密密钥不一致,安全性高。分为公钥(公开)和私钥(保密)。常用于数字认证,如 HTTPS 握手阶段。常用算法:RSA、DH、ECC。
如何安全地将密钥传输给对方?密钥交换算法 解决此问题。
早期 HTTPS 使用非对称加密传输对称密钥:服务器生成公私钥,客户端用公钥加密对称密钥发送给服务端,服务端用私钥解密。后来 DH 及其变种算法因数学运算特性被广泛使用。
信息摘要算法(哈希)目的不是保护数据,而是校验数据正确性。数据通过算法得出摘要值,收到数据后对比摘要即可知是否被篡改。
常用算法:MD5、SHA1、SHA256。
数据编码技术目的不是为了加密,而是便于传输。最常见的是 Base64,将二进制数据编码为 64 个常见字符组成的文本,常用于邮件附件等。
还有 Base58(比特币钱包)、Base85 等。
传统密码认证安全性不足,多因子认证引入其他技术补充,使用 2 种及以上方式共同完成认证。
基于生物特征的认证技术发展迅速:指纹、虹膜、人脸识别等。
主流多因子认证平台派系:FIDO(国际标准)、IFAA(阿里系)、TUSI(腾讯系)。
本文罗列了一些常见的信息安全技术,主要分网络安全、系统安全和密码学三个领域展开。信息安全技术不仅仅是安全工程师的事情,作为一位程序员,了解这些技术将帮助我们更好地 Build The World!

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online