Web前端安全
一、跨站脚本攻击(XSS, Cross-Site Scripting)
- 问题:攻击者通过在网页中注入恶意脚本,当用户浏览该页面时,脚本被执行,可能导致数据盗窃、账户接管、网页篡改、浏览器利用、恶意软件传播。
- 分类包括:
- 存储型XSS(恶意脚本存储在服务器,如在评论区发表含有恶意脚本的留言)。
- 反射型XSS(恶意脚本通过URL传递,攻击者诱使用户点击带有恶意链接的邮件或消息)。
- DOM-based XSS(基于文档对象模型的XSS,恶意脚本直接在客户端被动态生成和执行)。
- 防御技术:
- 输入验证与转义 对所有用户提交的数据进行严格验证,确保其符合预期格式和内容。
- Content Security Policy (CSP) 通过HTTP响应头设置Content-Security-Policy,限制浏览器加载和执行脚本、样式、图片等资源的来源。
- HTTPOnly Cookies 设置HTTPOnly标志,防止恶意脚本通过document.cookie访问Cookie。
二、跨站请求伪造(CSRF,Cross-site request forgery)
- 问题:攻击者伪造用户对受信任网站的请求,诱导用户在已登录状态下无意中触发恶意请求,实现冒充用户进行操作。可能导致账户资金转移、敏感信息修改、恶意操作
- 攻击原理:
- 用户已登录:攻击目标是在用户已经登录且具有有效会话的Web应用程序上。
- 浏览器信任:浏览器会自动携带用户当前会话的认证信息(如Cookie、Authorization头)发送到目标网站,这是正常操作的一部分,也是CSRF攻击得以实施的基础。
- 恶意请求伪装:攻击者通过各种手段(如嵌入在网页、邮件、短信中的恶意链接、表单、图像等)诱导用户浏览器发起一个对目标网站的请求,该请求的内容和意图由攻击者设定,但看起来像是用户主动发起的。
- 防御技术:
- CSRF Token:Token的非自动化特性使其天然防御CSRF。
- 双重验证:对于敏感操作,除了常规的身份验证外,增加第二重验证。
- SameSite Cookie属性:设置Cookie的SameSite属性为Lax或Strict,限制浏览器在跨站请求中发送相关Cookie。
三、点击劫持(Clickjacking)
- 问题:攻击者通过在网页中嵌入透明或不可见的iframe,覆盖在受信任的网站之上,诱使用户在不知情的情况下点击恶意链接或按钮,执行攻击者预设的操作。
- 劫持原理:
- iframe嵌套:攻击者创建一个网页,其中包含一个或多个指向目标网站的iframe,这些iframe通常被设置为透明或与背景色相融合,使得用户在视觉上无法察觉。
- 页面布局:攻击者精心设计页面布局,将恶意iframe覆盖在目标网站的关键操作区域(如登录按钮、转账按钮、链接等),确保用户在试图与目标网站交互时实际上点击了iframe内的元素。
- 用户诱导:攻击者通过各种手段(如钓鱼邮件、社交 engineering、恶意广告等)诱导用户访问其制作的嵌套了恶意iframe的网页。
- 防御技术:
- X-Frame-Options:服务器通过设置X-Frame-Options响应头,限制页面是否可以被嵌入iframe。可设置为DENY(禁止任何网站嵌套)、SAMEORIGIN(仅允许同源页面嵌套)。
- Content Security Policy (CSP):使用CSP的frame-ancestors指令,指定允许嵌套当前页面的源列表,阻止非授权的iframe嵌套。
- 用户交互防护:对于关键操作,如转账、修改密码等,可以使用额外的安全措施,如二次确认、验证码、指纹滑动验证等,增加攻击难度。