
网易2020校招笔试-安全工程师提前批这个标题放在今天看依然是不少安全方向应届生反复搜索的关键词。每年七八月份各家互联网公司的校招提前批陆续启动安全工程师作为技术序列里相对小众但需求量稳定的岗位笔试考察的重点和套路其实相当固定。我自己当年也是走这条路线过来的从投递简历到笔试再到面试踩了不少坑也慢慢摸清了这套玩法。这篇就把安全工程师校招提前批笔试的考察范围、备考路线和现场答题策略完整拆一遍正在准备校招的同学可以直接拿去参考。1. 校招安全工程师提前批先看懂规则再谈刷题1.1 提前批和正式批到底差在哪先说时间线。2020届的校招提前批实际上是在2019年7月到8月启动的比正式批早了差不多一到两个月。很多同学会问提前批和正式批是不是一回事不都是投简历加笔试面试吗为什么要单独拎出来讲。区别挺大的我后来复盘才意识到提前批本质上就是公司抢人的第一波目标是把那些早就准备好的学生提前捞进来省得后面和别的公司竞争。流程上提前批通常是官网投递简历通过简历筛选之后进入笔试笔试过了再安排两到三轮技术面最后走一轮HR面。整体节奏比正式批快很多有的公司甚至压缩到两周内发offer。这里有个关键信息要确认提前批如果挂了还能不能继续投正式批。不同公司政策不一样有的明确说可以有的说不行投之前一定先看招聘公告里的说明别因为信息差白白浪费机会。还有一个容易被忽略的点提前批的宣传力度不如正式批大很多同学会错过投递窗口如果你刚好赶上竞争压力反而没有想象中大。而且提前批面试官的心态通常更开放他们看重的不是“你现在什么都会”而是“你愿不愿意钻研、有没有安全思维”哪怕某个方向不熟只要基础扎实进面概率依然很高。1.2 安全工程师岗位的能力画像和业务背景招安全工程师的公司对岗位的划分往往比开发岗更细。就拿网易来说业务线覆盖游戏、音乐、电商、教育多个板块安全团队要管的东西很杂Web业务安全、移动端安全、游戏外挂对抗、内部安全平台建设、安全运营响应每一块都会往不同方向招人。笔试虽然是统一的一套题但不同方向的同学侧重点完全不同。安全工程师的能力模型我习惯分成三层底层是计算机基础包括网络、操作系统、编程语言中间层是安全专业知识包括Web漏洞、密码学、逆向、二进制安全上层是实战能力比如CTF经验、SRC漏洞报告、安全项目经历。笔试主要考察前两层面试才开始重点挖掘第三层。这里想提醒一点安全岗笔试和开发岗笔试最大的区别在于它不只是考你会不会写代码更考你会不会“攻击性地思考”。同样一段代码开发岗问你这段程序输出什么安全岗会问你这段代码存在什么漏洞、怎么构造利用、怎么修复。这个思维的转变是很多从开发方向转安全方向的同学最不适应的地方。后面我在拆解笔试内容的时候会反复强调这个区别。2. 笔试考什么安全工程师的知识体系拆解2.1 计算机基础所有方向绕不开的地基不管你是走Web安全、二进制安全还是移动安全计算机基础这关必须要过。笔试里这块的占比通常在20%到30%看似不多但它决定了你能不能拿到那些“稳健的送分题”。网络知识是重点。TCP三次握手、四次挥手的过程一定要能画出来并解释清楚HTTP和HTTPS的区别、请求方法、状态码、常用的请求头DNS解析的流程这些基本概念题几乎每套卷子都有。另外常见端口和对应服务要背熟比如22是SSH、80是HTTP、443是HTTPS、3306是MySQL、6379是Redis题目经常给一个端口列表让你判断哪个服务存在安全风险。操作系统方面重点看进程与线程的区别、进程间通信方式、虚拟内存和物理内存的关系、Linux文件权限管理、用户和组的概念。这些知识不只是笔试要考后续面试聊渗透测试、聊提权都会反复用到。我当时专门花了一周时间把《深入理解计算机系统》前三章和《鸟哥的Linux私房菜》相关章节重新过了一遍笔试里遇到操作系统题就没慌过。编程语言和数据结构算法是另一块。安全岗笔试的编程题难度一般低于后端开发岗但并不是不考。语言上C和Python是最常见的笔试作答语言有些公司也接受Java和Go。我的建议是至少把Python的常用语法和标准库练熟比如字符串处理、列表字典操作、socket编程、hashlib、base64这些在安全笔试里出场率非常高。2.2 Web安全笔试里占比最大的重头戏如果你的方向是Web安全那OWASP Top 10就是你的阅读清单每年笔试都绕不开。SQL注入、XSS跨站脚本、CSRF跨站请求伪造、SSRF服务端请求伪造、文件上传漏洞、命令注入、XXE外部实体注入、反序列化漏洞、越权访问这些都是高频考点。笔试的考察方式不是让你背定义而是给你一段代码或者一个请求包让你判断存在什么漏洞。比如下面这种经典的PHP代码?php $id $_GET[id]; $sql SELECT * FROM users WHERE id $id; $result mysqli_query($conn, $sql); ?这就是典型的SQL注入漏洞用户传入的id参数直接拼接到SQL语句里没有经过任何过滤和预编译。安全的写法应该用预处理语句?php $stmt $conn-prepare(SELECT * FROM users WHERE id ?); $stmt-bind_param(i, $id); $stmt-execute(); ?再比如文件上传漏洞代码里只校验了Content-Type或者文件扩展名的黑名单攻击者可以组合各种绕过手法比如双写扩展名、大小写绕过、.htaccess上传、图片马配合文件包含等。这类题考的是知识点的深度和细节只看不练很容易漏掉一些冷门绕过技巧。这里我说一个比较推荐的复习方式本地搭一套DVWA靶场把所有漏洞级别从low练到impossible每个漏洞亲手试一次攻击、看一次代码审计、写一次修复方案。DVWA是专门用来练习的靶场环境在里面打洞没有任何安全问题。这个过程做完Web安全笔试里的题目基本都能一眼看出考点。2.3 密码学与安全协议背了就会但容易丢分密码学是安全工程师笔试里性价比最高的模块因为它的知识点相对固定记住了就有分但每年还是很多人丢分。丢分的原因不是不会而是记混了。对称加密要记住AES和DES的区别、分组密码的几种模式尤其是ECB模式为什么不安全。ECB模式下同样的明文会得到同样的密文无法隐藏数据模式所以实际应用中应该用CBC或GCM模式。非对称加密以RSA为代表要知道公钥加密、私钥签名的使用场景以及RSA常见误用比如使用了过小的公钥指数、没有做填充等。哈希算法要分清MD5、SHA-1、SHA-256的区别并知道MD5和SHA-1已经被证明存在碰撞攻击不能再用于数字签名场景。还有一个经常考的概念加密和签名的区别。加密是为了保密性用公钥加密、私钥解密签名是为了完整性和不可否认性用私钥签名、公钥验证。这个考点简单但非常经典笔试简答题里出现过不止一次。安全协议部分重点看HTTPS的握手流程。TLS握手过程中客户端和服务端如何协商加密套件、如何交换证书、如何生成会话密钥证书链的验证过程是什么样的。我当时的准备方法是自己画了一张简化版的握手流程图把每一步的消息内容和作用写清楚然后试着不看图复述一遍。这个方法很笨但效果很好笔试时遇到相关题目脑子里自动就浮现出那张图了。2.4 二进制与逆向拉开差距的核心模块二进制安全是安全工程师笔试里区分度最大的模块。Web方向的同学可能只考概念但如果你投的是二进制安全、漏洞挖掘或者安全研究员方向这部分的分值会明显增加。栈溢出的原理要能讲清楚函数调用时局部变量、栈帧和返回地址是怎么排布的攻击者如何通过缓冲区越界写覆盖返回地址从而劫持程序控制流。我当时准备时写下了一个最简化的示例#include stdio.h #include string.h void vuln(char *input) { char buf[64]; strcpy(buf, input); } int main(int argc, char **argv) { vuln(argv[1]); return 0; }这段代码里的strcpy不做边界检查当传入的字符串超过64字节时就会覆盖栈上的返回地址。理解这个原理比记住某个工具的用法重要得多。逆向工程方面至少要能看懂简单的汇编指令知道栈寄存器rsp/rbp、指令指针rip的作用。工具上静态分析用IDA或者Ghidra动态调试用gdb笔试不一定要求你操作工具但会给一段反汇编代码或者加壳的二进制文件让你分析如果你连main函数入口都找不到那基本就放弃这题了。对非二进制方向的同学我的建议是把栈溢出原理和常见GDB命令记熟不用深入钻研但至少不要让这部分的题目直接放弃。笔试是整体得分不是单项优秀保住基础分比钻研难题更重要。2.5 安全开发与合规常识容易被忽视的加分项这部分看起来不像考试重点但它经常出现在简答题里而且属于“只要知道就能拿分”的题目类型。安全开发生命周期也就是SDL是把安全融入软件开发的各个阶段从需求评审、设计评审、编码规范、安全测试到上线后的监控响应的完整流程。笔试可能会问一个项目在进行安全评审时应该重点看什么或者你在开发过程中如何保证代码安全。这类题没有标准答案但踩点给分你把SDL的核心环节列出来再结合实际场景说几句分数就不低。安全模型和风险评估方法也是常客。STRIDE威胁建模分别对应伪装、篡改、否认、信息泄露、拒绝服务、权限提升这六类威胁DREAD则用来对风险进行评分。笔试里给你一个具体业务场景让你识别可能存在的风险和威胁就可以用这些模型来答题。安全设备和产品的基本概念也建议了解。WAF是Web应用防火墙IDS是入侵检测系统IPS是入侵防御系统SOC是安全运营中心。这些概念不一定直接考但写场景分析题的时候用上会显得专业。最后数据安全和隐私保护意识要摆正比如用户密码不能明文存储必须加盐哈希日志不能记录敏感信息对外接口要做权限校验。这些都是笔试里“价值观正确”的得分点。3. 我的备考路线一套可以直接照搬的实操方案3.1 第一阶段搭知识框架加靶场实战备考安全工程师笔试最忌讳的就是上来就刷题刷着刷着发现哪哪都是漏洞。我自己第一轮备考踩了这个坑后来重新规划才把节奏拉回来。第一阶段建议花两到三周目标是搭起完整的知识框架。教材方面Web安全方向看《白帽子讲Web安全》和《Web安全深度剖析》密码学方向看《图解密码技术》二进制方向看《程序员的自我修养》的运行时章节。不用追求把每本书从头到尾都读完重点是把目录当作知识地图逐章搞清“这个知识点是什么、在安全里有什么用”。看书的同时一定要搭配靶场实战。DVWA是Web安全最好的入门靶场没有之一SQL注入专项练习用SQLi-labsXSS专项练习用XSS-labs文件上传专项练习用Upload-labs。这些靶场现在都有现成的Docker镜像本地起环境很快。每做完一个靶场关卡记录三件事漏洞成因、攻击过程、修复方案。这个笔记后面会变成你最有价值的复习资料。编程题也不能落下。每天至少用一到两个小时的碎片时间在LeetCode上刷几道基础题重点是字符串、数组、哈希表、栈和队列。不用担心刷不完安全岗的编程题通常不难把常用操作练熟、手速提上来就够了。3.2 第二阶段真题模拟与错题复盘第二阶段花一到两周从输入转向输出。这时候知识框架已经搭完靶场也过了一遍可以开始做模拟题了。刷题平台推荐bugku和攻防世界这两个平台收集了大量CTF和校招风格的笔试题涵盖Web、逆向、密码学、杂项各个方向。我的方法是按考试方式去做把每道题当成真正的笔试题给自己计时不翻书、不查资料做完再对答案。这样能真实暴露你哪些知识是“以为会了但实际不会”的。错题复盘是这个阶段最重要的工作。不要只看一眼正确答案就翻篇一定要把错题对应的知识点找出来回到书里或者靶场上重新验证一遍。我当时整理了一个错题表格列了四列题目考点、错误原因、正确思路、对应复习资料。这样筛出来的知识盲区特别清晰考前三天只需要翻这个表格就够了。同时每周安排一到两次完整的模拟笔试。找一个安静的时段按真实笔试的时间长度把选择题、简答题、编程题整套做一遍。这不仅是知识测试也是体力测试很多校招笔试要连续做两个小时以上不提前适应的话后半段脑子会直接转不动。3.3 第三阶段输出整理与面试素材准备备考后期最重要的能力是讲清楚。我的做法是把每个核心漏洞写成一页纸内容包括漏洞原理、利用条件、攻击步骤、修复建议、经典案例。写完之后不看笔记自己试着口头复述一遍。如果你能用一个完全没有安全背景的朋友也能听懂的方式讲清楚SQL注入是什么那这一块知识就真正变成自己的了后面进面试也不怕深挖。同时要把自己的项目经历和实战经历整理成面试素材库。笔试只是第一关通过笔试后马上就是面试面试官一定会问你做过什么安全相关的东西你有CTF经历吗你提交过SRC漏洞吗如果你的答案是“都没有”那就需要在笔试通过前临时补一补。可以做一个小的安全工具项目比如写一个简单的端口扫描器、一个目录枚举脚本或者完整分析一个已经公开的漏洞案例。哪怕只是几十行代码只要能说清楚设计思路和你踩过的坑面试官都会觉得你是有安全思维的人。4. 笔试现场时间分配和答题策略4.1 拿到试卷先扫描全卷再定优先级笔试开始后的前五分钟不要急着做题。先把整张卷子从上到下快速浏览一遍确认题型分布、题量大小、分值比例。我自己的策略是先做选择题因为选择题通常耗时最短、得分确定性最高再做简答题和场景分析题这类题按点得分写了就有分最后集中精力做编程题因为编程题最容易卡住一旦卡住会疯狂消耗时间。选择题里如果遇到不会的先在草稿纸上记下题号果断跳过不要在上面纠结超过一分钟。安全的笔试题目经常故意设置一些有迷惑性的选项越是犹豫不决越容易被带偏。跳过之后等所有会的题目都做完了再回头来集中攻克这些标记题这时候心态会稳很多。4.2 简答题与场景题用固定框架拿稳分简答题和场景分析题是很多人丢分的重灾区不是因为不知道答案而是回答没有条理踩不到得分点。我的经验是遇到“分析某个漏洞”的题目一律用“漏洞成因、利用方式、危害、修复建议”这个四段式框架来答。比如题目给了一段代码让你分析安全风险你就先指出漏洞类型解释漏洞产生的原因说明攻击者如何利用分析可能造成的危害最后给出修复方案。这个框架看起来简单但能保证你不漏掉得分点而且阅卷人扫一眼就能看到关键词。遇到“某个业务场景存在什么安全风险”的题目用STRIDE模型来套逐类分析伪装、篡改、否认、信息泄露、拒绝服务、权限提升六个维度可能对应什么问题。如果能把风险按严重程度排序并给出对应的解决思路这题基本就能拿高分。还有一个容易被忽略的技巧简答题的答案要简短但结构化不要写一大段没有逻辑的文字。用列表、分点、上下步骤来呈现阅卷体验会好很多。我当年有几个简答题其实答案内容并不比别人多但因为排版清晰最后得分都超过了预期。4.3 编程题先跑通再优化别在细节上耗死编程题是笔试里最考验心态的部分。安全岗的编程题通常有这些类型字符串和数组处理、简单的加解密实现、网络通信编程、日志分析或者正则匹配。我的建议很明确先写一个能跑的版本再考虑优化。很多同学一上来就想写最优解结果写到一半发现思路不通时间已经耗光了。正确的做法是先用最直白的暴力解法把功能实现出来保证代码能运行、能通过示例用例然后再看是否有多余时间优化时间复杂度和空间复杂度。代码规范也很重要。变量命名要清晰关键逻辑要注释输入输出格式要和题目要求完全一致。很多笔试平台是自动判题编译不过就是零分辛辛苦苦写出思路但格式不对是最亏的。另外编程语言的选择建议用你最熟练的那门。安全岗笔试的编程题不限制语言没必要在考场上挑战自己不熟悉的新语言。Python的代码量通常更少方便快速调试是我自己在笔试场景下的首选。5. 踩坑实录这些弯路希望你们别再走5.1 只背概念不实战题目一变就懵我备考时犯过的第一个错误就是太依赖看书和背笔记以为把SQL注入的原理背下来就算掌握了。结果第一次做模拟题题目换了场景不再是经典的登录绕过而是给了某个复杂API调用链我就怎么都想不明白注入点在哪。后来老老实实在靶场里把每种漏洞亲手打了一遍效果立刻不一样。安全工程师笔试题目很少考死概念更多是考你在具体场景里的分析能力。这种能力没办法只看书获得必须动手。靶场就是练习这个能力的合法环境多花时间在靶场里试错比多看几本章节总结有用得多。5.2 难题钻牛角尖基础分反而没拿满第二次模拟笔试的时候我遇到一道逆向分析题当时特别上头非要把它做出来不可结果在那道题上耗了将近四十分钟后面的简答题和编程题时间不够只能草草写几句。成绩出来之后我复盘那道逆问题本身分值并不高因为时间不足丢掉的基础分反而更多。后来我给自己定了一条硬规则任何一道题思考时间超过十分钟还没有思路立刻跳过绝不恋战。笔试是看总分不是看单题精彩程度。把能拿的分全部拿到手比攻克一道难题有意义得多。5.3 对结果的心态笔试不等于终点提前批笔试出结果之后几家欢喜几家愁。我自己当时也有笔试不理想的经历那时候确实挺沮丧的但回头看笔试只是一个起点它考的是你在这个时间节点上的知识储备不代表你以后的发展上限。如果你这次笔试没过也不要灰心。安全工程师的知识体系是螺旋式上升的第一轮备考打下的基础不会白费正式批或者来年的春招你会发现自己面对同样题目时从容得多。我当时在复盘笔记的最后一页写了一段话大意是安全这条路上笔试是通行证但真正你的竞争力是持续的实战积累和永不停止的好奇心。这句自我鼓励的话陪伴我走过了后面很长一段求职路。