请解释什么是网站中的跨站脚本攻击(XSS),并阐述相应的防御措施有哪些?
考察说明
考查对XSS攻击原理的掌握程度以及实际防护能力。
回答思路
- 【回答框架 1】XSS(跨站脚本攻击)是一种注入攻击,攻击者将恶意脚本注入到网页中,当其他用户浏览该页面时,恶意脚本在用户的浏览器中执行。主要危害包括窃取用户Cookie、会话劫持、钓鱼、篡改页面内容等。XSS通常发生在用户输入未经过滤或转义而直接输出到页面中的场景。
- 【回答框架 2】XSS主要分为三类:存储型、反射型和DOM型。存储型指恶意脚本被存储在服务器端(如数据库),当用户访问相关页面时被加载执行;反射型指恶意脚本通过URL参数等方式传递,服务器将未处理的输入直接返回;DOM型则是在客户端通过JavaScript修改DOM时,将恶意内容插入文档。
- 【回答框架 3】防御措施的核心原则是对所有不可信数据进行输出编码。具体包括:在HTML上下文对特殊字符进行HTML实体编码,在JavaScript上下文使用JavaScript编码,在URL上下文进行URL编码;对用户输入进行严格的验证,使用白名单机制过滤非法内容;使用Content Security Policy(CSP)限制脚本来源,禁止内联脚本和eval等不安全代码。
- 【回答框架 4】此外,设置HttpOnly Cookie属性可防止JavaScript访问Cookie,从而降低会话劫持风险。在开发框架层面,现代前端框架(如React、Vue)默认会进行转义,但也需要注意避免使用v-html、dangerouslySetInnerHTML等危险操作。对于富文本内容,应使用可靠的过滤库(如DOMPurify)进行清理。
- 【关键点 1】XSS是注入攻击,核心在于未经过滤的用户输入被当作代码执行。
- 【关键点 2】按存储、反射、DOM三种类型分别采取针对性防护。
- 【关键点 3】输出编码和输入验证是基础,CSP和HttpOnly是增强手段。
- 【关键点 4】避免使用危险的前端API(如innerHTML、document.write)。
- 【易错点 1】仅对输入进行过滤而忽略输出编码,导致绕过。
- 【易错点 2】认为前端框架自动处理所有XSS,忽视危险API的使用。
- 【易错点 3】CSP配置过于宽松,未禁止内联脚本或eval。