安全 面试题库
收录真实面试常见问题,答案长度适合口头表达;拿不准时可返回相关主题复习。
API 信任边界
1个问题 · 0 已看01 在 API 边界上,认证与授权有什么区别? 查看答案 ▾ 收起 ▴
认证按服务端策略验证凭据,并产生规范化主体,例如主体标识、租户、认证方式和可信声明。授权再把该主体与请求动作、目标对象和上下文结合,决定是否放行操作。因此,有效令牌不表示可以访问端点接受的每个对象标识。我会分开这两个阶段,采用默认拒绝,并在真正执行读写的业务边界实施授权。测试要交叉覆盖用户、租户、HTTP 方法和对象所有权,还要断言拒绝后没有任何副作用。
授权
1个问题 · 0 已看02 如何防止对象级授权失效,为什么 UUID 不够? 查看答案 ▾ 收起 ▴
每个接收对象标识的操作,都必须证明当前主体可以对该对象执行当前动作。我倾向于把租户与可见性条件带进数据库查询,再在事务写入边界检查更复杂的状态或关系策略。对不存在或无权访问的私有对象使用一致响应,通常是 404,避免泄露对象是否存在。UUID 只能降低随意枚举的可能,客户端仍会持有并交换有效标识;日志、引用、泄露或其他端点都可能暴露它,因此不可猜测的 ID 永远不能取代授权和跨租户测试。
资源控制
1个问题 · 0 已看03 分布式 API 中的速率限制怎样才算正确? 查看答案 ▾ 收起 ▴
首先要定义预算及其键:按主体、租户、凭据或可信来源网络限制请求数、字节数、并发作业数或下游成本。所有 API 实例必须通过共享状态中的原子更新消耗同一预算,并明确窗口、过期与重试响应。代理地址只能从已配置的可信跳点接受。还要定义限流存储失败时的行为;昂贵操作或认证通常关闭,部分读取可以降级。速率限制只能减缓滥用,不能取代授权、输入边界、幂等性和特定工作负载的并发控制。
生成代码审查
2个问题 · 0 已看04 上线前应怎样审查 AI 生成的 API 端点? 查看答案 ▾ 收起 ▴
我会从可观察契约开始,把客户端控制的每个标识、HTTP 方法、属性和凭据追踪到实际执行位置。端点必须按固定服务端策略验证凭据,默认拒绝动作与对象访问,拒绝未知输入字段,并且只序列化允许的输出字段。随后测试被拒绝的路径,包括其他用户与租户、替代方法与版本、畸形和超大请求体、并发写入、重试以及依赖不可用。最后检查日志和错误中是否含令牌或个人数据,并确认每条拒绝或失败路径都不会改变存储与下游系统。
20 接受 AI 生成的 Web 请求处理器前,需要验证什么? 查看答案 ▾ 收起 ▴
我不会因为代码看起来完整就信任它,而会把每个客户端可控值和声明身份一路追踪到接收器。处理器必须从服务端验证过的状态派生主体,拒绝未知或超大输入,授权动作和对象,为解释器绑定参数,并按准确上下文编码输出。我会区分 CORS、CSRF、CSP、认证和授权,不接受用其中一项替代另一项。拒绝测试覆盖其他用户与租户、替代方法与内容类型、畸形编码、依赖失败和并发请求,还要在每次拒绝后检查代理后的响应头、日志、数据库状态、已发事件和下游调用。
Web 安全边界
1个问题 · 0 已看05 CORS 执行什么安全边界,又不保护什么? 查看答案 ▾ 收起 ▴
CORS 是由浏览器执行的响应共享策略。服务端通过它声明哪些页面源可以借助 Fetch 等浏览器 API 读取跨源响应。它不是服务端认证或授权,因为 curl、后端服务和恶意客户端不必执行这套规则。它也不是 CSRF 防护:安全列表内的跨源请求可以到达服务器并改变状态,即使浏览器不向脚本暴露响应。因此,我会收紧 CORS 配置,同时仍对调用方认证、对每个操作与资源授权、校验输入,并为基于 Cookie 的状态变更提供 CSRF 防护。
CORS 协议
1个问题 · 0 已看06 浏览器何时发送 CORS 预检,服务端必须返回什么? 查看答案 ▾ 收起 ▴
请求超出 CORS 安全列表时,例如使用 PUT、JSON 内容或 Authorization 请求头,浏览器通常先发送 OPTIONS。预检携带 Origin、Access-Control-Request-Method 和计划使用的非安全列表请求头。服务端返回一个匹配的允许源,以及获准的方法和请求头;使用凭证时还需要凭证响应标志。策略通过后,浏览器才发送实际请求,而实际响应仍要通过自己的源检查。预检只批准请求形状,端点还必须独立完成认证、授权和校验,并在错误路径上正确返回 CORS 头。
凭证与缓存
1个问题 · 0 已看07 如何为多个前端源安全配置带凭证的 CORS? 查看答案 ▾ 收起 ▴
我会维护一组经过评审的完整源,其中包括协议与端口,再对序列化 Origin 做精确集合匹配。命中后,响应只返回这一个源,并把 Access-Control-Allow-Credentials 设为 true;不能合并多个源,也不能使用通配符。由于选中的响应头随请求变化,还要把 Origin 合并进 Vary,让共享缓存区分变体。客户端必须选择合适的 credentials mode,Cookie 的 SameSite、Secure、域和浏览器策略也仍然生效。这些设置都不授予用户权限,实际端点仍需独立执行认证、授权与 CSRF 防护。
生产诊断
1个问题 · 0 已看08 如何诊断只在生产环境出现的 CORS 故障? 查看答案 ▾ 收起 ▴
我会从运行在准确生产源上的页面复现问题,并在浏览器开发者工具中同时检查 OPTIONS 与实际请求。需要比较 Origin、请求的方法与请求头、credentials mode、状态码、重定向和全部 Access-Control 响应头。随后检查经过 CDN、网关和应用处理后的最终响应,因为重复头、缺失 Vary 或基础设施生成的错误可能与本地中间件输出不同。我会测试一个允许源和一个拒绝源,并且只把绕过缓存当作诊断对照。curl 可以确认原始 HTTP,但响应暴露与 Cookie 策略行为必须由真实浏览器验证。
浏览器策略
1个问题 · 0 已看09 内容安全策略怎样补充常规 XSS 防护? 查看答案 ▾ 收起 ▴
CSP 是由浏览器执行的第二道边界,不是输入清理器。应用仍要针对 HTML、属性、URL 或脚本上下文编码输出,并避开不安全的 DOM 接收点;若注入仍然发生,CSP 再限制哪些脚本与资源可以执行。我会从 default-src 和显式指令开始,避开宽泛通配符与 unsafe-inline,只在必须保留内联脚本时使用每次响应的新 nonce。还要显式限制页面祖先、表单目标与 base URL,因为它们并非全部继承 default-src,最后用浏览器中的阻止样本证明策略有效。
传输策略
1个问题 · 0 已看10 怎样部署 HSTS,才不会把用户挡在域名之外? 查看答案 ▾ 收起 ▴
我会先清点所有子域名、证书路径、第三方托管与恢复端点,因为 includeSubDomains 会把承诺扩展到主站之外。HSTS 只通过有效 HTTPS 发送。先使用较短的 max-age,观察证书续期与重定向,再经过评审分阶段延长。只有整个域名空间准备好后才加入 includeSubDomains;组织接受较慢的移除流程后才提交预加载。回滚方案通过可用 HTTPS 发送 max-age=0,但无法连接的用户收不到它,预加载移除也要等待浏览器更新。
内容安全策略
1个问题 · 0 已看11 包括缓存因素在内,怎样才算正确实现 CSP nonce? 查看答案 ▾ 收起 ▴
nonce 必须不可预测,使用密码学随机源为一个响应生成,并原样放入该响应的 CSP 与获准脚本或样式元素。它只授权这些元素,不负责转义元素中的数据。我会拒绝进程全局、构建期、顺序生成或来自用户输入的值。HTML 与策略头必须属于同一个缓存对象;CDN 不能只重新生成一侧,也不能跨请求复用个性化 HTML。测试要比较两处值,确认连续响应不同,注入一个没有 nonce 的脚本,并在真实浏览器中验证只有获准元素执行。
生产验证
2个问题 · 0 已看12 怎样在生产部署链路中验证安全响应头? 查看答案 ▾ 收起 ▴
我会检查 CDN、网关、缓存、框架与路由全部处理后的最终响应。原始 HTTP 测试覆盖代表性的内容类型与状态,包括重定向、认证失败、404、请求过大、限流与上游错误,用来发现缺失、重复或被覆盖的字段。随后由浏览器测试证明执行结果:无 nonce 脚本被阻止,攻击者来源不能嵌入页面,MIME 类型不匹配的脚本加载失败,被禁用功能不可用。源站响应可以作为诊断对照,但不能证明用户最终收到什么,也不能证明浏览器怎样执行。
16 除了 URL 校验器单元测试,还应怎样验证 SSRF 防护? 查看答案 ▾ 收起 ▴
我会测试从输入一直到套接字所选对端的完整路径。样本包括相似主机名、authority 中的凭据、显式端口、IPv4 与 IPv6 特殊网段、映射地址、混合或变化的 DNS 答案、相对与绝对重定向,以及解析失败。通过检测数据证明实际连接地址和 TLS 校验主机名。随后测试超大与压缩正文、慢速数据流、重定向循环、重试和并发限制。还要从已部署工作负载尝试绕过获准客户端或代理的直连路径,确认出站策略能独立阻断内部服务与元数据。
Web 请求边界
1个问题 · 0 已看13 什么是 SSRF,最强的设计级防护是什么? 查看答案 ▾ 收起 ▴
SSRF 是不可信输入影响服务端网络请求,并借用服务器网络可达性、身份或凭据的一类漏洞。服务器可能因此访问调用方无法直接触达的回环地址、私有服务、元数据端点或公共写操作。首选防护是取消任意目标选择:调用方只提交服务端定义的服务 ID 和经过编码的路径段等有界数据,配置负责协议、精确主机、端口、方法、凭据与响应契约。如果业务确实需要任意公共 URL,就统一经过默认拒绝的出站策略和独立网络限制。
DNS 与连接
1个问题 · 0 已看14 为什么在抓取前校验主机名的 DNS 结果仍不足以防止 SSRF? 查看答案 ▾ 收起 ▴
如果校验与连接不共享同一次解析结果,它们就是两个独立操作。代码可能批准公共地址,随后把原始主机名交给再次查询 DNS 的客户端,并得到私有或链路本地地址。我会检查每个可能选用的 A 与 AAAA 记录,包括映射地址,再通过受支持的解析钩子或策略代理,把一个获准地址绑定到套接字。HTTPS 仍保留原始主机名,用于证书校验、SNI 与 HTTP authority。新套接字、重新解析的重试和每次重定向都要重新决策,DNS 缓存本身不等于连接绑定。
重定向策略
1个问题 · 0 已看15 防 SSRF 客户端应如何处理重定向与出站凭据? 查看答案 ▾ 收起 ▴
重定向是新目标,不是首轮批准的延续。我会关闭自动跟随,根据当前 URL 解析相对 Location,并在下一跳前重新检查协议、精确主机、有效端口、DNS 地址与连接绑定。同时限制跳转次数,并明确每个获准状态码对方法和正文的影响。每一跳都从服务端的小型允许列表重新构造请求头;入站 Authorization、Cookie、代理头和转发头绝不透传。即使两个主机都获准,也只有在策略识别出配置的凭据受众后,才附加对应服务凭据。
信任边界
1个问题 · 0 已看17 怎样把一个 Web 功能转化为有用的安全威胁模型? 查看答案 ▾ 收起 ▴
我会追踪具体的数据流与身份流,而不是先套用漏洞清单。先标出攻击者可控来源、解析与规范化步骤、高权限操作、输出上下文,以及浏览器、代理、应用、数据库和下游服务之间的边界。对每个敏感动作,明确可信主体、目标对象、允许条件、拒绝响应和副作用。随后把控制放在实际执行点:业务契约由输入校验负责,对象操作由授权负责,解释器边界使用参数绑定,输出位置使用上下文编码。最后用交换用户、租户、方法、来源和畸形值的反例验证模型。
注入边界
1个问题 · 0 已看18 为什么输入校验不能取代参数化查询或输出编码? 查看答案 ▾ 收起 ▴
输入校验回答一个值是否属于业务域,例如是否为范围内的整数或已知状态,但它不决定后续解释器怎样处理该值。SQL 参数让查询语法和值保持分离,即使合法业务字符串包含引号也一样。上下文相关输出编码则保持文本与 HTML、URL、CSS 或 JavaScript 语法的边界。我会尽早按狭窄契约校验并保留规范值,同时在实际使用位置继续执行接收器专用控制。黑名单无法穷举编码变体、解析器差异和后来新增的上下文。
浏览器凭据
1个问题 · 0 已看19 怎样保护使用会话 Cookie 认证的高影响状态变更? 查看答案 ▾ 收起 ▴
我会要求明确的非安全 HTTP 方法,认证服务端会话,并在修改边界授权当前动作和目标对象。因为浏览器会自动附带 Cookie,还要校验绑定到该会话的不可预测 CSRF 令牌,并把请求 Origin 与规范化后的精确允许源比较。Secure、HttpOnly 和合适的 SameSite 设置可以降低暴露,但不能取代这些检查。修改操作还要校验业务载荷,并按需要提供事务或幂等语义,在不可逆工作开始前完成拒绝。测试覆盖令牌缺失与错误、恶意来源、其他有效用户、重试及浏览器中的最终 Cookie 行为。
没有符合筛选条件的问题。