8大典型的前端安全问题
1.XSS攻击:跨站脚本攻击(Cross-Site Scripting)
本质原因:浏览器错误的将攻击者提供的用户输入数据当做JavaScript脚本给执行了
XSS分类,按照恶意输入的脚本是否在应用中存储,XSS被划分为“存储型XSS”和“反射型XSS”,
按照是否和服务器有交互,又可以划分为“Server Side XSS”和“DOM based XSS”。
利用XSS漏洞来窃取包括用户身份信息在内的各种敏感信息、修改Web页面以欺骗用户,
甚至控制受害者浏览器,或者和其他漏洞结合起来形成蠕虫攻击,等等。
解决方法: (1)对数据进行严格的输出编码,使得攻击者提供的数据不再被浏览器认为是脚本而被误执行。
(2)设置CSP HTTP Header(csp内容安全策略)CSP可以完全禁止内联的JavaScript
(3)输入验证
(4)开启浏览器XSS防御等等
需要根据输出数据所在的上下文来进行相应的编码
由于数据将被放置于HTML元素中,因此进行的是HTML编码,
而如果数据将被放置于URL中,则需要进行URL编码,将其变为%3Cscript%3E。
此外,还有JavaScript编码、CSS编码、HTML属性编码、JSON编码等等。
2.iframe风险
场景: 有些时候我们的前端页面需要用到第三方提供的页面组件,通常会以iframe的方式引入
iframe中的内容是由第三方来提供的,默认情况下他们不受我们的控制,
他们可以在iframe中运行JavaScirpt脚本、Flash插件、弹出对话框等等,这可能会破坏前端用户体验。
如果iframe中的域名因为过期而被恶意攻击者抢注,或者第三方被黑客攻破,iframe中的内容被替换掉了,
从而利用用户浏览器中的安全漏洞下载安装木马、恶意勒索软件等等
解决方法:iframe有了一个叫做sandbox的安全属性,通过它可以对iframe的行为进行各种限制,
充分实现“最小权限“原则。sandbox属性支持细化参数配置
(但是只能显示静态资源,iframe中的页面访问它自己的服务器都会被算作跨域请求)
3.点击劫持(被iframe使用)
场景:攻击者设计的小游戏,第三方引入我们的页面透明度为0,诱导用户点击
解决方法:修改web服务器配置
4.错误的内容推断
场景:前端上传图片,攻击者上传脚本文件成功,浏览器在请求到该脚本,然后浏览器默认会根据响应的内容
进行推断其内容类型,类型为脚本文件执行
解决方法:(1)后端服务器响应配置 (2)自己的 前端避免啊
5.不安全的第三方依赖包
6.https 保护信息在传输过程中不被泄露
场景:一般情况 用户直接从域名开始输入地址 默认是http 第一次的请求被攻击者(黑客)拦截,
(正常下,服务器端返回的是跳转到HTTPS页面的响应, 是这个被拦截了) 后,代替客户端和服务器端进行后续的通信
7.本地存储数据泄露
场景:一些软件 支持离线模式 同时这个软件可以被XSS攻击,信息可能泄露
8.乏静态资源完整性校验
场景:前端应用通常会把一些静态资源存放到CDN(Content Delivery Networks)上,CDN被劫持了