
1) 【一句话结论】前端防范XSS、CSRF需从输入验证、输出编码、内容安全策略(CSP)、CSRF token、SameSite cookie等维度综合措施;跨域通过CORS(含预检请求)和JSONP/WebSocket等方案解决。
2) 【原理/概念讲解】
http://a.com/js无法访问http://b.com/data,需通过CORS(服务器响应允许头)或JSONP(动态script加载)解决。3) 【对比与适用场景】
| 攻击类型 | 定义 | 攻击方式 | 主要危害 | 防范重点 | 注意点 |
|---|---|---|---|---|---|
| XSS | 注入恶意脚本到网页 | 用户输入未过滤,脚本在用户浏览器执行 | 窃取Cookie、会话、篡改页面 | 输入验证、输出编码、CSP、HTTPOnly | DOM clobbering等绕过方式,需后端配合输出编码 |
| CSRF | 利用用户会话执行非授权操作 | 伪造请求(如POST),携带会话Cookie | 执行非授权操作(转账、修改数据) | CSRF token、Referer检查、SameSite、验证码 | Referer检查局限性,CSRF token需存储隐藏字段、随机生成+session绑定 |
| 跨域 | 浏览器同源策略限制不同源资源访问 | 浏览器阻止跨域请求 | 功能受限(如API调用失败) | CORS(预检请求+允许头)、JSONP(仅GET)、WebSocket(服务器配置) | CORS预检请求必要性,JSONP仅支持GET,WebSocket需服务器支持或代理 |
4) 【示例】
<script>alert('hacked')</script>,前端未过滤,后端未对用户输入做HTML实体编码(如<转<),用户访问时脚本执行。token=abc123),用户点击链接后,表单提交POST https://bank.com/transfer,携带用户会话Cookie(JSESSIONID=abc123),银行执行转账。https://api.example.com/data,浏览器因同源策略阻止,服务器配置CORS后返回Access-Control-Allow-Origin: https://myapp.com,实际请求通过;若用JSONP,前端动态创建<script src="https://api.example.com/data?callback=handleData">,服务器返回handleData({data: '...'}),前端解析回调函数。5) 【面试口播版答案】
“面试官您好,关于前端防范网络攻击和跨域问题,核心是针对性措施:
<转<);设置CSP HTTP头(如script-src 'self')限制资源加载;用HTTPOnly cookie防止JavaScript读取。Access-Control-Allow-Origin),实际请求才能通过;也可用JSONP(动态script加载跨域数据,仅支持GET)。6) 【追问清单】
Content-Security-Policy,如default-src 'self'(默认允许本域)、script-src 'self' 'unsafe-inline'(允许本域和内联脚本,需谨慎)、img-src 'self' https://cdn.example.com(允许特定CDN)。)Access-Control-Allow-Origin),或通过代理服务器转发。)7) 【常见坑/雷区】
unsafe-inline)或配置错误源,导致XSS绕过或功能异常。