当前位置: 首页 > 后端技术 > Node.js

说说大前端网络安全

时间:2023-04-03 21:05:04 Node.js

原文链接:https://juejin.im/post/5e84b14151882573be11b795对于前端童鞋来说,网络安全多半是听过,没听过。如今,在前端如火如荼的时代,大部分东西都越来越成熟,随时可用。云服务、框架等已经帮我们做了安全防范。我们不需要太在意前端的网络安全。作为一名前端爱好者,最近Review了这部分知识,做一个简单的总结,一路呈现给评委们,请大家注意查收。XSS攻击Cross-SiteScripting(跨站脚本攻击)简称XSS,是一种代码注入攻击。攻击者在目标网站上注入恶意脚本以在用户的??浏览器上运行。利用这些恶意脚本,攻击者可以获得Cookies、SessionID等用户敏感信息,从而危及数据安全。根据攻击来源,XSS攻击可分为存储型、反射型和DOM型三种。它可以节省其他用户查看帖子或评论的时间。服务器返回恶意代码,拼接到客户端页面。恶意代码可能会通过自身执行或用户点击执行的方式弹出广告或获取cookie等用户隐私信息,并向攻击者数据库报告。1.2反射攻击反射攻击主要发生在带诱导链接的按钮邮件等,攻击者在某些链接的参数中加入恶意代码,诱导用户点击。用户通过点击将请求参数传递给服务器。服务器获取参数并将它们连接起来。为客户端执行恶意代码,冒充用户进行权限操作或窃取用户cookie等个人隐私信息,并上报给攻击者数据库。1.3DOM攻击攻击者构造一个包含恶意代码的特殊URL。用户打开带有恶意代码的URL。用户浏览器收到响应后解析并执行,前端JavaScript将URL中的恶意代码取出并执行。恶意代码窃取用户数据并发送到攻击者网站,或冒充用户调用目标网站的接口执行攻击者指定的操作。DOM型和反射型都是通过诱导用户点击链接来执行的,都是暂时的,但是反射型属于服务端的安全漏洞,DOM型属于客户端的安全漏洞2.如何实现为了防止对客户端输入的内容进行xss攻击,对用户进行安全字符转义,服务端对提交的内容进行安全转义。服务端渲染启用模板引擎自带的HTML转义功能。避免内联事件,尽量不要使用onLoad="onload('{{data}}')",onClick="go('{{action}}')"来拼接内联事件。在JavaScript中通过.addEventlistener()进行事件绑定更安全。避免拼接HTML。在前端使用拼接HTML的方法是很危险的。如果框架允许,使用createElement、setAttribute等方法来实现。或者使用更成熟的渲染框架,比如Vue/React等,时刻保持警惕。当插入位置是DOM属性、链接等时,一定要打起精神,严防死守。通过CSP、输入长度配置、接口安全措施等方式,增加攻击难度,降低攻击后果。主动检测和发现,使用XSS攻击字符串和自动扫描工具来发现潜在的XSS漏洞。尽量避免第三方跨域向服务器提交内容HTTP-onlyCookie:禁止JavaScript读取某些敏感cookie,攻击者完成XSS注入后无法窃取此cookie。Captcha:防止脚本冒充用户提交危险操作。CSRF攻击CSRF(Cross-siterequestforgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,并在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站获取的注册凭证绕过后台用户验证,达到冒充用户对被攻击网站进行操作的目的。1.1主动攻击受害人访问a.com,在浏览器中留下a.com的登录状态。攻击者诱导受害者访问第三方网站b.com。第三方网站b.com有访问a.com界面的恶意代码(删除/添加/修改等),当受害者点击b.com时,b.com拿走a.com的登录凭证冒充受害用户对a.com进行恶意操作。1.2被动攻击攻击者在a.com发布带有恶意链接的帖子或评论(向a.com提交诱导img/form/a标签并进行增删改)当其他登录状态的受害者点击该网站的恶意链接时评论冒充受害者登录凭证发起攻击CSRF主要是冒用受害者的登录凭证发起恶意增删改查,不会窃取受害者的隐私信息。二、如何防止CSRF攻击1、禁止第三方网站获取cookie,如设置Chrome的SameSite属性。缺点:试用阶段SameSite兼容性不是很好理想2.服务端通过RefererHeader和OriginHeader进行同源验证缺点1:攻击者可以部分修改或隐藏referer缺点2:部分浏览器或操作会丢失originheader,如302重定向缺点3:HTTPS页面跳转到HTTP页面,所有浏览器Referer丢失了。劣势四:无法识别其他被动攻击:一些低版本的浏览器对于origin和referer不是很稳定,各种意想不到的结果极不稳定。3、使用token进行身份验证,三方跨站请求无法获取header中的token后,本站接口会在请求前在请求头中添加token进行身份认证,三方请求将不携带令牌。缺点一:token认证给服务器带来很大压力,所以小徐专门开发了一个服务器用于token认证,消耗服务器成本,增加请求时间缺点二:对于页面ajax、fetch等异步请求以外的其他请求,比如表单提交,链接等,需要一个一个添加token,不能添加一个统一的token。一些疏漏相对来说,token认证是一种比较好的保护措施4.使用双cookie进行认证,在每个请求参数中添加scrfCookie='随机数'防御参数,将防御参数值混入cookie中,服务端比较防御cookieparameterinthecookieintherequestheaderwiththeparameterincludedintherequestparameter.缺点:前后代码分离,后端接口和前端可能来源不同,比如前端www.xx.com,后端接口是api.xx.com。如果前端要获取后端接口域下的cookie,必须把cookie放在xx.com下,保证所有子域都可以获取到。这会增加xss攻击而不是DOS攻击的风险。通过攻击网站的每一个链接,使整个流程无法运行,从而达到瘫痪服务的目的。最常见的是发送大量请求导致服务器过载和宕机1.预防措施扩展服务器【有钱公司玩法】进行实时监控,屏蔽一些恶意和密集请求的IP段增加接口验证,以及对于一些敏感的接口,进行单独的IP访问次数限制,缓存静态资源,隔离源文件访问。比如CDN加速页面劫持。攻击者通过请求的数据传输过程修改数据,或者对网站域名进行泛域名解析,实现网站重定向和网站广告投放。等1.1跳转劫持,通过泛域名解析等方式,将用户访问的页面发送到其他网站进行恶意竞争,或利用某些钓鱼网站侵害用户个人利益和其他网站的名誉权。1.2注入劫持,针对网站拦截修改请求的资源,添加恶意代码或广告等。2.如何防止网络劫持最有效最暴力的方法直接用HTTPS替代,建立漏洞监控的安全通道,并根据实际情况进行调整