
1) 【一句话结论】:布局中防XSS需结合输入过滤/输出编码,并补充内容安全策略(CSP);浏览器兼容通过CSS前缀、Polyfill或框架适配,确保不同浏览器渲染一致。
2) 【原理/概念讲解】:XSS(跨站脚本攻击)是用户输入的恶意脚本被浏览器执行,核心是“输入-输出分离+资源限制”。输入过滤:检查用户输入是否包含非法字符(如<script>),仅允许安全字符(白名单);输出编码:将HTML特殊字符转为实体(如<→<),使浏览器解析为文本。CSP通过HTTP头(如Content-Security-Policy: default-src 'self')限制资源加载,防止外部脚本注入。类比:XSS就像把恶意脚本放进用户输入的“信封”,防御是检查信封(输入过滤)或把信封内容变成文字(输出编码),CSP则是在服务器端设置“只允许加载本站资源”,防止信封被外部脚本打开。
3) 【对比与适用场景】:
| 方法 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 输入过滤(白名单) | 检查用户输入是否包含非法字符,仅允许安全字符(如字母、数字、空格) | 严格,能阻止大部分注入,但需维护白名单 | 用户输入直接渲染(如评论、表单内容) | 白名单维护复杂,复杂输入(如HTML标签)易漏检 |
| 输出编码(HTML实体转义) | 将HTML特殊字符转为实体(如<→<,>→>) | 通用,自动处理所有特殊字符 | 输出HTML内容(如用户输入的文本显示在页面) | 需确保所有字符都被转义,否则可能被绕过 |
| 内容安全策略(CSP) | 通过HTTP头限制页面资源加载来源(如default-src 'self') | 服务器端配置,补充前端防御 | 所有页面,尤其动态内容 | 需正确配置,否则可能影响正常资源加载 |
4) 【示例】:用户输入"<script>alert('XSS')</script>",处理前:<script>alert('XSS')</script>,输入过滤检查到<script>并过滤(结果为空或替换为安全字符),输出编码转义为<script>alert('XSS')</script>。CSP配置示例:<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">,限制脚本只能加载本站资源。
5) 【面试口播版答案】:面试官您好,关于防XSS,布局里用户输入的内容(比如评论、表单字段),核心是输入过滤或输出编码。输入过滤就是检查用户输入有没有非法字符,比如<script>标签,只允许安全字符;输出编码就是把HTML特殊字符转成实体,比如<变成<,这样浏览器解析为文本。然后补充内容安全策略(CSP),通过HTTP头限制资源加载,比如Content-Security-Policy: default-src 'self',防止外部脚本注入。对于浏览器兼容,比如IE11和Edge,CSS属性需要加前缀,比如transition用-webkit-transition,或者用Polyfill库,比如Modernizr检测浏览器支持,加载对应的样式。框架如Bootstrap的响应式类能自动适配不同浏览器,减少手动处理兼容性的工作。
6) 【追问清单】:
<script>等标签,比如用正则/[^a-zA-Z0-9\s]/g匹配非法字符。default-src 'self'表示只允许加载本站资源。es5-promise库;或者支持Flexbox,用flexbox-polyfill。-ms-flexbox)或用BFC布局替代,比如用表格或浮动布局实现Flexbox效果。7) 【常见坑/雷区】:
transform需用-ms-transform;