安全面试题
安全面试题
八、安全
入门(补齐 20 题)
★ 认证和授权有什么区别? 认证确定你是谁,授权决定你能对哪个资源做什么。登录成功不能证明有权读取任意项目,服务端每个入口都要检查。
最小权限是什么? 账号、工具和进程只获得完成职责所需能力,默认拒绝未明确授权的操作。管理员旁路需显式且可审计,不能靠隐藏按钮实现。
★ 哈希、签名、加密区别? 哈希是摘要,签名/消息认证验证完整性和来源,加密保护机密。签名 cookie 内容仍可能可读,别把 base64 说成加密。
盐和密钥是什么? 盐一般不需保密,用来让同密码哈希不同;密钥必须受控保护。密码存储用合适慢哈希及参数,不用自创算法。
★ HTTPS 解决哪些问题? 保护传输的机密、完整性和对端认证;不防已授权用户滥用、服务端漏洞或错误权限。证书链与主机名校验不能随便关闭。
HttpOnly cookie 防什么? 阻止普通脚本直接读取 cookie,但恶意脚本仍可代表用户发同源请求。需与输出转义、CSP 和权限检查配合。
Secure cookie 有什么作用? 要求按浏览器规则通过安全连接传送,减少明文泄露;它不等于 cookie 已加密,也不能替代服务端会话撤销。
★ SameSite 有什么作用? 控制跨站请求携带 cookie 的条件,帮助降低 CSRF;站点与来源不同概念,不能把它当全部跨域和 CSRF 问题的唯一解。
CORS 是权限系统吗? 不是,主要约束浏览器跨源读取响应;脚本外客户端不受同样限制,服务端仍需认证和资源授权。
★ 输入校验和输出转义区别? 前者限制数据符合业务格式,后者按 HTML/URL/JS 等使用上下文安全输出。合法字符串也可能含应被转义的字符。
为什么错误信息要控制? 内部栈、SQL、路径和密钥可能帮助信息收集;客户端给稳定错误与关联 ID,详情只进受控日志。
★ 为什么日志也可能泄密? 请求头、cookie、prompt、附件与 SQL 参数可能含私密信息;字段白名单、脱敏、访问权限与保留期限一起设计。
会话过期有哪些方式? 空闲超时、绝对期限、主动撤销与凭证轮换。只让浏览器删 cookie 不会使已泄露令牌自动失效。
★ ID 难猜能替代授权吗? 不能,UUID 也可能从分享链接、日志或其他接口泄露。按操作者与目标资源关系检查权限,不能只验证 ID 格式。
上传文件先检查什么? 大小、类型、数量、用途和目标路径;扩展名与 MIME 都可伪造,解析器也需隔离和资源限制。
下载链接怎样保护? 读取时重新授权或签发短期限定资源的凭证,避免永久公开地址暴露内部文件;签名 URL 仍可能在有效期内被转发。
★ API key 放哪里? 留服务端或受控密钥存储,不进浏览器包、源码和日志。限制用途与额度,支持轮换和撤销。
依赖更新为什么与安全有关? 漏洞可能来自传递依赖;锁版本保证可追溯,定期评估补丁并回归。扫描结果不等于已可利用,也不能一概忽略。
★ 安全测试要覆盖什么? 未登录、本人、同组织、他人、被移除成员与管理员等身份,覆盖读写和缓存。只测正常登录成功远远不够。
权限检查出错应该怎么办? 通常拒绝敏感操作并记录原因,不能异常时默认放行;业务恢复/通知投递的失败与明确拒绝要区分,避免误丢任务。
中等
SQL 注入? 拼接字符串构造 SQL 被恶意输入改写语义。防:参数化查询;ORM;动态标识符走白名单。
XSS? 把用户输入当 HTML / JS 渲染。防:输出转义(React 默认转义);不用
dangerouslySetInnerHTML/v-html渲染不可信内容;CSP;cookie 设HttpOnly。CSRF? 利用用户已登录的 cookie,从别的网站发起请求。防:
SameSitecookie;CSRF token;校验 Origin / Referer;敏感操作用自定义请求头(跨站表单发不了)。密码怎么存? 慢哈希 + 盐:bcrypt / scrypt / argon2。绝不能明文或 MD5 / SHA1。
JWT 的优缺点? 无状态、跨服务验证方便;但签发后无法主动作废(要黑名单或短有效期 + 刷新令牌),payload 只是 base64 不是加密,不要放敏感信息。
OAuth2 和 SSO? OAuth2 是授权框架(授权码模式最常用),OIDC 在它上面加了身份认证(ID Token)。SSO 是「一次登录多处使用」的效果,可以用 CAS、SAML、OIDC 实现。我们 OEM 合作方走 SSO 免登。
★ RBAC 和 ABAC 区别? RBAC 按角色授予能力,ABAC 按身份/资源/环境属性判断;共享项目还需关系判断。选能表达业务规则的模型并集中实现。
横向和纵向越权是什么? 横向是访问别人的同级资源,纵向是获得更高角色能力。资源列表、详情、附件与搜索都要测,不能只守写接口。
★ Refresh Token 怎么轮换? 刷新时签发新令牌并使旧令牌按策略失效,检测旧令牌重用,限制有效期和客户端存储。具体并发刷新需定义可接受窗口。
双重提交 CSRF token 有何要求? 不能只比较两个可被攻击者控制的值;采用成熟签名/会话绑定方案,并配合 Origin 等检查。token 不放 URL 或日志。
★ 动态排序怎么防注入? 值走参数绑定,列名/方向等结构走服务端白名单映射;不能以 ORM 支持 text 就拼用户原文。
命令参数怎样安全传? 优先直接执行已知程序加参数数组,限制选项与路径;不要把用户原文拼进 shell。禁 shell 仍需防目标程序危险参数。
★ 文件路径检查注意什么? 检查规范化后和实际解析的根目录归属,考虑 ..、绝对路径、编码、符号链接与竞争;字符串 startswith 不是完整路径授权。
验签为什么使用原始请求体? 解析再编码可改变字节内容,导致签名不一致。先保留原文校验来源和时间,再解析业务字段;同时防重放。
★ CSP 能替代 XSS 修复吗? 不能,它减少部分执行途径,但配置错误、允许源或现有脚本能力仍可能被利用。优先按上下文安全输出和清理不可信 HTML。
密钥轮换怎样兼容在途请求? 用 key ID 区分版本,短期同时验证新旧密钥,签发切到新键后逐步撤旧;时间窗口和失败日志可观测。
登录限流按什么维度? 账号、来源与风险联合,避免只按 IP 伤害共享出口用户,也避免只按账号让攻击者封禁别人;返回信息不泄露账号存在性。
★ 防重放要哪些信息? 校验时间窗口、随机 nonce/请求 ID,并原子记录已用标识;签名只保证未被篡改,不保证请求未执行过。
对象序列化如何避免过度暴露? 返回字段白名单,尤其不直接输出 ORM dict、JSON extra 或连接配置。新字段默认不公开,接口按用途选择。
★ 分享链接为什么要单独授权? 分享是受限凭证,需绑定资源、期限与能力,可撤销;不能把一个项目分享权扩大成整个工作区访问权。
高难
SSRF? 服务端按用户给的 URL 去请求(比如 Agent 的网页抓取工具),被利用去访问内网服务、云厂商元数据接口(
169.254.169.254)。防:解析域名后校验 IP 不在内网段;禁止重定向到内网;只允许 http / https。Agent 的 web_fetch 类工具必须考虑这个。Agent 特有的安全问题? prompt 注入(外部内容里藏指令)、越权调用工具、沙箱逃逸、记忆投毒、数据外泄(模型被诱导把内部数据发到外部)。核心原则:权限在 harness 不在 prompt(见 01 文档 Q15)。
★ 检查后资源被转移造成越权怎么办? 缩短检查与提交窗口,锁后刷新资源并重新授权,IO 后核对版本。数据库检查通过也不能撤销已经写出的文件,需协调发布步骤。
缓存为何会绕过撤权? 缓存可能带旧授权或混用用户键;撤权事件要失效,敏感读取回权威源复核。不能只让新登录生效而旧会话永久可读。
★ SSRF 如何处理重定向和 DNS? 每个跳转目标都校验,避免校验一个地址后实际连接另一个;控制协议、端口、解析结果和出口网络,必要时只允许明确目标。
用户给的 JWT 里 org_id 能直接用吗? 先验证签名、算法、issuer/audience 与期限,再核对当前成员关系;合法旧令牌里的组织声明可能已失效。
★ JWT 算法混淆怎么防? 服务端固定允许算法和对应密钥类型,验证 issuer/audience,不按令牌自由选择不受信任的验证方法;采用成熟库并保持更新。
多租户搜索怎么验证无泄露? 构造同名资料、旧 payload、搬迁、撤权和缺出处片段,断言连摘要和引用都不返回;不是只验证最终答案没有正文。
★ 审批后权限变化怎么处理? 批准绑定具体动作和版本,执行时重查身份、资源归属与权限。拒绝过期批准,不能把「此前点了同意」当永久授权。
恶意压缩包如何隔离? 限制解压总字节、文件数、路径、嵌套与时间,拒绝越界路径和危险链接;在受限执行环境处理并清理失败产物。
★ 凭证泄露怎么处置? 先撤销/轮换并限制继续滥用,再查使用范围、日志和产物,修复来源与验证新旧密钥切换。只从 git 删字符串不能撤销已泄露凭证。
多层代理如何防伪造客户端 IP? 只信任已知代理链和约定跳数,入口清理不可信转发头。限流/审计按实际可信地址计算,部署拓扑变化后重新验证。
★ 第三方回调为什么不只看签名? 还要核对商户、订单、金额、事件类型、时间和幂等状态。签名验证了来源,不证明该通知对应本系统合法业务。
身份依赖不可用时能放行吗? 敏感读写通常 fail-closed,返回可重试失败并记录;异步投递可暂缓而非永久认定身份失效,避免错误状态造成不可恢复丢失。
★ 预签名 URL 有什么边界? 授权常绑定方法、资源与期限,但持有者通常可在有效期内使用。限制生命周期、对象版本和分享范围,不能当可随时撤销的完整会话。
如何防跨租户的批量接口漏洞? 逐资源或等价集合授权,确认全部目标都属于许可范围;局部失败与原子语义明确,不能只检查列表第一项。
★ 高权限工具如何最小化? 细化动作、参数与目标范围,凭证按调用注入并及时清理,输出受控;模型描述里写「谨慎」不能替代服务端门禁。
安全规则升级如何避免漏入口? 列普通、确认、后台、重试、批量与下载等所有执行路径,统一策略并逐条回归。把检查加在 UI 或单一 decorator 往往会留下旁路。
★ 删除敏感数据为何不能只删主表? 索引、缓存、图断言、日志、备份和产物都可能保留副本。制定删除范围与保留政策,并对实际可读路径做验证。
如何衡量权限实现是否完整? 建立操作者×资源关系×动作×状态的用例矩阵,包含撤权、转移和并发;追踪每个拒绝/允许来源,不只看代码覆盖率。
