XSSXSS全称CrossSiteScripting(跨站脚本),所以我们可以简称为CSS。让我们从CSS开始,让我们先谈谈选择器。是不是听起来很奇怪,为了区别于CascadingStyleSheets,我们选择XSS作为它的简称。XSS攻击可以获取页面数据、cookies,劫持前端逻辑,发送请求,窃取任意网站数据,用户信息,欺骗用户,是我们需要特别注意的前端安全问题。我在腾讯云上搭建了一个网站,专门用来承接各种攻击。欢迎来玩。XSS攻击可以获取页面数据、cookies,劫持前端逻辑,发送请求,窃取任意网站数据,用户信息,欺骗用户,是我们需要特别注意的前端安全问题。XSS攻击分为反射型XSS攻击,直接通过URL注入方式注入,存储型XSS攻击是先存入DB再读取。XSS攻击的可能来源可以通过动态HTML节点内容、HTML属性、Javascript和富文本来攻击页面。浏览器自带防御措施X-XSS-Protection,0http://123.207.46.233/?from=http://123.207.46.233/?from=111";alert(1);"当请求时,XSS代码出现在URL中,作为输入提交给服务器,服务器解析后响应,XSS代码伴随浏览器发送回浏览器,最后浏览器解析并执行XSS代码。这个过程就像一个反射,所以称为反射型XSS。localhost:3000/?xss=浏览器防御非常有限,只能访问反射攻击,无法防御富文本攻击。HTML内容和属性转换函数html_encode(str){if(!str){returnstr;}returnstr.replace(/[<>&"']/g,(all)=>{return{'<':'<','>':'>','&':'&','"':'"'"'":'''}[all]});}但是用上面的方法并不能解决所有的问题,如果把js的输入作为js变量,我们varescapeForJs=function(str){if(!str){return''}str=str.replace(/\/g,'\\\\');str=str.replace(/"/g,'\\"');returnstr;}使用黑名单的富文本防御风险特别大,只能用白名单来过滤。首先要知道标签是否合法,其次要检查标签上的属性是否合法。varcheerio=require('cheerio');varxssF??ilter=function(html){if(!html){返回'';}var$=cheerio.load(html);varwhiteList={'img':['src'],'font':['color','size'],'a':['href']}$('*').each(函数(索引,elem){letname=elem.name;if(!whiteList[name]){$(elem).remove();return;}for(varattrinelem.attribs){if(whiteList[name].indexOf('attr')===-1){$(elem).attr(attr,null);}}})}介绍一个神器xss模块,varxss=require('xss'),满足所有你对XSS的幻想。CSPContentSecurityPolicy内容安全策略,用于指定可以执行哪些内容。例如:Content-Security-Policy:default-src'self'//只允许同域的脚本执行Cookie特性cookie用于前端数据存储,后端通过httpheader设置,并且请求通过http头传给后端,前端可以读写,遵守同源策略(协议、域名、端口都一致)。域名过期路径http-onlysecure(https)存储个性化设置存储用户未登录时唯一标识存储登录用户凭证存储其他业务数据用户ID+签名sessionIdcookieID签名防篡改私改http-onlyCSRF攻击跨站请求伪造,跨站请求伪造。用户登录A网站,在A网站确认身份,B网站利用用户的登录状态向A网站(以A网站的身份)发起请求,在用户不知情的情况下完成业务请求。禁用第三方cookie,通过引用者访问同一站点