前端与web安全| 青训营笔记

217 阅读5分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

课堂重点

今天学习web开发安全,从攻击和防御两个角度入手,了解前端开发并不只是编写页面这么简单。这里对课堂进行些回顾。

课堂笔记

攻击

XSS攻击 跨站脚本攻击(全称Cross Site Scripting,为和CSS(层叠样式表)区分,简称为XSS)是指恶意攻击者在Web页面中插入恶意javascript代码(也可能包含html代码),当用户浏览网页之时,嵌入其中Web里面javascript代码会被执行,从而达到恶意攻击用户的目的。XSS是攻击客户端,最终受害者是用户,当然,网站管理员也是用户之一。xss漏洞关键就是寻找参数未过滤的输出函数。

反射型XSS/不持久型XSS (Reflected XSS)

非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),不涉及数据库,从url上攻击,反射型XSS大多数是用来盗取用户的Cookie信息。漏洞数据流向是: 前端–>后端–>前端

image.png

存储型XSS/持久型XSS(Stored XSS)

持久化,代码是存储在 服务器 中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie。存储型 XSS 的数据流向是:前端–>后端–>数据库–>后端–>前端

image.png

基于DOM的XSS(DOM-based XSS)

不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过 url 传入参数去控制触发的,其实也属于反射型XSS。这种漏洞数据流向是: 前端–>浏览器

与反射性的不同

image.png

Mutation-basedXSS

image.png

image.png

CSRF 跨站请求伪造(Cross-site request forgery)是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。简单来讲,CSRF 攻击就是黑客利用了用户的登录状态,并通过第三方的站点来做一些坏事blog.csdn.net/ihtml5/arti…

注入攻击 SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息 除了sql注入,也可以实现删除服务器文件式注入

SSRF SSRF(service side request forgery)为服务器请求伪造,是一种由攻击者形成服务器端发起的 安全漏洞 有些web网站会提供从其他服务器上传数据的功能,会使用用户指定的url获取数据。由于对远程的url没有进行严格的过滤,所以攻击者可以通过该漏洞控制该web网站作为代理服务器攻击远程服务器或者该web的本地服务器。

DDos www.cloudflare-cn.com/learning/dd…

防御篇

XSS

image.png 如果要用DOMParser生成Dom,要对string进行转译,svg文件扫描,尽量不要让用户进行自定义跳转行为,扫描一切可以插入url的标签。

CSP内容安全策略.

image.png

image.png 设置js脚本只能同源

CSRF-ifame攻击 相应头部添加,X-Frame-Options: DENY/SAMEORIGIN 前者当前页面不能作为iframe加载,后者必须是同源。 samesite机制

注入

image.png

Regex DoS 开发人员使用了正则表达式来对用户输入的数据进行有效性校验, 当编写校验的正则表达式存在缺陷或者不严谨时, 攻击者可以构造特殊的字符串来大量消耗服务器的系统资源,造成服务器的服务中断或停止。

image.png

DDos

image.png

HTTPS

HTTPS是什么?加密原理和证书。SSL/TLS握手过程 什么是HSTS,为什么要使用它?

DNS劫持 使用 SRI 解决 CDN 劫持

补充 “left-pad 库”事件 left-pad 是一个简单的程序,它可以用某些字符(通常是 0 或空格),来“填充”左侧的文本值,直到它达到指定的大小为止。这个函数主要用于格式化文本输出,使其更容易阅读。实现很简单;在这一事件发生时,该函数只有 11 行简单的 Java 代码。然而,有成千上万的开发人员在他们的代码中包含了这个库,他们中的许多人在不知情的情况下包含了一个包含 left-pad 的不同库。 这一事件始于一个名为 npm 的流行 Java 库管理工具中取消了 left-pad 库。当时,所有依赖 left-pad 的项目都崩溃了。所有依赖于依赖 left-pad 的项目的那些项目也都崩溃了。对于 Java 社区来说,这是一个巨大的麻烦,也让许多业余爱好者和公司暂时停止了开发。 从安全角度来看是这样的:如果 left-pad 的维护者没有取消发布库,而是增加一个这样“功能”:将 left-pad 的填充信息记录发送到他们控制的服务器上,或者更糟糕的是,如果是试图安装一些更全面的监控恶意软件呢?如果库只有一个小小的 Bug,可以被聪明的黑客加以利用,那会不会有那么恶意呢? 因为有那么多人在不知情的情况下依赖于代码,这种漏洞利用很容易被下游开发者忽视。这种相互依存的软件网络是软件生态系统日益复杂的一种方式,它放大了小漏洞的威力。

eslint-scope事件 共享+安全,ESLint黑客入侵事件剖析

event-stream事件 吃瓜群众带你了解NMP包event-stream被植入比特币后门的来龙去脉

个人总结

web安全也是非常大的一环,而且其实是必须去掌握的,不然你的代码不考虑安全问题始终都是玩具