尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

安全工程师笔试核心考点解析:从Web漏洞到系统防御

安全工程师笔试核心考点解析:从Web漏洞到系统防御 一、那次笔试让我重新理解了“安全工程师”2018年秋季我投了京东安全工程师的校招岗。笔试刷下来那一刻第一反应不是“题好难”而是——这场笔试和我在学校学的、在网上看的那些安全内容完全是两套东西。安全工程师笔试特别是大厂校招的笔试题和CTF题完全是两个路子。CTF更偏向“解题”给定一个明确的目标去逆向、去爆破、去利用所有信息都摆在你面前。而笔试通常是一道道看似零散的选择题、判断题、简答题背后考验的是你对整个安全知识体系的系统性理解而非某个漏洞的“一击必杀”。这篇文章不是去回忆2018年京东笔试题的具体答案说实话过了这么多年题目细节已经记不全了而是结合那次笔试以及后来我参与过的多次安全岗位招聘和面试经验把安全工程师笔试背后真正的考察逻辑拆开来看。如果你正在准备安全方向的校招或社招这篇文章应该能帮你少走不少弯路。我复盘了那套题结合当时考场上的思路和后来实际工作中反推的“出题人意图”整理出下面这份完整的备考点。这里面既有技术知识的讲解也有我踩坑后的反思希望能帮你把复习路径捋直。2. 安全工程师笔试的逻辑从岗位需求倒推考点分布2.1 为什么笔试要考这么多“基础”内容打开一套安全工程师笔试题你会看到Web安全、密码学、操作系统、网络协议、编程基础、安全运维……覆盖面极广。很多人第一反应是“考这么杂干嘛我面试的是安全岗又不是全栈开发”。这个疑问当时也在考场里闪过但后来我自己开始帮团队筛简历、出笔试题的时候才真正明白安全工程师本质上是一个“红线”岗位。它需要的不是只会打某个漏洞的人而是需要理解系统整体架构、能做风险评估和防御设计的人。一个Web渗透测试的漏洞利用写得再溜如果完全不懂Linux系统权限体系和Windows域控结构遇到内网横向移动场景就抓瞎。从这个角度看笔试的考点分布其实是按照岗位的能力模型来分配的能力维度考察范围出题占比经验估Web安全SQL注入、XSS、CSRF、文件上传、命令执行30%-40%密码学基础对称/非对称加密、哈希算法、数字签名10%-15%网络基础TCP/IP协议、DNS、HTTP协议、常见网络攻击10%-15%系统与基础运维Linux权限、日志分析、Windows基础、防火墙10%-15%编程与逻辑代码审计思维、漏洞成因分析、数据结构基础10%-15%安全概念与合规安全等级保护、SDL、应急响应流程5%-10%注意这个比例不是说Web安全考得多就一定最重要。恰恰相反真正拉开分差的往往是密码学基础和系统运维部分。原因很简单Web安全题目大家都会重点复习而密码学里的分组模式区别、RSA的数学原理、Linux的权限模型很多人只是“眼熟”真正到选择题里换一个问法就懵了。2.2 校招笔试的内在筛选逻辑大厂校招简历投递量非常大安全岗位尤其如此。笔试的核心目的不只是“选出会做的人”更是在巨大的简历池中筛掉那些只会背面试题、没有系统理解的人。你会发现笔试题有个特点所有题目都是**“换了一个问法”**的基础知识。比如不直接问“什么是SQL注入”而是给一段代码问你“上述代码存在什么漏洞如何修复”不直接问“RSA是干什么的”而是问“在HTTPS握手过程中RSA和AES分别承担什么角色”。这种出题方式的底层逻辑是知识可以被“背”但理解很难被“装”出来。真正理解一个原理的人无论怎么换场景、换问法都能识别出底层的模式和套路。我当时考场上的经验是时间分配比刷题量重要得多。整套题虽然题目不算特别多但每道题都需要认真思考特别是简答题需要组织语言。我的策略是——先快速扫一遍所有题目把有把握的选择题和判断题先做掉保证基本的正确率然后集中时间攻克简答题最后再回头啃那些模棱两可的题。这个策略在后面几年我自己参加其他面试时也反复使用很管用。3. Web安全核心考点主流漏洞背后的实战判断链3.1 SQL注入不是“你注入了什么”而是“你怎么判断的”Web安全里最经典的考点没有之一。笔试题里出现SQL注入基本是板上钉钉的事但考察方式往往不是让你写一个payload而是给你一段代码或一个报错信息让你分析注入类型和修复方案。我当时遇到的题型是这样给出一段PHP代码$id $_GET[id];然后直接拼进SQL语句执行问这个代码有什么问题应该怎么修复。看起来很简单但题目里挖了几个容易忽略的坑第一参数没有做任何过滤和类型校验。第二拼接方式是单引号字符串拼接。第三页面没有开启错误信息屏蔽数据库报错会直接回显到前端。所以它不仅存在SQL注入还可能导致数据库信息泄露修复时不仅要用参数化查询还需要把错误提示关闭。要答好这类题你脑子里需要有一条完整的判断链首先确认是否存在动态拼接字符串拼接SQL语句。其次判断注入类型字符型有无引号包裹、数字型无引号直接拼接、搜索型LIKE语句。然后推断利用方式联合查询页面有回显位、报错注入有报错信息回显、布尔盲注页面逻辑可被条件触发、时间盲注完全无回显但能通过延迟判断。最后给出修复方案参数化查询PreparedStatement是最根本的修复方式配合输入校验和最小化数据库权限形成纵深防御。关于SQL注入的笔试作答面试官最看重的是“你脑子里有一整条链路”而不是零散的步骤。比如问“什么是联合注入”如果你只能说出“用union select”而说不清其中的前提条件——页面必须有明确的回显位置、字段数必须匹配——那就说明你只是背了一个名词。3.2 XSS三类型的利用差异不是背出来的XSS也是必考题而且通常是选择题加简答题的组合。2018年那套题里有一道场景题一个博客系统支持用户发表评论评论内容在后端做了HTML标签过滤但仍存在XSS漏洞问这是什么类型的XSS。答案是存储型XSS。原因在于它打在服务器端存储的评论内容上所有访问该页面的用户都会中招而不是只有自己中招。很多人会在存储型和反射型之间犹豫关键要抓一个点——恶意脚本是否被持久化存储在服务端。三者的利用差异可以归纳成一张表笔试前务必吃透XSS类型存储位置触发方式危害范围反射型不存在URL参数中需诱导用户点击恶意链接单个用户存储型服务器数据库任何用户访问受影响页面所有访问者DOM型浏览器的DOM节点前端JS逻辑触发依赖前端代码逻辑笔试还有一种考法给出一个过滤函数让你分析它能不能防住XSS。这是最容易丢分的地方因为XSS的防护远不止“过滤尖括号”那么简单的。我记得当时有一道题问“对用户输入执行htmlspecialchars函数后是否绝对安全”答案是否定的。原因有几个一是在某些场景下htmlspecialchars没有设置ENT_QUOTES单引号没有被转义二是如果内容出现在script标签内部或事件属性中HTML实体编码可能在某些上下文中失效三是如果应用存在明显的编码转换问题宽字节、二次解码等过滤可以被绕过。这个考点非常经典一看到“某个过滤能否完全防御”就要有警觉。3.3 CSRF与越权从单点漏洞联想到数据链路风险CSRF同样是高频考点笔试题通常不会直接问“什么是CSRF”而是给一个转账、改密码、发帖等场景让你分析攻击链。关键点有三个利用用户的登录态、无法获取用户Cookie内容、只能“代替用户发请求”。要答好CSRF的题你必须理解它的本质是“身份认证与请求来源校验的分离”——服务器只认Cookie里的Session却不验证这个请求是不是用户主动发出的。所以修复方案的思路也围绕这个本质展开一是加CSRF Token在表单中嵌入随机Token并在服务端校验二是校验Referer字段三是对 Cookie 设置 SameSite 属性限制跨站携带 Cookie。这三个修复方向如果只答出一个只能拿一半分。越权题则常常和CSRF放在一起考。横向越权两个用户的越权纵向越权是普通用户操作管理员接口。笔试里给你一个URLGET /user/info?userId1001问存在什么安全问题——如果登录用户能修改userId查看别人的信息就是水平越权如果改成userId1能直接看到管理员信息就是垂直越权。这里有个我在笔试时踩过的坑写修复方案只写“后端加权限校验”过于笼统。正确的回答应该至少包含对当前用户的身份进行统一鉴权不信任前端传入的任何标识对每个API接口做细粒度的权限校验RBAC/ABAC对敏感操作记录操作日志便于溯源。这种回答才体现出你真正理解这个漏洞在企业场景中如何被防范。4. 文件上传、命令注入与逻辑漏洞漏洞组合拳才是重灾区4.1 文件上传绕过思路的底层逻辑是“校验与解析不一致”文件上传漏洞在笔试的出现率也很高它的考查方式通常给一个文件上传功能点问你存在哪些绕过方式并给出修复建议。这类题有很强的“知识点堆积”属性有经验的人能写出一大串没经验的可能就写个“限制文件类型”。完整的绕过思路应该围绕一个核心矛盾展开——前端/服务端的校验规则与文件实际解析规则之间的不一致前端只校验扩展名直接抓包改扩展名即可。服务端检查Content-Type抓包修改Content-Type: image/jpeg。服务端黑名单校验尝试php3、phtml、pHp、php.、php%00.jpg老版本、.htaccess上传解析配置等。图片马图片中嵌入WebShell代码配合文件包含漏洞利用。我记得那道题还附带了一个代码段使用了黑名单方式过滤了.php后缀。我能想到的绕过至少包括大小写变体、双写绕过pphphp、加空格和加点的Windows特性以及.htaccess解析覆盖。而当时考场上我漏掉了服务端对文件内容的二次渲染校验这种场景——如果代码用getimagesize()检查文件头那么可以用“在合法图片文件末尾追加恶意代码”的方式绕过。这一点算是那道题的一个隐藏坑真正拿到分的人不多。修复方案的完整回答应该是使用白名单校验扩展名使用随机文件名防止攻击者控制路径将文件存储目录与解析目录分离并关闭脚本执行权限校验文件内容不只文件头对上传文件做好Content-Type和MIME的多重校验。4.2 命令注入看似是Web漏洞其实考的是系统知识命令注入的考点分布在“Web漏洞”和“系统命令执行”的交界处。题目给一段代码把用户输入拼入system()函数执行问你存在什么风险并写出利用方式。这类题要拿满分你需要同时写出几个层次第一层基本的命令拼接。利用;、、||、|、反引号等符号拼接额外命令。第二层绕过过滤手法。空格被过滤用${IFS}代替关键字被过滤用变量拼接绕过例如把cat拆成cat。第三层读取敏感文件并外带数据。把cat /etc/passwd的结果通过DNS或HTTP请求外传出来。这里有个关键心得笔试中涉及命令注入的简答题一定要把“攻击路径”和“防御措施”分开层次写。攻击路径体现你懂利用防御措施体现你有防守意识。防御措施应该包含使用参数化调用而不是拼接如PHP的escapeshellarg、白名单限制可执行命令、以最小权限运行Web服务、出站流量做限制。4.3 SSRF2018年后越来越重要的考点SSRF服务端请求伪造在那年笔试中的出现让我有点意外因为当时这个概念在CTF圈还不算特别普及。但现在回头看京东笔试考SSRF是很前卫的——之后的几年SSRF成了Web安全笔试的常客。SSRF的核心是服务端接收了用户可控的URL参数并代为请求该URL。它最直接的危害就是能绕过网络边界访问内网资源。笔试常考的判断场景是一个图片抓取功能中传入URL参数。要写出SSRF题的高分答案至少要覆盖探测内网存活主机和端口利用返回差异、读取本地文件file://协议、借助中间件漏洞攻击内网如Redis未授权访问等、云元数据服务泄露http://169.254.169.254/latest/meta-data/包含云平台凭证信息。修复方案的核心是限制请求的协议和IP禁止回环地址和私网地址、构建URL白名单、对DNS解析结果二次校验、禁用高危协议如file://、gopher://等。5. 密码学与网络基础笔试里的“送分题”是怎样变成丢分题的5.1 对称加密、非对称加密、哈希不只是“知道”而是“会用”密码学在安全岗位笔试题里占的比重不大却是区分度很高的部分。很多人复习时只背了“AES是对称加密RSA是非对称加密MD5是哈希”但在选择题里换个问法就盘不清了。我当时印象很深的一道题问HTTPS握手中客户端和服务器之间先用RSA协商出一个对称密钥后续通信使用AES加密问为什么不用RSA直接加密所有通信数据。这道题的考点有两个层面。第一层RSA加解密比AES慢得多。RSA依赖大整数模幂运算性能开销远高于AES这样基于代换-置换网络的分组密码。第二层RSA对明文长度有限制。1024位RSA最多只能加密117字节的明文超出部分需要分段处理实际工程中根本不可能用它直接加密整条HTTP响应。要答好密码学题你脑子里必须有一张清晰的选型表算法类型代表算法应用场景注意事项对称加密AES、DES、3DES数据加密传输、静态数据加密AES优于DESECB模式不安全推荐GCM模式非对称加密RSA、ECC、DSA密钥交换、数字签名密钥长度建议2048位以上ECC更高效哈希算法MD5、SHA-1、SHA-256数据完整性校验、密码存储MD5/SHA-1已不安全密码存储应加盐并使用慢哈希消息认证码HMAC防篡改与身份认证需要共享密钥HMAC-SHA256是常用方案密码存储这部分是个高频考点。题目经常问“网站数据库泄露后用户密码以MD5形式被攻击者获得攻击者能否还原密码如何预防”答案是MD5速度太快很容易被彩虹表攻击和暴力破解。正确做法是使用加盐的慢哈希算法如bcrypt、scrypt、PBKDF2其中bcrypt是目前最广泛使用的方案。答题时如果只写“加盐”就漏了“慢哈希”这个核心点因为在算力允许的范围内加盐只是增加了预计算的成本而慢哈希是增加每次尝试的计算成本两者是互补关系。5.2 编码与古典密码混淆“编码”和“加密”是大忌笔试题里经常会出现Base64、URL编码、十六进制、凯撒密码这类内容。很多人看到是一道选择题就轻松跳过但实际上这里有个明显的送命题把编码当成加密。Base64、十六进制、URL编码、Unicode编码都不是加密它们只是数据表示形式的转换没有密钥、没有算法安全性任何人拿到编码结果都能直接还原。在笔试简答题里如果你用Base64去“加密”密码直接被判定为安全意识薄弱。凯撒密码这类古典密码在笔试里偶尔会出现但考的不是“加密强度”而是让你指出这类密码为什么在现代不安全——密钥空间太小只能算作编码变换不具备现代密码学要求的混淆和扩散特性。5.3 网络协议攻击TCP/IP 层面的“为什么”比“是什么”更重要网络基础的考点集中在TCP/IP协议栈和常见网络攻击模式上。笔试通常不会让你背OSI七层模型而是给出具体的攻击场景分析。一道经典题目是什么是SYN Flood攻击如何防御要答好不只是说“发送大量SYN包”而要解释清楚为什么能造成危害——TCP三次握手中服务器收到SYN后会分配连接资源并进入SYN_RECV状态当攻击者发送海量SYN并不回复第三次握手的ACK时服务器的半连接队列被耗尽正常用户的连接请求无法被处理。防御方案要分层次增大半连接队列长度、启用SYN Cookie机制、配置防火墙限速。高频网络类考点还有DNS劫持修改DNS解析记录把域名指向恶意IP、ARP欺骗局域网内的中间人攻击通过伪造ARP响应劫持流量、HTTP与HTTPS的区别明文与加密、端口、证书体系。这些考点光记名词不够笔试时经常会在场景题中揉进“为什么HTTPS能防中间人攻击”——答案是它依赖CA证书体系的身份认证机制而不只是流量加密本身。6. 代码审计与工具使用拉开差距的两个分水岭6.1 代码审计题你要在“不给运行环境”的情况下找漏洞安全工程师笔试和高阶Web开发笔试的一个显著区别是它会给你一段代码让你像代码审计工具一样找出潜在漏洞。这类题目的价值在于它模拟了真实安全工作中“拿到源码做安全评估”的场景。2018年那套题里有一道PHP代码审计题代码是一个文件上传功能。现在回想起来它考察的方式很有典型性——不只是看有没有过滤后缀名而是看你对整个执行流程的理解第一步看输入来源文件内容来自$_FILES文件名来自客户端可控的$_POST[name]。第二步看处理逻辑代码对新文件名进行了拼接但没有校验后缀名。第三步看存储位置文件被保存到Web根目录下的uploads目录并且文件名是攻击者可控的。第四步看结果输出页面回显了上传是否成功但没有对文件执行权限做限制。四步下来漏洞链条非常清晰攻击者可以通过上传一个PHP文件并用可控的文件名绕过手段直接在服务器上执行任意代码。要提升代码审计能力笔试前你需要刻意练习。第一步是按语言积累“危险函数清单”PHP的eval()、system()、exec()、include()、unserialize()Java的Runtime.getRuntime().exec()、ObjectInputStream.readObject()JavaScript的eval()、Function()。这些函数出现的位置就是漏洞的高发区。第二步是建立“数据流”思维追踪用户输入$_GET、$_POST、$_FILES如何流向危险函数途中经过了哪些过滤和变换过滤是否可以被绕过。这是审计的核心能力也是笔试答题时可以展示的思维框架。6.2 工具使用题不是“会不会用”是“用得对不对”笔试中偶尔会出现工具相关题目例如给定一个渗透场景选择合理的工具组合。这类题2018年考得不深但后来我也见过很多包含工具选择的笔试题。常用的安全工具需要建立一个“功能-场景”对照表工具核心功能典型使用场景Burp SuiteHTTP代理、抓包改包、漏洞扫描Web渗透测试必备Nmap端口扫描、服务识别信息收集阶段SqlMapSQL注入自动化检测与利用针对注入点快速验证Metasploit漏洞利用框架自动化渗透测试Wireshark网络流量抓包分析协议分析、流量审查Goby / Xray主动扫描资产测绘攻击面梳理笔试考工具相关题时最高频的坑是只写工具名不写具体用途。比如问“如何快速发现目标服务器的开放端口”如果只答“用Nmap”太单薄应该写完整链路“先用Nmap的-sT或-sS做TCP端口扫描再用-sV做服务版本识别最后配合-O做操作系统指纹识别根据结果进一步筛选可利用的服务。”这样才体现你真的在实战中用过它。6.3 编程能力笔试隐含的基础门槛安全工程师岗位看起来不需要像开发那样天天盯着代码写功能但笔试题中编程功底往往是隐性考察项。一方面安全岗位经常需要写POC脚本、自动化工具另一方面代码审计本身就需要扎实的阅读代码能力。笔试里的编程题通常不会太难比如实现一个简易的字符串处理函数、简单算法题。但如果你代码基础不牢在这一部分丢分会非常可惜因为前面那些“烧脑题”都拿下了结果挂在最简单的基础编程题上。我当时复习的做法是把Python的常用库requests、re、subprocess、socket过了一遍确保能快速写一个简单的HTTP请求脚本、正则匹配脚本。这个能力在笔试后的一二面里也用得上比如写一个验证是否存在目录穿越的POC脚本当场手写代码。7. 从笔试到面试一套可持续复用的备考节奏7.1 拆解真题建立自己的“考点地图”安全工程师笔试的准备最忌讳一上来就抱着厚厚的《Web安全深度剖析》从头看到尾。正确姿势是先做一两套真题把错题对应的知识点画成一张“考点地图”再按地图上的薄弱项去定向补。我的考点地图大概是这样的结构Web安全分支注入类SQL、命令、XSS、CSRF、SSRF、XXE、文件类上传、包含、下载、认证与授权类越权、弱口令、会话固定。密码学分支古典密码、对称加密、非对称加密、哈希、数字签名、密钥分发。网络分支TCP/IP协议漏洞、DNS安全、HTTP安全特性。系统分支Linux权限模型、日志分析、Windows域、容器安全。业务逻辑分支支付金额篡改、验证码绕过、流量盗刷、优惠券逻辑。这张地图画完之后每复习一个知识点就往里填充“出题人可能的问法”和“标准答案模板”。比如看到“文件上传”脑子里就要浮现三个问法和答案结构分析漏洞成因校验与解析不一致、列出绕过方式黑名单/白名单/内容校验、给出修复建议白名单随机文件名目录隔离内容校验。7.2 笔试“硬核技巧”先易后难、留白也要有价值经过多次笔试测试后我总结了一套行而有效的答题节奏第一轮扫题做标记。从头到尾快速扫一遍把有把握做对的题先答掉。这样可以确保基础分全部拿到同时建立起“我已经做完一大半了”的心理优势。第二轮攻克中等难度题。这类题通常需要花一两分钟推演比如密码学选择题、网络攻击场景题。注意不要在一道题上卡超过3分钟先写一个自己认为正确的答案并做标记有空再回来看。第三轮攻克简答题。这类题是拉开分差的关键。答题时不要只写一行结论要分点、分层、有逻辑地展示思路。比如问“如何防御文件上传漏洞”别只写“限制后缀名”一定要写清楚“白名单校验扩展名 随机命名 目录禁止脚本执行 校验文件内容”的纵深防御思路。最后留时间检查。如果出现犹豫不决的题目不要留空。几乎所有大厂笔试都是机器改卷为主留空一定是0分答了即使不完全正确也有机会拿步骤分。7.3 备考时间线三个月从零到笔试通关如果你是完全零基础开始准备安全工程师笔试三个月的时间是够用的但前提是节奏要对第一个月建立基础认知。系统性过一遍Web安全基础OWASP Top 10、HTTP协议、Linux常用命令。这个阶段不要贪多核心是建立完整的知识框架看到任何一个漏洞名字能说出它属于哪一类、攻击原理是什么、影响范围多大。第二个月专项突破。针对之前建立的“考点地图”一项一项攻克。每个知识点配合做题验证理解。工具方面把Burp Suite的基本代理、改包、重放功能练熟Nmap的常见扫描参数随手能用SqlMap的基本用法要懂。第三个月真题模拟与错题复盘。每周至少做一套完整真题或模拟题限定时间通常90-120分钟。做完之后花两倍时间复盘错题——不只是看正确答案而是回看“我当时为什么选错了”“哪个知识点没理解透”把错题涉及的考点在地图上标红再回头去补。我个人比较深的感受是安全工程师笔试不会考特别偏门的漏洞利用它考的都是基础但核心的能力——你能否用安全视角读懂一段代码、能否从一个攻击场景中提炼出本质原因、能否给出可落地的防御方案。这套思维在笔试之后的工作中每天都会用到。最后分享一个小技巧笔试前把常用的ASCII码表和URL编码规则复习一遍。看起来没什么分量但有时候一道选择题里就靠它们拿分。安全这条路没有捷径但路线对了学起来会比较顺手。
返回列表