0x05 长亭科技-安全服务工程师
来源:https://github.com/vvmdx/Sec-Interview-4-2023
说明:本文件按原面经问题整理答题要点,答案为面试复习口径。
一面
1. 自我介绍
参考完整回答(自我介绍):
可以按“背景、方向、项目、工具、优势、求职动机”来讲。示例:我主要学习网络安全方向,熟悉 Web 漏洞、渗透测试、Linux 安全、日志分析和代码审计;项目中做过资产收集、漏洞验证、权限控制或应急处置,常用 Burp、Nmap、sqlmap、Wireshark、Linux 等工具。最后强调自己能从漏洞原理、利用条件和修复方案三个层面分析问题。
2. web渗透测试有没有过实战
参考完整回答(网站渗透经验):
如果被问有没有对网站做过渗透测试,我会这样回答:做过授权范围内的 Web 渗透,通常从资产确认开始,先识别站点技术栈、登录入口、接口、目录、静态资源和历史漏洞,再测试认证、越权、注入、XSS、文件上传、SSRF、信息泄露、逻辑漏洞和组件漏洞。
举例可以说:在一个后台系统测试中,我先通过目录和接口枚举发现管理接口,再用低权限账号验证资源 ID 是否能访问他人数据,最终确认水平越权。修复建议是服务端统一鉴权,所有资源访问都校验 owner/tenant,而不是只依赖前端隐藏按钮。最后我会复测确认漏洞闭环。
3. 讲一下sql注入原理
参考完整回答(SQL注入绕过):
SQL 注入绕过通常是因为防护用了黑名单,比如只过滤空格、逗号、select、union 这类关键字。攻击者可以用大小写混淆、注释符、URL 编码、宽字节、换行、括号、函数等价替代、布尔盲注、时间盲注、二次注入等方式绕过。例如过滤空格时可能用 /**/、换行或括号替代;过滤逗号时,MySQL 某些场景可以用 join、from for 或子查询改写。
但我在面试中会强调:绕过技巧说明黑名单不可靠,修复不能继续堆规则。正确做法还是参数化查询、白名单映射、最小权限和统一 ORM/DAO 层封装。安全设备如 WAF 可以作为辅助,但不能代替代码层修复。
4. 有没有从代码层面了解过sql注入的成因(反问代码层面指的是不是sql语句,答是)
参考完整回答(反问):
反问可以围绕岗位职责、团队方向、技术栈、培养机制、实习生预期、日常工作比例和后续流程。不要只问薪资和作息,可以问“这个岗位更偏漏洞研究、工程建设还是应急响应?”来体现目标感。
5. 了不了解xss,有没有从代码层面了解xss的原理
参考完整回答(XSS):
XSS 是用户可控内容被浏览器当成脚本执行。反射型常见于搜索参数或错误提示,存储型常见于评论、昵称、工单内容,DOM 型常见于前端从 location、hash、postMessage 中取值后写入页面。影响包括窃取用户信息、发起越权操作、劫持页面、钓鱼和横向传播。
修复要按输出上下文处理:输出到 HTML 文本要 HTML 编码,输出到属性要属性编码,输出到 JS 字符串要 JS 编码,输出到 URL 要限制协议并 URL 编码。富文本不能自己写黑名单,应该用成熟清洗库。Cookie 设置 HttpOnly、Secure、SameSite,降低被盗风险;CSP 可以限制脚本来源,作为纵深防御。
6. 对owasp top10漏洞哪个比较了解
参考完整回答(OWASP Top10):
OWASP Top 10 是 Web 应用常见高风险的总结。面试时我不会只背条目,而是选熟悉的讲。例如访问控制失效对应越权,修复是服务端统一鉴权和资源归属校验;注入对应 SQL/命令/模板注入,修复是参数化、白名单和安全 API;安全配置错误包括调试模式、默认口令、目录列表和敏感服务暴露。
如果面试官让我展开,我会用“漏洞原理、常见场景、验证方法、修复方式、项目经验”五步讲,这样比单纯背 OWASP 名单更有说服力。
7. 讲一讲怎么防御sql注入
参考完整回答(SQL注入绕过):
SQL 注入绕过通常是因为防护用了黑名单,比如只过滤空格、逗号、select、union 这类关键字。攻击者可以用大小写混淆、注释符、URL 编码、宽字节、换行、括号、函数等价替代、布尔盲注、时间盲注、二次注入等方式绕过。例如过滤空格时可能用 /**/、换行或括号替代;过滤逗号时,MySQL 某些场景可以用 join、from for 或子查询改写。
但我在面试中会强调:绕过技巧说明黑名单不可靠,修复不能继续堆规则。正确做法还是参数化查询、白名单映射、最小权限和统一 ORM/DAO 层封装。安全设备如 WAF 可以作为辅助,但不能代替代码层修复。
8. sql注入怎么绕过过滤
参考完整回答(SQL注入绕过):
SQL 注入绕过通常是因为防护用了黑名单,比如只过滤空格、逗号、select、union 这类关键字。攻击者可以用大小写混淆、注释符、URL 编码、宽字节、换行、括号、函数等价替代、布尔盲注、时间盲注、二次注入等方式绕过。例如过滤空格时可能用 /**/、换行或括号替代;过滤逗号时,MySQL 某些场景可以用 join、from for 或子查询改写。
但我在面试中会强调:绕过技巧说明黑名单不可靠,修复不能继续堆规则。正确做法还是参数化查询、白名单映射、最小权限和统一 ORM/DAO 层封装。安全设备如 WAF 可以作为辅助,但不能代替代码层修复。
9. 问了护网时xx有没有成为靶标,有没有对攻击队行为做过研判
参考完整回答(流量分析/研判):
流量分析我会先看五元组、协议、时间分布、包大小、连接状态和请求内容,再和业务基线比较。扫描通常表现为同一源短时间访问大量端口或路径;爆破表现为登录失败暴增;Web 攻击会在参数里出现 union、sleep、../、<script>、jndi 等特征;C2 可能有固定间隔心跳、小包长连接或异常域名;数据外传则体现为内网主机向陌生外部地址持续上传。
工具上可以用 Wireshark 做人工分析,用 tcpdump 抓关键流量,用 Zeek/Suricata 结构化日志和告警。最终要结合主机日志和应用日志确认,不能只靠单包下结论。
10. 在xx护网时的工作内容,有没有做过流量包、数据包的研判
参考完整回答(流量分析/研判):
流量分析我会先看五元组、协议、时间分布、包大小、连接状态和请求内容,再和业务基线比较。扫描通常表现为同一源短时间访问大量端口或路径;爆破表现为登录失败暴增;Web 攻击会在参数里出现 union、sleep、../、<script>、jndi 等特征;C2 可能有固定间隔心跳、小包长连接或异常域名;数据外传则体现为内网主机向陌生外部地址持续上传。
工具上可以用 Wireshark 做人工分析,用 tcpdump 抓关键流量,用 Zeek/Suricata 结构化日志和告警。最终要结合主机日志和应用日志确认,不能只靠单包下结论。
11. 学校攻防演练时担任的角色,主要工作内容,渗透测试的思路,有什么成果(这个问的还是挺细的,具体到分配的任务、有没有拿下主机或者域控、攻防演练的形式和持续时间等都聊了)
参考完整回答(项目/实习经历):
项目经历我会用 STAR 讲完整,而不是只列技术名词。先说项目背景:这是一个什么系统、业务价值是什么、我负责哪块安全工作;再说任务:比如接口鉴权、代码审计、漏洞验证、应急处置或安全工具开发;然后讲行动:我如何定位入口、使用了哪些工具、验证了哪些风险、如何推动修复;最后讲结果:修复了什么漏洞、减少了什么暴露面、沉淀了什么规则或文档。
如果面试官深挖,我会准备一个具体案例。例如“我在某系统审计中发现订单详情接口只校验登录态,没有校验订单 owner,导致水平越权。我用两个普通账号互换订单 ID 复现,确认能读取他人数据。修复方案是在服务端统一鉴权中间件里加入用户、租户和资源归属校验,并补充异常访问日志。复测时原越权请求返回 403,正常用户访问不受影响。”
12. 平时ctf打的多不多,有什么成绩
参考完整回答(CTF复盘):
CTF 题复盘要讲清题型、关键突破点、踩坑和沉淀。比如 Web 题可以按信息泄露、源码审计、参数污染、反序列化、SSTI、SQL 注入等链路讲;Pwn 题讲保护机制、溢出点、泄露地址、ROP 或堆利用;Crypto 题讲算法弱点和数学条件。
关键是不要只说“做出来了”,而要说明自己如何定位问题、如何验证假设、失败过哪些思路、最后沉淀了什么工具或知识点。
13. 平时会不会关注一些新颖的漏洞,会不会做代码审计,比如shiro漏洞等有没有做过漏洞复现
参考完整回答(Java代码审计):
Java 审计我会从路由和鉴权开始,看 Controller、Filter、Interceptor、Spring Security/Shiro 配置和权限注解是否覆盖所有接口。数据访问层重点看 MyBatis 的 ${} 拼接、JPA 原生 SQL、排序字段拼接和多租户条件缺失。危险能力方面看反序列化、Fastjson/Jackson、SpEL/OGNL、模板引擎、文件上传下载、SSRF、XXE 和第三方依赖 CVE。
举例来说,审 SQL 注入时我会搜索 MyBatis XML 里的 ${},确认参数是否来自请求;如果是 order by,我会要求白名单字段映射。审越权时会看接口是否从 token 中取用户身份,并校验资源 owner,而不是直接使用请求里的 userId。
14. 目前学习的方向是什么
参考完整回答(职业方向):
职业方向我会结合岗位回答。如果投漏洞研究/代码审计,我会说自己更喜欢从漏洞原理、源码调用链和补丁差异里分析问题,希望后续能沉淀漏洞模式、检测规则和工具;如果投安全工程/安全研发,我会强调希望把安全能力产品化,比如扫描器、风控、检测平台和自动化运营;如果投攻防,我会强调攻击链思维和实战复盘。
完整回答可以是:短期我希望把 Web 安全、代码审计和应急基础打牢,能独立完成漏洞分析和修复推动;中期希望在某个方向形成专长,同时补齐工程化能力,把经验沉淀成工具和规则。
15. 反问环节
参考完整回答(反问):
反问可以围绕岗位职责、团队方向、技术栈、培养机制、实习生预期、日常工作比例和后续流程。不要只问薪资和作息,可以问“这个岗位更偏漏洞研究、工程建设还是应急响应?”来体现目标感。
二面
16. 自我介绍
参考完整回答(自我介绍):
可以按“背景、方向、项目、工具、优势、求职动机”来讲。示例:我主要学习网络安全方向,熟悉 Web 漏洞、渗透测试、Linux 安全、日志分析和代码审计;项目中做过资产收集、漏洞验证、权限控制或应急处置,常用 Burp、Nmap、sqlmap、Wireshark、Linux 等工具。最后强调自己能从漏洞原理、利用条件和修复方案三个层面分析问题。
17. 学代码审计偏哪个语言?擅长哪个语言
参考完整回答(Java代码审计):
Java 审计我会从路由和鉴权开始,看 Controller、Filter、Interceptor、Spring Security/Shiro 配置和权限注解是否覆盖所有接口。数据访问层重点看 MyBatis 的 ${} 拼接、JPA 原生 SQL、排序字段拼接和多租户条件缺失。危险能力方面看反序列化、Fastjson/Jackson、SpEL/OGNL、模板引擎、文件上传下载、SSRF、XXE 和第三方依赖 CVE。
举例来说,审 SQL 注入时我会搜索 MyBatis XML 里的 ${},确认参数是否来自请求;如果是 order by,我会要求白名单字段映射。审越权时会看接口是否从 token 中取用户身份,并校验资源 owner,而不是直接使用请求里的 userId。
18. 拿到一份php代码做审计,审计的流程大概是怎样的
参考完整回答(Java代码审计):
Java 审计我会从路由和鉴权开始,看 Controller、Filter、Interceptor、Spring Security/Shiro 配置和权限注解是否覆盖所有接口。数据访问层重点看 MyBatis 的 ${} 拼接、JPA 原生 SQL、排序字段拼接和多租户条件缺失。危险能力方面看反序列化、Fastjson/Jackson、SpEL/OGNL、模板引擎、文件上传下载、SSRF、XXE 和第三方依赖 CVE。
举例来说,审 SQL 注入时我会搜索 MyBatis XML 里的 ${},确认参数是否来自请求;如果是 order by,我会要求白名单字段映射。审越权时会看接口是否从 token 中取用户身份,并校验资源 owner,而不是直接使用请求里的 userId。
19. 对php开发框架熟吗?比如ThinkPHP这些
参考完整回答(ThinkPHP审计):
ThinkPHP 审计先确认版本,因为不同版本有不同历史漏洞;然后看路由、控制器方法暴露、参数绑定、模型查询、模板渲染、缓存和上传。框架项目的风险不只在危险函数,还在框架机制,比如路由是否能访问非预期方法、ORM 是否存在 where/order 拼接、模板是否能注入。
修复上升级框架,关闭调试,限制路由访问,使用 ORM 参数绑定和字段白名单,上传目录禁止执行,并清理默认示例和敏感配置。
20. 给的源码是ThinkPHP框架的话,审计起来和没有使用框架的有什么不同,从流程上或者从关注的点上有什么不同
参考完整回答(Java代码审计):
Java 审计我会从路由和鉴权开始,看 Controller、Filter、Interceptor、Spring Security/Shiro 配置和权限注解是否覆盖所有接口。数据访问层重点看 MyBatis 的 ${} 拼接、JPA 原生 SQL、排序字段拼接和多租户条件缺失。危险能力方面看反序列化、Fastjson/Jackson、SpEL/OGNL、模板引擎、文件上传下载、SSRF、XXE 和第三方依赖 CVE。
举例来说,审 SQL 注入时我会搜索 MyBatis XML 里的 ${},确认参数是否来自请求;如果是 order by,我会要求白名单字段映射。审越权时会看接口是否从 token 中取用户身份,并校验资源 owner,而不是直接使用请求里的 userId。
21. php原生的敏感函数有哪些,比如搜关键字的话会搜哪些
参考完整回答(PHP敏感函数):
PHP 审计常看的敏感函数包括 eval、assert、system、exec、shell_exec、passthru、popen、proc_open、unserialize、include/require、file_get_contents、file_put_contents、move_uploaded_file、preg_replace /e、call_user_func、create_function 等。
但不能只搜函数名,要判断参数是否用户可控、是否经过有效校验、函数结果是否可达。比如 file_get_contents 读取固定配置文件不一定有问题,但读取用户传入路径就可能任意文件读取或 SSRF。
22. 反序列化漏洞了解吗
参考完整回答(反序列化漏洞了解吗):
这题我会这样完整回答:针对“反序列化漏洞了解吗”,我会先说明它对应的安全场景和要解决的问题,再给出一个具体例子。比如在真实测试或审计中,我会先确认入口在哪里、用户输入是否可控、数据经过哪些处理、最终进入哪个敏感操作;验证时尽量使用低风险方式证明影响,例如观察响应差异、日志、时间延迟、回连记录或权限边界,而不是破坏数据。修复时从代码、配置和权限三方面处理:代码层使用安全 API、参数化、白名单和输出编码;配置层关闭危险功能、升级组件、限制网络和文件权限;权限层坚持最小权限,避免单点漏洞扩大影响。最后我会补充复测方法,用原触发条件验证漏洞不可再利用,并确认正常业务流程仍然可用。
23. 反序列的时候,unserialize()反序列一个字符串的时候,对象会有一些魔术方法会被自动调用到,在找反序列化的链时,有哪些魔术方法是可以作为一个入手点去找的
参考完整回答(PHP魔术方法/反序列化):
PHP 反序列化找链时常从 __wakeup、__destruct、__toString、__call、__get、__set、__invoke 等魔术方法入手。因为这些方法会在反序列化、对象销毁、字符串转换、方法调用或属性访问时自动触发。
审计时我会看对象属性是否可控,魔术方法里是否有文件操作、命令执行、SQL、模板渲染或调用其他对象方法,能不能串成 POP 链。修复是不要反序列化不可信数据,使用 JSON,做签名校验和类白名单。
24. 有没有审计过实际的项目,比如github上一些开源cms
参考完整回答(项目/实习经历):
项目经历我会用 STAR 讲完整,而不是只列技术名词。先说项目背景:这是一个什么系统、业务价值是什么、我负责哪块安全工作;再说任务:比如接口鉴权、代码审计、漏洞验证、应急处置或安全工具开发;然后讲行动:我如何定位入口、使用了哪些工具、验证了哪些风险、如何推动修复;最后讲结果:修复了什么漏洞、减少了什么暴露面、沉淀了什么规则或文档。
如果面试官深挖,我会准备一个具体案例。例如“我在某系统审计中发现订单详情接口只校验登录态,没有校验订单 owner,导致水平越权。我用两个普通账号互换订单 ID 复现,确认能读取他人数据。修复方案是在服务端统一鉴权中间件里加入用户、租户和资源归属校验,并补充异常访问日志。复测时原越权请求返回 403,正常用户访问不受影响。”
25. java审计可以聊一下吗
参考完整回答(Java代码审计):
Java 审计我会从路由和鉴权开始,看 Controller、Filter、Interceptor、Spring Security/Shiro 配置和权限注解是否覆盖所有接口。数据访问层重点看 MyBatis 的 ${} 拼接、JPA 原生 SQL、排序字段拼接和多租户条件缺失。危险能力方面看反序列化、Fastjson/Jackson、SpEL/OGNL、模板引擎、文件上传下载、SSRF、XXE 和第三方依赖 CVE。
举例来说,审 SQL 注入时我会搜索 MyBatis XML 里的 ${},确认参数是否来自请求;如果是 order by,我会要求白名单字段映射。审越权时会看接口是否从 token 中取用户身份,并校验资源 owner,而不是直接使用请求里的 userId。
26. 之前做渗透时有没有做过完整的项目,除了ctf
参考完整回答(CTF复盘):
CTF 题复盘要讲清题型、关键突破点、踩坑和沉淀。比如 Web 题可以按信息泄露、源码审计、参数污染、反序列化、SSTI、SQL 注入等链路讲;Pwn 题讲保护机制、溢出点、泄露地址、ROP 或堆利用;Crypto 题讲算法弱点和数学条件。
关键是不要只说“做出来了”,而要说明自己如何定位问题、如何验证假设、失败过哪些思路、最后沉淀了什么工具或知识点。
27. 能不能说一些找到的漏洞,怎么找到的
参考完整回答(能不能说一些找到的漏洞怎么找到的):
这题我会这样完整回答:针对“能不能说一些找到的漏洞,怎么找到的”,我会先说明它对应的安全场景和要解决的问题,再给出一个具体例子。比如在真实测试或审计中,我会先确认入口在哪里、用户输入是否可控、数据经过哪些处理、最终进入哪个敏感操作;验证时尽量使用低风险方式证明影响,例如观察响应差异、日志、时间延迟、回连记录或权限边界,而不是破坏数据。修复时从代码、配置和权限三方面处理:代码层使用安全 API、参数化、白名单和输出编码;配置层关闭危险功能、升级组件、限制网络和文件权限;权限层坚持最小权限,避免单点漏洞扩大影响。最后我会补充复测方法,用原触发条件验证漏洞不可再利用,并确认正常业务流程仍然可用。
28. ssrf这类的漏洞熟悉吗,说一下原理和利用方式
参考完整回答(SSRF):
SSRF 是服务端请求伪造,攻击者控制 URL 参数,让服务器代替攻击者去访问目标。因为请求从服务端发出,所以可以访问攻击者本来访问不到的内网服务,比如 127.0.0.1、Redis、Consul、Kubernetes API、云厂商元数据地址 169.254.169.254 等。常见入口是图片抓取、URL 预览、文件下载、Webhook、PDF 生成和远程资源导入。
修复时我会做“解析后校验”而不是简单字符串判断。首先限制协议,只允许 http/https;其次使用白名单域名或固定资源代理;再次 DNS 解析后校验 IP,禁止私有地址、回环地址、链路本地地址、IPv6 本地地址和保留地址;还要处理重定向,每次跳转后重新校验;最后限制端口、超时时间、响应大小,并通过网络层让业务容器无法直连内网敏感服务和云元数据。
29. 我们利用ssrf可以做什么,达到什么效果
参考完整回答(项目/实习经历):
项目经历我会用 STAR 讲完整,而不是只列技术名词。先说项目背景:这是一个什么系统、业务价值是什么、我负责哪块安全工作;再说任务:比如接口鉴权、代码审计、漏洞验证、应急处置或安全工具开发;然后讲行动:我如何定位入口、使用了哪些工具、验证了哪些风险、如何推动修复;最后讲结果:修复了什么漏洞、减少了什么暴露面、沉淀了什么规则或文档。
如果面试官深挖,我会准备一个具体案例。例如“我在某系统审计中发现订单详情接口只校验登录态,没有校验订单 owner,导致水平越权。我用两个普通账号互换订单 ID 复现,确认能读取他人数据。修复方案是在服务端统一鉴权中间件里加入用户、租户和资源归属校验,并补充异常访问日志。复测时原越权请求返回 403,正常用户访问不受影响。”
30. 在php环境下,怎么最大程度的利用ssrf,拿到shell或者进内网
参考完整回答(SSRF):
SSRF 是服务端请求伪造,攻击者控制 URL 参数,让服务器代替攻击者去访问目标。因为请求从服务端发出,所以可以访问攻击者本来访问不到的内网服务,比如 127.0.0.1、Redis、Consul、Kubernetes API、云厂商元数据地址 169.254.169.254 等。常见入口是图片抓取、URL 预览、文件下载、Webhook、PDF 生成和远程资源导入。
修复时我会做“解析后校验”而不是简单字符串判断。首先限制协议,只允许 http/https;其次使用白名单域名或固定资源代理;再次 DNS 解析后校验 IP,禁止私有地址、回环地址、链路本地地址、IPv6 本地地址和保留地址;还要处理重定向,每次跳转后重新校验;最后限制端口、超时时间、响应大小,并通过网络层让业务容器无法直连内网敏感服务和云元数据。
31. 怎么利用内网的机器请求内网中的服务
参考完整回答(内网渗透/横向):
内网渗透我会先确认当前落点的权限、网段、路由、DNS、域环境和出网情况。然后做低噪声主机发现和端口识别,重点关注域控、文件共享、数据库、中间件、运维平台和代码仓库。接着收集凭证线索,例如配置文件、历史命令、浏览器缓存、数据库连接串、共享目录和内存凭证;如果授权允许,再验证横向移动和权限提升路径。
防守视角我会补充:内网安全不能只靠边界防火墙,要做分区分域、最小权限、凭证隔离、禁用明文密码和本地管理员复用、开启 EDR、监控东西向流量、审计异常登录和远程执行行为。
32. ssrf漏洞的修复建议,修复的时候需要注意哪些细节
参考完整回答(SSRF):
SSRF 是服务端请求伪造,攻击者控制 URL 参数,让服务器代替攻击者去访问目标。因为请求从服务端发出,所以可以访问攻击者本来访问不到的内网服务,比如 127.0.0.1、Redis、Consul、Kubernetes API、云厂商元数据地址 169.254.169.254 等。常见入口是图片抓取、URL 预览、文件下载、Webhook、PDF 生成和远程资源导入。
修复时我会做“解析后校验”而不是简单字符串判断。首先限制协议,只允许 http/https;其次使用白名单域名或固定资源代理;再次 DNS 解析后校验 IP,禁止私有地址、回环地址、链路本地地址、IPv6 本地地址和保留地址;还要处理重定向,每次跳转后重新校验;最后限制端口、超时时间、响应大小,并通过网络层让业务容器无法直连内网敏感服务和云元数据。
33. 如果用白名单策略修复ssrf,从用户输入的变量里拿出要访问的目标,这个要注意哪些,因为一些url会通过特殊的字符做白名单绕过,对取变量这个操作有哪些要注意的细节?
参考完整回答(SQL注入绕过):
SQL 注入绕过通常是因为防护用了黑名单,比如只过滤空格、逗号、select、union 这类关键字。攻击者可以用大小写混淆、注释符、URL 编码、宽字节、换行、括号、函数等价替代、布尔盲注、时间盲注、二次注入等方式绕过。例如过滤空格时可能用 /**/、换行或括号替代;过滤逗号时,MySQL 某些场景可以用 join、from for 或子查询改写。
但我在面试中会强调:绕过技巧说明黑名单不可靠,修复不能继续堆规则。正确做法还是参数化查询、白名单映射、最小权限和统一 ORM/DAO 层封装。安全设备如 WAF 可以作为辅助,但不能代替代码层修复。
34. php中三个等号和两个等号有什么区别
参考完整回答(PHP代码审计):
PHP 审计我会先看入口文件、路由规则、控制器、公共函数和配置项,然后追踪 $_GET、$_POST、$_COOKIE、$_REQUEST、上传文件和 Header 到危险函数。重点函数包括 eval/assert、system/exec、include/require、unserialize、file_get_contents/file_put_contents、move_uploaded_file、SQL 执行函数和模板输出。
框架项目还要理解框架本身的过滤、ORM、路由和模板机制,不能只搜函数。比如 ThinkPHP 要看版本历史漏洞、控制器方法暴露、参数绑定、模型查询和模板渲染;原生 PHP 则要特别关注变量覆盖、文件包含、上传目录执行权限和弱类型比较。
35. php代码常见入口函数怎么找
参考完整回答(PHP代码审计):
PHP 审计我会先看入口文件、路由规则、控制器、公共函数和配置项,然后追踪 $_GET、$_POST、$_COOKIE、$_REQUEST、上传文件和 Header 到危险函数。重点函数包括 eval/assert、system/exec、include/require、unserialize、file_get_contents/file_put_contents、move_uploaded_file、SQL 执行函数和模板输出。
框架项目还要理解框架本身的过滤、ORM、路由和模板机制,不能只搜函数。比如 ThinkPHP 要看版本历史漏洞、控制器方法暴露、参数绑定、模型查询和模板渲染;原生 PHP 则要特别关注变量覆盖、文件包含、上传目录执行权限和弱类型比较。
36. 有一些php的开发框架可以帮我们做一些url路由,对这些路由的方法熟悉吗
参考完整回答(PHP代码审计):
PHP 审计我会先看入口文件、路由规则、控制器、公共函数和配置项,然后追踪 $_GET、$_POST、$_COOKIE、$_REQUEST、上传文件和 Header 到危险函数。重点函数包括 eval/assert、system/exec、include/require、unserialize、file_get_contents/file_put_contents、move_uploaded_file、SQL 执行函数和模板输出。
框架项目还要理解框架本身的过滤、ORM、路由和模板机制,不能只搜函数。比如 ThinkPHP 要看版本历史漏洞、控制器方法暴露、参数绑定、模型查询和模板渲染;原生 PHP 则要特别关注变量覆盖、文件包含、上传目录执行权限和弱类型比较。
37. 介绍下PHP的变量覆盖
参考完整回答(PHP变量覆盖):
PHP 变量覆盖是用户输入覆盖程序内部变量,常见于 extract($_REQUEST)、parse_str、可变变量 $$、老版本 register_globals 等场景。攻击者如果能覆盖 is_admin、uid、config、file 等变量,就可能绕过权限或控制文件路径。
修复是不要把用户输入展开到当前符号表,使用明确数组访问;关键变量不要来自请求参数;对参数名和值都做白名单;关闭历史危险配置。审计时看到 extract、parse_str、$$ 要重点追踪变量是否影响鉴权和文件操作。
38. 有一个php的程序,本身就允许文件包含的操作,同时想要避免文件包含漏洞,写代码的时候要注意哪些
参考完整回答(文件包含):
文件包含漏洞是 include/require 等函数包含了用户可控路径。远程文件包含依赖 allow_url_include 等配置,可能直接包含远程脚本;本地文件包含可以读取敏感文件,也可能通过包含日志、上传文件、session 文件或伪协议变成代码执行。
修复上不要把用户输入直接作为文件路径,使用固定模板 ID 或白名单映射;关闭 allow_url_include,限制 open_basedir;规范化路径后确认仍在允许目录;上传目录和日志目录不要被包含;错误信息不要回显真实路径。
39. 远程文件包含和本地文件包含,这两种涉及的php设置有什么
参考完整回答(文件包含):
文件包含漏洞是 include/require 等函数包含了用户可控路径。远程文件包含依赖 allow_url_include 等配置,可能直接包含远程脚本;本地文件包含可以读取敏感文件,也可能通过包含日志、上传文件、session 文件或伪协议变成代码执行。
修复上不要把用户输入直接作为文件路径,使用固定模板 ID 或白名单映射;关闭 allow_url_include,限制 open_basedir;规范化路径后确认仍在允许目录;上传目录和日志目录不要被包含;错误信息不要回显真实路径。
40. 本地文件包含能不能通过php配置限制文件包含的路径(不通过代码直接通过配置项来解决)
参考完整回答(文件包含):
文件包含漏洞是 include/require 等函数包含了用户可控路径。远程文件包含依赖 allow_url_include 等配置,可能直接包含远程脚本;本地文件包含可以读取敏感文件,也可能通过包含日志、上传文件、session 文件或伪协议变成代码执行。
修复上不要把用户输入直接作为文件路径,使用固定模板 ID 或白名单映射;关闭 allow_url_include,限制 open_basedir;规范化路径后确认仍在允许目录;上传目录和日志目录不要被包含;错误信息不要回显真实路径。
41. php、java代码审计对哪个漏洞特别熟悉
参考完整回答(Java代码审计):
Java 审计我会从路由和鉴权开始,看 Controller、Filter、Interceptor、Spring Security/Shiro 配置和权限注解是否覆盖所有接口。数据访问层重点看 MyBatis 的 ${} 拼接、JPA 原生 SQL、排序字段拼接和多租户条件缺失。危险能力方面看反序列化、Fastjson/Jackson、SpEL/OGNL、模板引擎、文件上传下载、SSRF、XXE 和第三方依赖 CVE。
举例来说,审 SQL 注入时我会搜索 MyBatis XML 里的 ${},确认参数是否来自请求;如果是 order by,我会要求白名单字段映射。审越权时会看接口是否从 token 中取用户身份,并校验资源 owner,而不是直接使用请求里的 userId。
42. php在做sql注入防御时有哪些方法
参考完整回答(SQL注入绕过):
SQL 注入绕过通常是因为防护用了黑名单,比如只过滤空格、逗号、select、union 这类关键字。攻击者可以用大小写混淆、注释符、URL 编码、宽字节、换行、括号、函数等价替代、布尔盲注、时间盲注、二次注入等方式绕过。例如过滤空格时可能用 /**/、换行或括号替代;过滤逗号时,MySQL 某些场景可以用 join、from for 或子查询改写。
但我在面试中会强调:绕过技巧说明黑名单不可靠,修复不能继续堆规则。正确做法还是参数化查询、白名单映射、最小权限和统一 ORM/DAO 层封装。安全设备如 WAF 可以作为辅助,但不能代替代码层修复。
43. java做sql注入的防御
参考完整回答(SQL注入绕过):
SQL 注入绕过通常是因为防护用了黑名单,比如只过滤空格、逗号、select、union 这类关键字。攻击者可以用大小写混淆、注释符、URL 编码、宽字节、换行、括号、函数等价替代、布尔盲注、时间盲注、二次注入等方式绕过。例如过滤空格时可能用 /**/、换行或括号替代;过滤逗号时,MySQL 某些场景可以用 join、from for 或子查询改写。
但我在面试中会强调:绕过技巧说明黑名单不可靠,修复不能继续堆规则。正确做法还是参数化查询、白名单映射、最小权限和统一 ORM/DAO 层封装。安全设备如 WAF 可以作为辅助,但不能代替代码层修复。
44. sql的二次注入了解吗,能介绍一下吗
参考完整回答(二次注入):
二次注入是恶意数据第一次进入系统时没有触发漏洞,而是被存入数据库;后续业务再次取出这段数据并拼接到 SQL 时才触发。比如注册昵称时存入特殊字符,后台统计或查询时把昵称拼进 SQL,导致注入。
防护原则是任何进入 SQL 的数据都不可信,即使它来自数据库。所有 SQL 执行点都要参数化;对存储字段做业务语义校验;后台管理、导出、统计这类二次使用点也要审计,不能只防用户前台入口。
45. 写代码的时候怎么防止二次注入
参考完整回答(二次注入):
二次注入是恶意数据第一次进入系统时没有触发漏洞,而是被存入数据库;后续业务再次取出这段数据并拼接到 SQL 时才触发。比如注册昵称时存入特殊字符,后台统计或查询时把昵称拼进 SQL,导致注入。
防护原则是任何进入 SQL 的数据都不可信,即使它来自数据库。所有 SQL 执行点都要参数化;对存储字段做业务语义校验;后台管理、导出、统计这类二次使用点也要审计,不能只防用户前台入口。
返回安全面经目录