
2017年美团秋招的安全工程师笔试B卷我也算是一路刷过来的。当时安全岗笔试不像现在这样有大量现成面经拿到卷子基本靠平时积累硬扛。现在回头看那套题考察的核心并不是某个具体漏洞的利用而是你有没有建立安全工程师的分析思维。这篇文章不打算逐题报答案那种东西大家上网一搜就有我想从岗位能力模型的角度把这类笔试背后真正想考察的东西拆开帮后续准备安全岗的同学少走弯路。1. 安全工程师笔试的核心逻辑它到底在筛选什么人1.1 安全工程师笔试与开发岗笔试的本质区别很多同学准备安全岗笔试时很容易犯一个方向性错误花大量时间刷算法题和编程题。不是说编程能力不重要而是安全工程师笔试的筛选逻辑和开发岗完全不同。开发岗笔试看的是“你能否在限定条件下把功能做出来”安全岗笔试看的是“你能否在别人做出来的功能里发现问题并且知道为什么这是问题”。以那套B卷为例题目覆盖面看起来杂实际上所有考点都指向同一个能力模型攻击面识别能力。什么意思就是给你一段代码、一个业务场景、一个接口描述你能不能快速判断出哪里会有问题、问题的影响有多大、怎么验证。这比单纯知道SQL注入语法有价值得多。我见过不少基础不错的同学漏洞原理背得特别熟XSS、CSRF、SSRF张口就来但一碰到具体场景就不知道从哪下手。原因就在于他们按“漏洞类型”学安全而不是按“业务链条”学安全。而笔试和面试恰恰是在模拟后者把安全能力放进真实业务流里考察。安全岗位的笔试还有一个特点题目往往不会直接告诉你“这是一个注入点”而是给你一段代码或描述让你自己发现入口。这需要一种“识别套路之外的异常”的敏感度。比如一个简单的登录功能数据库查询直接拼接参数、错误信息回显敏感细节、登录接口没有速率限制、返回包携带多余字段——每一个点单独看都不起眼但在笔试场景里都可能是考点。1.2 那套题背后隐藏的能力考察图根据我对多套安全岗真题的复盘2017年美团这套B卷覆盖的能力维度大概是这样的考察维度对应笔试考点想看到的能力Web基础SQL注入、XSS、CSRF、SSRF等漏洞原理最基础的攻击面识别能力业务安全越权、支付逻辑、优惠券、并发竞态能不能站在业务角度发现问题客户端安全逆向分析、签名校验、代码混淆、防调试对App端防护体系的理解密码学基础加密算法选型、哈希存储、密钥管理安全编码基本功工程素养安全编码规范、日志与监控、应急响应思路是否具备工程化安全思维注意这里有一个很容易被忽略的点业务安全在笔试里占比非常高。很多同学复习安全岗把精力都放在Web漏洞经典题型上结果到了考场发现大量题目在问优惠券逻辑漏洞、订单金额篡改、越权访问、并发问题。这其实是互联网公司安全团队的真实需求——他们招的不是渗透测试研究员而是能在一线业务场景里防守的安全工程师。美团这类业务形态丰富的公司尤其如此。外卖、到店、酒旅、电影、支付每个业务线都有自己独特的攻防场景。笔试题目会偏向“给你一个业务场景请你找出可能被攻击的点”这种开放性题目而不是死板的操作系统选择题。这类题目没有标准答案但答得好不好一眼就能看出差距。2. 高频考点拆解从Web安全到业务逻辑漏洞的考察深度2.1 漏洞原理不是让你背定义从SQL注入展开讲SQL注入几乎是安全岗笔试必考题但考察深度差异很大。初级考法是“给定一段拼接SQL的代码指出漏洞并修复”稍微进阶一点的考法是“给出一个登录接口分析所有可能的攻击面”。后者的答案就不仅仅是“参数拼接”这么简单还会涉及登录接口是否需要防暴力破解、是否需要验证码、是否泄露用户枚举信息、登录成功后是否返回敏感字段。我当时总结过一套SQL注入相关问题的通用回答框架先看注入点再看注入类型接着判断利用难度最后给出修复方案。一套下来不管题目怎么变形至少能覆盖百分之八十的得分点。具体来说拿到一段代码或者一个接口描述第一步找所有进入SQL语句的参数第二步判断参数类型和过滤情况第三步思考如果存在注入能否通过报错、盲注或联合查询获取数据第四步是修复。笔试答题时不要只写“预编译可以防止注入”就完事最好补充一句“为什么预编译能防护根源在于参数化查询使得数据和语句分离数据库不再把用户输入当作代码执行”。很多同学知道该怎么做但说不清原理这在阅卷人看来就是“背过答案不真懂”。2.2 XSS、CSRF、SSRF、文件上传四种必考漏洞的考察深度这四种漏洞在安全笔试中都是核心常客但各自的考察侧重点不同。XSS重点考察存储型与反射型的区分以及利用链的完整性。答题时如果只写“输出转义”得分有限如果能写出“在输出点做上下文感知编码HTML属性、JavaScript、URL各自需要不同编码规则”得分就会明显高一个档次。CSRF的考点倾向于“为什么SameSite Cookie能缓解大部分CSRF”和“Token校验的边界”。这里有个容易丢分的点很多同学答CSRF的防护只写Token和Referer校验忽略了一个关键细节——登录接口本身不需要CSRF防护因为CSRF的核心是伪造已登录用户的请求而登录请求本身不依赖登录态。这种细节问题正好能筛掉“背书党”。SSRF在笔试中通常以代码审计形式出现比如给了curl请求的代码问怎么找SSRF、如何利用、如何修复。踩分点在于是否会识别内网地址的绕过方式比如重定向、DNS解析、IPv6转换是否能写出完整的修复方案协议白名单、内网IP黑名单、禁用重定向。文件上传则围绕“校验方式”展开回答时最好能讲清楚“后缀校验是不够的还要校验MIME类型、文件头内容并将上传目录与执行目录分离”。2.3 业务逻辑漏洞最容易丢分也最贴近实战的一类如果说Web漏洞还能靠刷题复习业务逻辑漏洞就真的靠“安全意识”了。这也是美团这套B卷里我印象最深的部分。这类题目往往不涉及任何高深的技术纯粹看你能不能换个角度思考。2.3.1 越权类问题从水平越权到垂直越权越权是业务逻辑里最高频的考点。水平越权就是A用户能操作B用户的数据垂直越权就是普通用户能执行管理员操作。笔试题经常给一个订单查询接口问你能发现什么问题。如果你只看到“未校验用户ID”就收笔只能拿到基础分。更完整的答案应该包括接口是否只依赖前端传入的userId来定位资源服务端是否校验了当前登录用户与资源归属用户的一致性批量接口是否需要做数据权限过滤接口响应是否通过ID枚举可遍历他人敏感数据。再进一步想订单信息和用户信息属于不同敏感级别高敏数据的越权访问往往意味着需要直接定级为严重漏洞这个在应急响应和漏洞定级中也有通用的评判逻辑。2.3.2 支付与金额相关逻辑安全工程师的必答题支付安全在业务型互联网公司的笔试里非常重要。围绕支付场景考点一般包括这几个方向支付金额是否能在客户端一侧被修改前端校验的脆弱性支付成功后回调是否校验签名与金额一致性有没有并发支付导致“超卖”或重复入账的风险订单状态机是否存在异常状态流转美团代付这类业务场景尤其要关注“代付方”和“被代付方”的权限模型。比如代付时是否校验了代付人的账户状态、是否限制了代付金额上限、是否存在通过构造请求绕过风控策略的路径。答这种题安全工程师的身份就不太够了你得把自己当成业务产品经理把整个交易链路走一遍才能发现问题。这背后反映的其实是安全工程师岗位的一个明显趋势安全工程师正在从“漏洞发现者”向“业务风险识别者”转型。笔试题如此真实工作更是如此。2.3.3 并发与竞态容易被忽略的隐藏考点提到支付就必然会扯到并发。很多安全方向的同学对并发问题不敏感觉得这是后端开发的事。但实际上并发导致的竞态问题在业务安全里非常常见优惠券重复领取、积分重复累加、库存超发、抽奖概率被并发绕过。笔试常会给一个简单的领券接口问你有没有安全问题如果只答“没有鉴权”就是没抓到重点真正要答的是“同一个用户同一时间多次请求服务端有没有做幂等处理”。有经验的答题思路是先看接口是否校验了用户身份再看同一用户的多请求在服务端是否是串行处理最后看有没有采用数据库唯一索引、Redis分布式锁或状态机约束来保证唯一性。这个答题结构能体现你对并发场景的理解深度而不只是死记硬背漏洞类型。3. 实操场景题怎么把一道开放题答出区分度3.1 一个登录接口的完整测试思路开放场景题最典型的问法是“给你一个登录接口你会从哪些角度进行安全测试”这类题看起来简单实际上非常考验思维的系统性。大部分人的第一反应是“测SQL注入测暴力破解”然后就没有然后了。我自己常用的答题框架是四个维度身份认证、传输安全、数据保护、风控策略。身份认证接口是否限制登录失败次数、是否容易被撞库、验证码是否有有效期和一次性校验、密码找回流程是否存在逻辑绕过、登录是否返回用户枚举差异信息传输安全是否强制HTTPS密码字段是否在客户端加密加密后是否存在重放风险数据保护登录成功后的Token如何生成与存储响应体是否返回过多用户信息如手机号、身份证号日志是否会记录密码相关字段风控策略是否对异常IP进行限制、是否有设备指纹维度、异地登录是否有提醒、是否接入人机验证每个维度都展开说一两句面试官能立刻看出来“这个人是真的分析过登录业务”而不是只背了几个漏洞名称。如果笔试题是简答或者开放题这种回答能明显拉开和其他人的差距。3.2 密码学与安全编码的考察别只答“用HTTPS加密”密码学基础在安全笔试中占比不算大但几乎必考。常见的考察点包括对称加密和非对称加密各自适用场景、哈希算法为什么适合存储密码、盐值salt的作用、密钥交换流程、数字签名流程。我遇到过不少同学一回答加密相关的问题就喜欢堆术语什么AES、RSA、MD5、SHA-256全往上摆但根本没有区分用途。实际上阅卷人想看到的答案很朴素密码存储用哈希盐传输用HTTPS/TLS敏感数据加密存储用对称加密密钥分发和数据签名用非对称加密。能答清楚这几个选择的理由比罗列算法名称得分高得多。有个很容易被考察的细节是MD5和SHA-1为什么不适合存储密码。只答“有彩虹表攻击”只能算及格如果能补充“因为无盐哈希相同密码会产生相同哈希值攻击者可以批量对比且MD5/SHA-1计算速度极快暴力破解成本低”这才是完整回答。做安全工作知道“用什么”只是第一步知道“为什么只能用这个”才是真正的分水岭。3.3 笔试中的工具使用题如何把命令写出工程感安全笔试偶尔也会考工具比如nmap扫描、sqlmap使用、Burp Suite抓包改包。考得简单一点会问“端口扫描用什么工具”“抓HTTPS包怎么配置证书”考得复杂一点会给出一个内网环境让你描述渗透思路。答题时要避免工具命令的堆砌重点是操作背后的目的。比如问“nmap扫描一个IP段怎么发现开放了80端口的Web服务”很多同学直接写“nmap -sV 192.168.1.0/24”其实这并没有回答出他的思路。更好的表达是分步描述首先主机存活探测识别在线IP其次端口扫描锁定80和443最后版本探测与服务识别判断Web中间件类型和版本信息。工具只是手段笔试真正考察的是你对“信息收集、漏洞发现、利用验证、结果分析”这条完整链路的理解。哪怕你不记得某条命令的具体参数把思路写清楚也能拿到大部分分数。4. 客户端安全与风控对抗App防护、签名校验与逆向思维4.1 为什么安全笔试会考客户端签名与加固美团这套B卷有一类题目让很多准备不充分的同学措手不及——客户端安全方向。题目会涉及App签名校验、代码混淆、防调试、反抓包等话题。对于只复习了Web漏洞的同学来说这些题目基本等于送命题。这里需要理解一个背景像美团这样的互联网公司App是核心业务载体客户端面临的安全威胁非常直接常见的有接口被恶意调用、App被二次打包、业务逻辑被逆向分析。因此安全团队的招人需求里客户端安全能力占了很大一块。笔试考客户端安全其实是在筛选“具备客户端攻防基础认知”的候选人。针对签名校验常见考法包括APK重打包后为什么签名会变化、签名校验在代码中的实现位置有什么讲究Java层还是Native层、为什么简单的签名校验可以被绕过。答题时如果能连接到一个本质问题——签名校验的核心不是“检测签名”而是“保证代码的完整性和来源可信”阅卷人会明显感觉到你理解了这个机制的设计初衷。4.2 从“破解”到“防护”安全工程师的逆向视角聊到客户端安全就绕不开“逆向”。很多同学对逆向有畏难情绪觉得要会汇编、要会脱壳、要会动态调试门槛太高。作为安全工程师笔试不会要求你当场逆一个APK但会考察你对逆向思维的理解和应用。这里说的“逆向思维”核心是“站在攻击者的角度去审视自己的防御”如果我是攻击者我会怎么拿到加密算法的Key、怎么绕过Root检测、怎么分析出签名验证的逻辑位置。有这种思维的人在设计防护方案时才不会只停留在“加一层壳”的层面而会去思考“攻击者拿到脱壳后的DEX如何在代码层面继续对抗”。美团热词里有一个叫“美团mtgsig”的签名机制其实也从侧面反映了一个行业趋势客户端的每个关键请求都在与签名、风控策略绑定。这种机制的目的不是为了“让逆向不可能”而是“提高攻击成本”。安全工程师笔试里考这类题想看到的回答恰恰是“我知道这类机制的优缺点也知道为什么需要多种手段组合防护”而不是“我知道怎么绕过它”。4.3 业务风控与支付安全从代付、并发到商户信息保护业务风控是互联网安全团队的重点方向也是安全笔试里最具行业特色的一类题。考察点往往结合具体业务代付功能的安全设计、优惠券的防刷策略、商户信息保护、接口防爬。代付场景的安全设计核心是资金流向正确性和风控前置代付人与被代付人之间是否有授权关系支付密码或验证码是否覆盖代付场景代付金额是否有上限代付行为是否有异常模型监控比如短时间多次代付、异地代付、新用户代付信息保护方面商户信息获取失败这类问题背后可能涉及的是接口越权与数据权限设计。考题如果问“一个接口返回了商户列表含手机号、结算账户如何做安全设计”真正踩分的点在于接口鉴权谁能调、数据权限能看哪些商户、字段脱敏返回前要不要打码、日志脱敏日志里不能记录完整账户。这四个维度一层一层答就能覆盖题目的大部分考察意图。通过这类题目安全笔试其实是在考察你有没有“从单点漏洞到风控体系”的整体认知。攻防并不仅仅停留在技术层更延伸到产品和业务的设计层。5. 复盘与避坑安全工程师笔试的常见雷区和准备方法5.1 考点准备的优先级排序结合我自己刷题和后来带新人的经验安全岗笔试的准备优先级应该是Web安全基础 业务逻辑安全 密码学基础 客户端安全与逆向基础 安全编码与应急响应。Web安全基础是基本面至少要做到漏洞原理、利用场景、修复方案三位一体地掌握。业务逻辑安全是拉开差距的关键项也是最容易通过刷题提升的部分因为它考察的就是“多想一步”的能力。密码学基础不用学得太深但哈希、加密、签名、密钥管理的应用场景一定要熟练。客户端安全和逆向基础如果简历上没有相关项目经验可以放低优先级但至少要理解常见防护措施的目的和局限性。很多同学喜欢一开始就抱着《Web安全权威指南》啃这没问题但如果你准备时间只有两三周效率最高的方式其实是“按漏洞类型刷题按业务场景复盘”双线进行。先刷题找到薄弱点再通过场景题把知识点串联起来。5.2 面试官眼中“好答案”长什么样笔试答题也分层次。同样一道“如何防护SQL注入”三层答案分别长这样第一层使用预编译语句。这是及格线知道怎么做但不知道为什么第二层使用预编译语句因为参数化查询能避免SQL语句结构被改变同时对用户输入做严格白名单校验。这是良好知道原理也能补充纵深防御第三层使用预编译语句是根本方案因为数据和语句在协议层面分离对于无法使用预编译的场景要退而求其次做过滤和转义上线前用审计工具扫描安全测试时覆盖注入点验证修复有效性。同时数据库账户要最小权限化避免注入后影响范围扩大。这是优秀能从开发修复、安全测试、风险控制多个维度回答很多题目没有标准答案但面试官能一眼分辨出你是“看过答案”还是“真的理解”。好答案的共同特点是先给结论再讲理由最后补充边界和异常情况。这种“结论-理由-边界”的答题结构在笔试和面试里都非常好用。5.3 写给准备校招安全岗的同学安全工程师的笔试准备最忌讳的就是“只看不练”。我见过太多同学收藏了一堆资料真到笔试的时候发现很多知识还停留在“好像在哪里见过”的层面。建议至少留出三到五天时间自己动手搭一个本地漏洞环境把SQL注入、XSS、CSRF、逻辑漏洞的类型都亲手跑一遍。只有自己实操过才知道漏洞“长什么样”而不是只在PPT上见过。另外很多安全同学会忽视一线业务场景的积累日常多做业务逻辑的“攻防推演”会非常有用。用外卖App点一单走完整个支付流程想想每一步如果去掉校验会发生什么用电商App领一张优惠券想想如果并发请求会怎样打开任意一个App登录页想想密码传输和错误提示是否存在风险。这种日常练习不需要任何工具随时可以做但对安全思维的养成帮助极大。安全工程师不是一个“考完证书就完事”的岗位它需要持续学习、不断怀疑、保持攻击者视角。如果你现在还在准备笔试送给你一句我后来带人时常说的话**不要把安全笔试当考试把它当成一次安全评审你是在给一套业务系统找出所有可能被攻击的点。**带着这种心态去答题考出来的水平一定不会差。