常见前端安全
1.跨站脚本攻击,俗称XSS(cross )
什么是XSS?
xss是恶意用户将脚本植入到页面中执行而获取相应敏感信息。也就是会在web页面某个节点(文本节点、属性节点)运行。
XSS攻击的危害包括:
1.盗用账号等敏感信息
2.非法转账等
XSS攻击类型:
1.反射型。通过一个伪装的url链接进行攻击,利用url的search参数将脚本伪装,当页面获取链接参数进行攻击
2.储存型。通过表单输入,储存数据库,再在页面读取数据,回显执行脚本进行攻击。
3.富文本。
注入点:
1.html节点内容
评价输入框输入存储DB后读取
<div> {content} </div>
<div> <script></script></div>
2.html属性
URL传入src,scr提前关闭引号
<img src='#{img}' />
<img src="1" onerror="alert(1)" />
3.脚本
提前关闭引号
<script>
var data = '#{data}'
var data = 'hello';alert(0)''
</script>
4.富文本编辑
本质是一段复杂的html,提交
XSS防御
1.针对反射型
2.针对html的脚本注入
//html节点 防御
//对于尖括号“<” ">" 进行转义
//转义时机: 在存入数据库前 或 在读取DB展示前转义
function escapeHtml(str){
str = str.replace(/&/g, '&'); //这句在先,不然会把<的&符号也转了
str = str.replace(/</g, '<');
str = str.replace(/>/g, '>');
return str
}
//html属性 防御
//对于引号 “"” 进行转义
function escapeHtmlProp(str){
if(!str) return ''
str = str.replace(/"/g, '&quto;');
str = str.replace(/'/g, ''');
str = str.replace(/ /g, ' ');
return str
}
//以上两种防御方法可以合并为同一个函数方法
3.针对JS的脚本注入
直接用JSON.stringify(str)
4.针对富文本的脚本注入
1)白名单
var xssfilter = function (html){
if(!html) return;
var cheerio = require('cheerio');
var $ = cheerio.load(html);
//设置白名单
var whiteList = {
'img': ['src','title']
}
$('*').each(function(index,el){
if(!whiteList[el.name]){
$(el).remove();
return;
}
for( var attr in el.attribs) {
if(whiteList[el.name].indexOf(attr) === -1){
$(el).attr(attr,null)
}
}
})
return html
}
2)黑名单
2.跨站请求伪造,俗称CSRF
1.攻击原理
用户登录正常A网站进行正常操作,并且确认身份,保存认证信息。然后恶意网站B页面向A网站发起请求(带上A网站的认证身份),以达到在A网站执行恶意操作。
2.危害
利用用户登录态 盗取用户资金
用户不知情 冒充用户发帖
完成业务请求 损坏网站声誉
3.防御
从关键点切入:恶意网站向认证网站发请求,带上认证信息。
1.禁止第三方网站带cookie。
后端设置samesite值
2.不访问认证网站
在前端页面加入验证信息
验证码
token

浙公网安备 33010602011771号