无需登录 数据私有 本地保存

XSS 过滤器绕过测试场 - 安全编码演示

66
0
0
0

术语表

XSS
Cross-Site Scripting,跨站脚本攻击。攻击者将恶意JavaScript代码注入到受害者的浏览器页面中执行的安全漏洞类型。XSS可以分为反射型(Reflected XSS)、存储型(Stored XSS)和DOM型(DOM-based XSS)三种。XSS的危害包括窃取用户Cookie和凭据、劫持用户会话、篡改页面内容、发起CSRF攻击等。
反射型XSS
Reflected XSS,也称为非持久型XSS。恶意脚本通过URL参数或其他HTTP请求数据发送到服务器,服务器将脚本反射回响应页面中。受害者需要点击包含恶意载荷的URL才能触发攻击。反射型XSS不将恶意代码存储在服务器端,攻击效果通常是一次性的。常见于搜索结果页、错误页面等将用户输入回显的场景。
存储型XSS
Stored XSS,也称为持久型XSS。恶意脚本被永久存储在目标服务器上(如数据库、文件系统等),当其他用户访问包含该恶意内容的页面时自动执行。存储型XSS的危害更大,因为攻击者无需诱骗用户点击特定链接。常见于评论区、论坛帖子、用户资料页等允许用户提交持久化内容的场景。
DOM型XSS
DOM-based XSS,完全在客户端执行的XSS。恶意数据不经过服务器,直接通过JavaScript操作DOM API(如innerHTML、document.write、eval等)将未经过滤的用户输入渲染到页面中。DOM型XSS的防御需要在客户端进行输入验证和输出编码。使用DOMPurify对动态HTML内容进行消毒是有效的防御手段。
黑名单过滤
Blacklist Filtering,基于已知危险模式的过滤策略。定义一组被禁止的关键字、标签、属性或模式,对用户输入进行匹配和移除/转义。黑名单过滤的根本缺陷在于无法穷举所有可能的攻击向量——总有新的绕过方式未被纳入黑名单。安全领域普遍认为,有效的输入过滤应采用白名单策略而非黑名单策略。
白名单过滤
Whitelist Filtering,基于允许模式的过滤策略。定义一组允许的关键字、标签、属性或模式,只允许匹配白名单的输入通过,其余一律拒绝。白名单策略比黑名单策略更安全,因为未被明确允许的内容默认被拒绝。在输入验证场景中,白名单策略是推荐的最佳实践。
HTML实体编码
HTML Entity Encoding,将HTML特殊字符转换为对应的实体引用的编码方式。例如<编码为<、>编码为&gt;、"编码为"。HTML实体编码可以防止浏览器将用户输入中的特殊字符解析为HTML标签或属性,是防御XSS的基础手段之一。在输出到HTML上下文时,应始终对用户输入进行适当的HTML实体编码。
CSP
Content Security Policy,内容安全策略。一种浏览器安全机制,通过HTTP响应头或meta标签定义页面可以加载和执行哪些资源。CSP可以有效限制XSS攻击的影响范围,例如禁止执行内联脚本(script-src 'self')、禁止加载外部脚本、限制脚本来源域名等。CSP是防御XSS的纵深防御策略之一,应与其他防御手段配合使用。
DOMPurify
一个专门用于HTML消毒的JavaScript库,可以解析HTML字符串并移除所有不安全的标签、属性和事件处理器,只保留安全的HTML子集。DOMPurify是客户端HTML消毒的事实标准,广泛应用于各种Web应用中。使用方式:DOMPurify.sanitize(dirtyHTML)返回消毒后的安全HTML字符串。支持自定义允许的标签和属性白名单。
innerHTML
JavaScript DOM API,用于设置或获取元素的HTML内容。使用innerHTML设置包含用户输入的内容是XSS的主要攻击向量之一,因为浏览器会将字符串解析为HTML并执行其中的脚本。安全替代方案:使用textContent设置纯文本内容,或使用DOMPurify.sanitize()对HTML内容进行消毒后再设置。