前端知识库-前端安全系列一(攻防)

简介: 最近重新整理了下自己的前端相关知识,在前端安全这个领域由于最近两年做的事内部项目,对此没有太多的实际应用,借此机会重新去了解下,俗话说温故而知新,从故有的知识中总结获取新的知识才是我们进步的基础。

网络异常,图片无法展示
|

前言


最近重新整理了下自己的前端相关知识,在前端安全这个领域由于最近两年做的事内部项目,对此没有太多的实际应用,借此机会重新去了解下,俗话说温故而知新,从故有的知识中总结获取新的知识才是我们进步的基础。

前端安全


跨站点请求伪造(CSRF)

在国内互联网刚发展阶段,网站的CSRF漏洞还是比较多的。假设我们是攻击者,那当被攻击网站满足以下几个条件是,我们就可以顺利的进行CSRF攻击:

  • 用户登录被攻击网站,并且保存的cookie信息
  • 用户打开另一个tab访问我们的恶意网站
  • 被攻击网站未做任何CSRF防护

攻击流程

当你的网站满足上面三个条件了,那当前登录用户的信息对于恶意网站而言就是完全透明的了,下面说说攻击流程:

网络异常,图片无法展示
|
如图所示:

  • 用户打开A网站
  • 登录A(XSRF漏洞)
  • 生成登录cookie
  • 同个浏览器B(伪造攻击网站)
  • B网站通过脚本获取A的cookie并发送给攻击者后台
  • 攻击者拿到cookie 通过cookie获取用户信息

如何防范

通过分析可以发现XSRF攻击方式是通过钓鱼网站拿到cookie,然后攻击者进行非法操作,解决方式就是让攻击者拿不到cookie或者验证方式不仅仅只是cookie。

  • 尽量使用POST,限制GET,这样可以增加攻击难度,攻击者必须伪造form表单才能请求。
  • 将cookie属性设置为httponly,这样攻击者就获取不到cookie了。
//nodejs express为例
res.cookie('userinfo','*******',{maxAge:60000,path:'/news',httpOnly:true})
  • 服务端增加token验证,每次登录时服务端生成token,每次的请求对token进行校验
  • 通过Referer识别,服务端通过header中的refer获取来源地址,如果是非法的则拒绝操作。
String referer = req.headers.referer 

跨站脚本攻击(XSS)

反射型

  • 用户通过攻击者的提供的链接登录被攻击的A网站
  • A网站对链接未做任何字符串校验

存储型

  • A网站是博客,论坛类的网址,并可以输入内容
  • A网站对输入的内容未做任何字符串校验
  • 用户浏览攻击者发布的内容

DOM型

  • 用户通过攻击者提供的wifi或其他网络打开A网站
  • 用户点击到攻击者插入A网站的DOM

攻击流程

网络异常,图片无法展示
|
如图所示,攻击的流程略有不同: 反射型

  • 攻击者伪造A网站链接
  • 用户打开A网站
  • 插入攻击者的攻击js
  • 获取用户信息进行不法操作

存储型

  • 攻击者A网站输入攻击脚本代码或sql语句存入数据库(如博客 论坛网站)
  • 用户打开A网站
  • 用户浏览到攻击者的页面
  • 获取用户信息进行不法操作 DOM型(可以说是基于存储型的)
  • 攻击者提供的数据源(cdn劫持,数据库存储的非法字符)
  • 数据通过一个不可信赖的数据源进入 Web 应用程序
  • 用户浏览加载不可信赖的数据源攻击脚本
  • 获取用户信息进行不法操作

如何防范

通用防御手段:

  • 在输出html时,加上Content Security Policy的Http Header (作用:可以防止页面被XSS攻击时,嵌入第三方的脚本文件等) (缺陷:IE或低版本的浏览器可能不支持)
  • 在设置Cookie时,加上HttpOnly参数 (作用:可以防止页面被XSS攻击时,Cookie信息被盗取,可兼容至IE6) (缺陷:网站本身的JS代码也无法操作Cookie,而且作用有限,只能保证Cookie的安全)
  • 在开发API时,检验请求的Referer参数 (作用:可以在一定程度上防止CSRF攻击) (缺陷:IE或低版本的浏览器中,Referer参数可以被伪造)

反射型:

后台渲染html时候需要以下函数过滤:

  • htmlspecialchars函数(php)
  • htmlentities函数
  • HTMLPurifier.auto.php插件(php)
  • RemoveXss函数

前端通过后台api渲染页面时候:

  • 尽量使用innerText(IE)和textContent(Firefox),也就是jQuery的text()来输出文本内容
  • 必须要用innerHTML等等函数,则需要做类似php的htmlspecialchars的过滤

持久型:

  • 服务端处理存储的数据,将可能执行的脚本字符转成字符串,如下:
