拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

程序员必知的100条网络安全知识点:从Web漏洞到安全运维

程序员必知的100条网络安全知识点:从Web漏洞到安全运维 1. 从零基础看待网络安全这100条知识点的组织逻辑我见过太多程序员写代码三年问起cookie和session的区别还是一脸懵更不用说自己写的接口某天被人用脚本刷爆是一种什么体验。这也是我认真梳理这套100条网络安全知识点的原因——网络安全早就不该是安全工程师专属的领域而是每个写代码的人都该有的护身符。你不需要成为顶尖的攻防专家但至少要知道自己写的系统在哪些环节会被击穿又该怎么堵上那些洞。这套知识点不是让你去背教科书而是帮你在脑子里搭一张攻防地图。我把它们分成五条线网络基础与攻击面、Web漏洞攻防、安全开发与运维加固、学习路线与实践成长。每条线下再按场景拆成具体条目一共100条。你可以把它当作一个长期维护的checklist遇到实际问题时回来翻一翻而不是试图一晚上全记住。我见过不少小白程序员一上来就下载各种扫描工具到处扫这是非常危险的习惯。没有授权的扫描属于违法行为这一点必须放在前面说清楚。真正安全的成长路径是先理解原理再在靶场练习最后参与有授权的实战或漏洞挖掘项目。安全能力是养出来的不是看出来的。接下来我们就从最底层的网络基础开始把这些知识点一层一层剥开。1.1 为什么说这是程序员的必修课很多程序员觉得安全是安全团队的事自己只负责把功能写完。这个想法在个人项目里或许没问题但在真正面向用户的产品里会出大事。我亲眼见过一个创业团队因为开发时没对上传接口做任何限制结果被人传了一个脚本文件整台服务器被控制用户数据全部泄露。事后复盘问题不过是一个文件类型校验的缺失。安全能力本质上是风险感知能力。一个懂安全的程序员写代码时会下意识地思考这个输入是谁提供的它会不会被恶意构造我的接口会不会被批量调用这个文件上传之后会不会被当作网页执行这些问题一旦成为肌肉记忆你在设计系统、评审代码、排查故障时看问题的角度会完全不同。这也是我为什么强烈建议每个程序员把网络安全基础当作必修课而不是有空再看。1.2 100条知识点的分类逻辑整份清单我刻意避开了按技术栈划分的做法而是按攻击者视角来组织。你要知道攻击者通常会按什么顺序打一套系统才能知道防御该怎么做。第一层是网络与系统基础搞清楚数据从哪来、往哪去、谁在中间看着。第二层是攻击面识别包括域名、端口、服务、接口、云资产这些门在哪里。第三层是Web漏洞原理这是多数业务系统的重灾区。第四层是安全开发与运维加固也就是把防御写进流程里。第五层是成长路径告诉你靶场、考证、比赛、面试怎么安排。五层下来正好100条名称上落成表格方便你随时翻查。1.3 先建立威胁模型而不是死记硬背我经常被问知识点太多记不住怎么办我的回答是不要记要建威胁模型。所谓威胁模型就是站在攻击者角度问自己三个问题这个系统最值钱的数据是什么最容易被攻击的入口在哪里突破了之后能拿到什么举个例子一个只有登录功能的博客系统最值钱的数据可能是后台账号攻击者最可能尝试的入口是登录框和搜索引擎发现的备份文件一旦拿到后台就可以修改文章甚至挂恶意脚本。有了这个模型SQL注入就不再是一个抽象名词而是可能导致我后台账号被拖走的具体威胁。接下来每个知识点我都会尽量点到它对应的是哪个威胁环节。2. 筑基篇网络协议、系统机制与攻击面分析不管你想学Web安全、系统安全还是云安全网络基础都是绕不开的底座。很多人觉得TCP三次握手这种知识点面试考完就忘了但其实很多攻击手法的前提就是网络机制。比如SYN Flood攻击能打瘫一个服务就是因为三次握手的设计里有半连接状态再比如你理解了DNS解析过程就能明白为什么内网域名污染会造成大量请求被劫持。这一节我会先用25条知识点打个底然后挑几个最关键的展开说。这25条覆盖了网络模型、协议机制、系统认证、会话管理、攻击面识别和信息收集等方向是后续所有攻防讨论的公共语言。2.1 网络协议数据流动的基本规则知识点1到10都属于网络协议。TCP三次握手和四次挥手的核心在于状态转换UDP的无连接特性决定了它适合DNS、视频流这类场景但也更容易被滥用放大攻击。HTTP协议本身是明文HTTPS用TLS做了加密和身份验证但TLS握手也有版本降级等攻击面。DNS解析涉及递归查询、缓存投毒、子域名枚举很多企业泄露资产都是从域名开始的。我建议你在理解协议时多抓状态和信任关系。比如TCP握手时服务器会为每个半连接分配资源这解释了资源耗尽型攻击的底层原因HTTP是无状态协议所以才有cookie、session、token这套机制来记住你是谁。搞懂了为什么需要这些东西你自然就理解了会话固定、会话劫持这些漏洞是怎么来的。2.2 系统机制与认证体系知识点11到20聚焦操作系统和认证。端口与服务的对应关系是资产梳理的起点nmap扫描时能看到开放端口但真正的风险在于端口背后的服务版本和已知漏洞。Linux的文件权限、Windows的注册表、计划任务、系统日志这些都是痕迹的来源。作为开发人员至少要理解最小权限原则——不要让程序以root或system身份跑否则一个漏洞就可能变成整个服务器的沦陷。认证方面口令爆破是最古老的攻击方式所以有了验证码、登录失败锁定、多因素认证这些对抗手段。OAuth和JWT是现代应用的常见认证方式但很多人只知道怎么调接口不清楚token刷新、重放、scope校验背后的安全含义。作为程序员你应该至少能回答我的token放哪里过期时间多长被偷了我怎么撤销2.3 攻击面识别搞清楚门在哪里知识点21到25是攻击面与分析思路。所谓攻击面就是所有可以被攻击者触达的入口开放的端口、解析的域名、暴露的API、上传的文件、第三方组件、云存储桶、源代码仓库等等。很多企业的核心资产不是被高级漏洞打穿的而是因为某个测试环境没下线、某个git泄露了代码、某个存储桶开了公开读权限。信息收集分被动和主动两类。被动收集靠搜索引擎、证书透明日志、备案信息、第三方历史数据不需要触达目标主动收集则是端口扫描、目录枚举、接口探测。无论哪种都要在授权范围内进行。我自己做授权测试时习惯先列一份资产清单再按域名、IP、云资源、代码仓库几个维度逐步排查最后把所有入口标在一张图上看哪里有暴露面。这一步做得越充分后面的漏洞测试就越有方向。编号知识点一句话说明关键场景/对应威胁01TCP三次握手建立可靠连接存在半连接状态SYN Flood资源耗尽攻击02TCP四次挥手断开连接的双向确认过程TIME_WAIT端口耗尽03UDP协议特性无连接、不可靠但低延迟UDP放大反射攻击04HTTP协议明文请求-响应模型数据被监听与篡改05HTTPS/TLS加密传输、证书身份验证中间人攻击、降级攻击06DNS解析域名到IP的递归查询DNS劫持、缓存投毒07cookie机制客户端保存会话标识会话劫持、CSRF辅助08session机制服务端保存会话状态会话固定、会话过期处理09token认证无状态令牌替代会话token泄露与重放10OSI/五层模型分层理解网络通信定位各层攻击类型11端口与服务开放端口对应服务暴露面漏洞服务暴露在公网12Linux权限模型用户/组/其他与rwx权限提权攻击13Windows注册表系统配置集中存储持久化后门14进程与计划任务恶意程序驻留与自启动挖矿木马、勒索软件15日志机制记录行为轨迹的证据源日志被清除掩盖痕迹16口令爆破暴力猜测账号密码弱口令、撞库17验证码与锁定策略对抗自动化爆破的常见手段爆破绕过、接口刷量18多因素认证MFA多因子验证提升认证安全钓鱼绕过MFA19OAuth授权协议第三方授权登录标准授权回调滥用20JWT令牌自包含的签名令牌算法混淆、密钥泄露21攻击面概念所有可触达入口的总和暴露面过宽导致风险22域名资产枚举通过证书、DNS找子域名测试环境未下线泄露23主动信息收集端口扫描、目录枚举等超出授权范围违规24被动信息收集搜索引挚、证书日志等数据泄露的间接入口25云资产暴露存储桶、对象存储配置错误存储桶公开读泄露数据3. 实战篇高频Web漏洞攻防从原理到防御的完整闭环Web漏洞是整个网络安全里离程序员最近的一块因为你天天写的接口、页面、数据库交互统统在这里。OWASP每年发布的Top 10清单值得反复看但以我做过大量代码评审的经验来看真实项目里最常踩的还是那么几类注入、跨站、越权、文件上传、反序列化、逻辑漏洞。这些漏洞往往不是安全性问题而是没想清楚边界问题。这一节我会用35条知识点覆盖Web攻防主体并把每个漏洞都拆成它是什么、为什么发生、怎么防御三段。因为篇幅关系表格里是速查版正文里挑那些最容易出事的展开讲。3.1 注入类漏洞直接把输入变成代码SQL注入是Web安全里最古老也最经典的漏洞。它的本质是把用户输入拼进了SQL语句导致输入被当作代码执行。任何把字符串拼接进SQL的地方都是高危区最常见的防御就是参数化查询让数据和指令彻底分离。我知道有些老项目改起来麻烦但至少要加白名单校验和最小权限数据库账号。命令注入、LDAP注入、XPath注入、模板注入其实都是同一个思路输入到达了会被解释执行的位置。XML外部实体注入XXE在解析XML时如果不禁用外部实体就可能读文件或内网探测。所以我常说凡是输入要到达解析器的地方都要先问一句它会被当作什么来解析3.2 跨站与请求伪造盯住人与浏览器存储型XSS是最麻烦的因为恶意脚本存在服务器上任何用户访问都会中招。你写评论、昵称、富文本时都要小心。反射型XSS虽然是一次性的但在钓鱼场景里威力巨大。防御的核心是输出编码加内容安全策略前端要转义后端也要兜底不能只靠一端。CSRF利用的是浏览器会自动携带cookie这个特性让受害者在不知情的情况下发起请求。防御手段是加上不可预测的token、检查Origin/Referer、关键操作要求二次确认。如果用了SameSite cookie很多CSRF会自动失效。SSRF则是服务端去请求了攻击者指定的地址导致内网资源被探测常见的防御是限制请求目标、禁止转发到内网IP。3.3 上传、反序列化与逻辑漏洞系统设计与业务规则的坑文件上传漏洞的可怕之处在于上传点本身是个文件入口如果能传可执行脚本就直接拿到服务器权限了。防御不能只靠扩展名黑名单还要做内容检测、随机化文件名、目录权限隔离、关闭上传目录的脚本执行。我在实际评审中发现很多团队只做了扩展名校验攻击者用图片马或双扩展名就绕过去了。反序列化漏洞是噩梦级别的存在。简单说如果程序能把用户可控的数据反序列化成一个对象而系统里又存在可利用的魔法方法攻击者就可能通过构造数据执行任意代码。这个知识点对小白来说理解成本高但至少要记住一个原则永远不要对不可信数据做反序列化。逻辑漏洞则五花八门越权访问、验证码绕过、支付金额篡改、优惠券重放。这类漏洞没有统一修补公式只能靠业务评审和权限校验来防。编号知识点一句话说明关键场景/对应威胁26SQL注入输入拼入SQL被当作指令执行数据库拖库、脱库27参数化查询数据与SQL指令分离SQL注入核心防御28命令注入输入拼入系统命令执行服务器被远程控制29XXE注入XML外部实体读取本地文件读取配置与内网探测30模板注入SSTI模板引擎解析用户输入RCE远程代码执行31XSS-反射型恶意脚本一次性注入页面钓鱼、窃取cookie32XSS-存储型脚本持久化在服务器端后台被劫持、蠕虫传播33XSS防御输出编码CSP富文本过滤前端后端双层兜底34CSRF篡改跨站请求伪造身份操作改密码、转账等关键操作35CSRF防御tokenSameSite来源校验浏览器自动带cookie场景36SSRF服务端请求攻击者指定地址内网渗透入口37文件上传上传入口被传可执行文件获取服务器权限38文件上传防御白名单内容检测隔离目录图片马绕过扩展名校验39反序列化不可信数据反序列化导致RCEJava/PHP反序列化链40越权漏洞未校验权限访问他人数据水平越权、垂直越权41验证码绕过验证码可识别或可重放撞库、接口刷量42支付逻辑漏洞篡改金额、数量、订单状态电商损失43任意文件读取路径参数未过滤读任意文件源码泄露、配置泄露44任意文件删除删除接口未做路径校验服务器功能破坏45目录浏览目录访问列表未关闭敏感文件直接暴露46源码泄露git/.svn/备份文件泄露直接暴露核心代码47敏感接口枚举接口无认证遍历数据批量数据拉取48错误信息泄露异常堆栈回显给用户暴露技术栈与路径49弱口令账号密码强度不足爆破进入后台50默认配置组件安装后未改默认账号测试环境与组件被入侵51开放重定向跳转参数未校验域名钓鱼链接伪装52点击劫持iframe透明层诱导点击诱导授权、恶意操作53Web缓存欺骗缓存错误处理敏感页面敏感内容被缓存公开54HTTP请求走私前后端解析差异引发请求歧义绕过防护投毒缓存55子域名接管未绑定CNAME的子域被利用钓鱼页托管在官方域名56CRLF注入输入包含回车换行注入响应头会话固定、缓存污染57WebSocket安全实时通信缺认证与校验跨站WebSocket劫持58GraphQL滥用查询接口未限深度与认证批量数据枚举59第三方组件漏洞开源组件版本存在已知CVE供应链攻击60前端JS泄露敏感逻辑与密钥写在JS里接口密钥、算法暴露4. 落地篇安全编码、基线检查、告警与应急处置学完漏洞原理之后最容易被忽略的是怎么把安全落到日常开发流程里。安全不是上线前扫描一次就完事而是贯穿需求评审、编码、测试、发布、运维整个生命周期的持续动作。这一节的30条知识点专门讲开发侧和运维侧能落地的安全实践。我特别想强调一点安全编码不是让你每个接口都写一堆过滤函数而是建立规范和自动化检查。比如参数校验做在入口层、输出编码做在模板层、权限校验做在调用前。把这些逻辑沉淀成框架能力而不是靠每个开发自己临场发挥效果会好得多。4.1 安全开发把安全写进代码的血管里安全编码的第一步是意识到默认不安全默认不信任任何输入、默认最小权限、默认加密传输。代码评审时我会重点看几个位置拼接SQL的地方、处理文件上传的地方、返回异常信息的地方、鉴权逻辑的地方。一个简单的判断方法是想象有个攻击者正在盯着你的代码找突破口他会从哪一行开始看另一个重要习惯是管理好密钥。很多项目把数据库密码、API密钥硬编码在代码里甚至直接推到代码仓库。密钥要放到环境变量或专门的密钥管理服务里轮换要有流程。依赖管理也值得重视你的项目引用的每个开源组件都可能携带漏洞定期跑一下依赖扫描知道当前版本的组件有没有已知CVE是基本功。4.2 基线检查与系统加固系统加固可以理解成把能关的门都关上能收的钥匙都收到最小范围。账号管理上清理僵尸账号、禁用root远程登录、设置密码复杂度服务配置上关闭不必要的服务、限制端口访问来源网络层面用防火墙只放行必用端口。基线检查就是这些加固项的标准模板你按着模板逐条核对就知道这台机器离安全状态还差多少。现在很多团队用自动化工具做基线核查效果确实好。但我的经验是工具只能帮你发现问题真正决定安全水平的是整改闭环。检查出问题放那不管等于白做。每个风险项都要有人跟进、有时限、有验证。等保合规的三级要求里很大一部分就是在讲基线、访问控制、审计日志这些基础能力道理是相通的。4.3 告警、日志与应急响应说个残酷的事实大部分入侵事件不是被防住的而是靠发现然后止损的。所以日志和告警系统的重要性和防火墙一样高。你需要知道日志存哪里、保留多久、哪些事件必须告警、告警之后谁来看。暴力破解、异常登录、批量拉取数据、文件权限变化这些都应该有对应告警规则。应急响应流程要提前演练不能等出事再想。至少要有几个固定动作先隔离受感染机器再保护现场证据然后分析入侵路径最后清理并恢复。我参与过几次真实应急最大的教训是别着急删文件——那些攻击者的脚本和执行痕迹反而是判断损失范围最直接的线索。平时准备一份应急手册把联系人、工具、操作步骤写清楚真出事的时候能省大量时间。编号知识点一句话说明关键场景/对应威胁61安全需求评审需求阶段识别风险点设计缺陷前期发现62威胁建模分析资产、入口、影响系统性发现漏洞63默认安全原则所有配置默认不信任外部输入减少默认配置类漏洞64输入校验入口层统一校验参数注入与异常数据处理65输出编码出口层统一转义输出防止XSS66参数化查询数据库操作统一预处理SQL注入根本防御67鉴权限权接口调用前做权限检查越权漏洞68最小权限原则进程和账号只给必要权限提权攻击69密钥管理密钥不入代码库并定期轮换凭据泄露70依赖漏洞管理定期扫描组件CVE供应链攻击71安全日志规范记录关键行为且不可篡改入侵溯源72加密传输全站HTTPS证书管理中间人窃听73数据脱敏敏感字段展示与存储脱敏用户隐私泄露74备份策略定期备份并演练恢复勒索软件恢复75账号生命周期入职开通、离职禁用内部威胁76防火墙策略最小化端口放行暴露面控制77基线检查按标准模板核对系统配置配置不合规78安全组管理云环境安全组与ACL控制云资源过度暴露79补丁管理及时更新系统和组件补丁已知漏洞被利用80防病毒/EDR终端检测与响应能力主机被植入后门81入侵检测流量与主机行为基线监控慢速攻击难以发现82WAF配置Web应用防火墙规则策略自动化攻击与扫描83告警分级不同风险级别对应响应时效告警疲劳忽略真风险84日志存储集中采集并保证留存周期错过攻击追溯期85溯源分析从日志还原攻击路径应急响应核心能力86隔离止损确认入侵后先隔离再恢复横向扩散87应急演练定期模拟安全事件流程真正出事的低效混乱88红蓝对抗攻防演练检验防护体系防护盲区89安全公告监测关注厂商与CVE公告0day曝光后快速响应90安全合规基线等保/ISO等行业合规要求合规审计不通过5. 成长篇学习路线、靶场刷题、面试求职与避坑心得最后这部分写给准备认真入行或转岗到安全方向的程序员。网上关于网络安全学习路线的说法很多有的让人先学编程有的让人先背工具命令我觉得都太偏了。真正有效的路径是先理解网络与Web基础再在靶场里练能不能看懂漏洞然后参与真实项目补响应与防御经验。整个过程是螺旋上升的不是一条直线。关于学习资源我特别推荐靶场练习。你能在可控环境里看到各种漏洞的发生和利用比看一百篇博客都记得牢。另外安全赛事也是成长的好机会CTF里的Web题能系统锻炼你的漏洞眼光AWD攻防赛则能练出防守和应急的手感。就业方面安全工程师的岗位需求一直在增长但要清楚安全方向也分很多种渗透测试、安全开发、安全运维、合规审计、应急响应。每个人的背景适配的方向不一样别盲目跟风。5.1 建议的学习路线我的建议是分四步走。第一步花两周把网络协议和Web开发基础补扎实知道HTTP请求长什么样cookie和session有什么区别。第二步在本地搭一套漏洞靶场环境按照漏洞类型逐个练习每个漏洞都做到看懂原理、能用工具复现、能说清修复方案。第三步学习防御和加固思考同一个漏洞站在防守方该怎么阻断顺便把你自己的项目和公司系统先检查一遍。第四步通过众测平台、开源项目或参与安全赛事积累实战经验逐步建立自己的方法论。整个过程不需要你成为编程高手但数据库、操作系统、Web开发三块基础越扎实越容易触类旁通。我在带新人的时候发现能把基础和原理讲清楚的人面对新漏洞时往往更稳而只会背工具命令的人换一个场景就懵了。5.2 考证、比赛与求职方向证书和比赛属于加分项不是入场券。行业认可的证书含金量各不相同考之前先查清楚哪些是业内普遍认可的避免浪费时间。安全赛事方面CTF、AWD、运维赛各有侧重建议至少完整参与一次团队赛体验从分工协作到时间管理的全过程。参赛的目的不只是名次而是逼你在短时间内做决策这种紧张正是成长的催化剂。求职时你要准备的不只是漏洞原理还有实战描述能力。面试官常问你做过什么项目、遇到什么问题、怎么定位和解决。空有理论知识很容易被问穿。我的建议是准备一两个自己真正做过的案例哪怕只是在自己搭建的靶场里完成过一次完整的授权渗透测试也要能把过程讲得层层分明——你发现了什么入口、用了什么思路、最后怎么收尾修复。这样的故事比我熟悉OWASP Top 10有说服力得多。5.3 给小白程序员的避坑建议最后聊几个我见过的坑。第一个是只看不练收藏夹里存了几十个教程手指头一次没动过这样永远学不会。第二个是迷信工具以为装个扫描器就天下无敌结果既不理解原理也看不明白扫描报告。第三个是忽视授权在任何未授权的目标上测试都是违法的练手请认准靶场和授权项目。第四个是只会攻不会防真正的安全能力不是你能不能打穿而是你能不能修好、防住、把影响控制在最小范围。我自己的体会是安全这条路越走越宽但它不会因为你收藏了100条知识点就变简单。它需要你在真实项目里反复验证在每一次事故复盘里积累体感。如果这篇整理能让你对网络安全有一个整体的认知框架在写代码时多一分对风险的敏感那它就完成了最重要的使命。
返回列表