function htmlspecialchars(str){           \
          str = str.replace(/&/g, '&');  \
          str = str.replace(/</g, '&lt;');  \
          str = str.replace(/>/g, '&gt;');  \
          str = str.replace(/"/g, '&quot;');  \
          str = str.replace(/'/g, '&#039;');  \
          return str;  \
}

DOM型: DOM型XSS主要是由客户端的脚本通过DOM动态地输出数据到页面而不是依赖于将数据提交给服务器端,而从客户端获得DOM中的数据在本地执行,因而仅从服务器端是无法防御的。其防御在于:

  • 避免客户端文档重写、重定向或其他敏感操作,同时避免使用客户端数据,这些操作尽量在服务器端使用动态页面来实现;
  • 分析和强化客户端JS代码,特别是受到用户影响的DOM对象,注意能直接修改DOM和创建HTML文件的相关函数或方法,并在输出变量到页面时先进行编码转义,如输出到HTML则进行HTML编码、输出到

点击劫持

是什么

一些恶意网站使用iframe把一些网站嵌入自己的网站中,然后把 iframe 设置透明,用定位的手段的把一些引诱用户在恶意网页上点击。这样用户不知不觉中就进行了某些不安全的操作。

攻击流程

  • 攻击者伪造使用iframe伪造网站
  • 用户在伪造的网站上进行不安全的操作
  • 攻击者通过不安全操作获取想要的信息

如何防范

  • js防范:判断上层路由地址是否和原网站的地址保持一致
if (top.location.hostname !== self.location.hostname) {
    alert("非法访问!");
    top.location.href = self.location.href;
}
  • 通过header配置防止:
//nginx 
add_header X-Frame-Options SAMEORIGIN;
//nodejs
res.setHeader('X-Frame-Options','DENY');

总结


互联网发展迅速,前端开发的需求量也与日俱增。如何开发一个安全易用的应用是我们每个前端开发者必修的课题,因此掌握常见的网站攻击手段,是我们防御攻击的最有效方法之一。在前端安全的问题上,没有任何一名开发者能保证自己开发的应用毫无漏洞,我们能做的就是杜绝已知的漏洞,了解可能会有的漏洞,路漫漫其修远兮,各位一起努力营造一个安全健康的互联网环境吧。

相关文章
|
6月前
|
缓存 安全 JavaScript
前端安全:Vue应用中防范XSS和CSRF攻击
【4月更文挑战第23天】本文探讨了在Vue应用中防范XSS和CSRF攻击的重要性。XSS攻击通过注入恶意脚本威胁用户数据,而CSRF则利用用户身份发起非授权请求。防范措施包括:对输入内容转义、使用CSP、选择安全的库;采用Anti-CSRF令牌、同源策略和POST请求对抗CSRF;并实施代码审查、更新依赖及教育团队成员。通过这些实践,可提升Vue应用的安全性,抵御潜在攻击。
919 0
|
4天前
|
存储 前端开发 安全
前端小白逆袭记:如何快速掌握前端安全知识,保护用户数据安全?
【10月更文挑战第30天】作为一名前端小白,我在初入职场时对前端安全几乎一无所知。但随着项目深入,我逐渐意识到前端安全的重要性,特别是在保护用户数据方面。本文将分享我在快速掌握前端安全知识的心得和技巧,包括防范XSS、CSRF攻击、敏感信息处理、使用HTTPS协议等内容,希望能为同样在前端道路上奋斗的你提供帮助。
12 3
|
3月前
|
Java 开发者 关系型数据库
JSF与AWS的神秘之旅:如何在云端部署JSF应用,让你的Web应用如虎添翼?
【8月更文挑战第31天】在云计算蓬勃发展的今天,AWS已成为企业级应用的首选平台。本文探讨了在AWS上部署JSF(JavaServer Faces)应用的方法,这是一种广泛使用的Java Web框架。通过了解并利用AWS的基础设施与服务,如EC2、RDS 和 S3,开发者能够高效地部署和管理JSF应用。文章还提供了具体的部署步骤示例,并讨论了使用AWS可能遇到的挑战及应对策略,帮助开发者更好地利用AWS的强大功能,提升Web应用开发效率。
61 0
|
3月前
|
安全 算法 前端开发
外滩大会安全 AR 沙盘首秀--背后的前端技术
外滩大会安全 AR 沙盘首秀--背后的前端技术
|
5月前
|
监控 安全 前端开发
前端安全:XSS攻击与防御策略
抵御XSS攻击的关键策略包括输入验证、输出编码、设置安全HTTP头如CSP和X-XSS-Protection、谨慎管理存储和会话、使用DOMPurify等库进行数据清理、采用安全编码实践、教育用户和开发人员、实施多层防御、持续测试和更新。其他措施如使用非渲染模板引擎、限制错误信息、使用WAF、加密数据、遵守安全编码标准和进行安全审计也是重要步骤。
132 0
|
6月前
|
存储 安全 前端开发
PHP医院安全不良事件管理系统源码(AEMS)前端vue2+element+后端laravel8不良事件上报与闭环管理
医院不良事件上报与管理系统结合现代医院管理思路,遵照PDCA全面质量循环管理方法而设计,并在多家大型三甲医院成熟运用。系统从事件上报、基于人、机、料、法 、环的RCA分析、事件整改、效果评估实现了结构化、标准化、智能化的管理和分析,满足医院可追溯化、全流程闭环管理要求,满足等级医院评审细则要求,大力提高医院不良事件上报的效率,保障事件分析的准确性,促进医疗安全的提高,避免同类事件再次发生,改善整个医院医疗安全,从而实现医院安全医疗的目标。
77 3
|
6月前
|
SQL 安全 前端开发
前端安全方面
前端安全方面
48 0
|
6月前
|
缓存 负载均衡 前端开发
前端反向代理的神奇世界:加速、安全与缓存的秘密(上)
前端反向代理的神奇世界:加速、安全与缓存的秘密(上)
前端反向代理的神奇世界:加速、安全与缓存的秘密(上)
|
6月前
|
缓存 前端开发 安全
前端反向代理的神奇世界:加速、安全与缓存的秘密(下)
前端反向代理的神奇世界:加速、安全与缓存的秘密(下)
|
6月前
|
安全 前端开发 算法
前端知识笔记(三十八)———HTTPS:保护网络通信安全的关键
前端知识笔记(三十八)———HTTPS:保护网络通信安全的关键
68 0