前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >xss防御

xss防御

作者头像
听城
发布2018-04-27 17:08:10
1.6K0
发布2018-04-27 17:08:10
举报
文章被收录于专栏:杂七杂八杂七杂八杂七杂八

XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。

xss攻击分类

分类

反射型:经过后端,不经过数据库 存储型:经过后端,经过数据库

xss攻击注入点

攻击注入点

xss攻击防御

  • 浏览器防御。现代浏览器具有xss防御机制,防御范围有限。防御类型为反射型xss,即url参数再次出现在页面中,浏览器会进行拦截。防御内容为HTML节点内容与HTML属性。是一种非常有限的防御机制,不可以依赖。
  • HTML节点内容转义。 转义内容为< >。将尖括号转义为&lt,&gt
var escapeHtml = function(str){
      str = str.replace(/</g,'&lt;');
      str = str.replace(/>/g,'&gt;');
      return str;
}
  • HTML属性攻击防御。 用户输入的数据出现在了html属性上,而由于里面有引号,将属性提前关闭了,产生了其他属性,而内容中可能存在脚本。只需要将引号转义。
var escapeProperty = function(str){
      if(!str) return ' ';
      str = str.replace(/&/g, '&amp;');
      str = str.replace(/"/g,'&quto;');
      str = str.replace(/'/g,'&#39;');
      return str;
}

可将上述两种合为一个方法

var escapeHtml = function(str) {
    if(!str) return '';
    str = str.replace(/&/g, '&amp;');
    str = str.replace(/</g, '&lt;');
    str = str.replace(/>/g, '&gt;');
    str = str.replace(/"/g, '&quto;');
    str = str.replace(/'/g, '&#39;');
    // str = str.replace(/ /g, '&#32;');
    return str;
};
  • js代码防御 js中会插入来自后台或者用户输入的数据,但是这些数据可能会突破引号边界,产生新的语句。解决方案1:将引号转义,2:jsonencode。
var escapeForJs = function(str) {
    if(!str) return '';
    str = str.replace(/\\/g, '\\\\');
    str = str.replace(/"/g, '\\"');
    return str;
};
JSON.stringify(str)//建议使用这种方法
  • 富文本防御 使用黑名单防御。不建议使用 按白名单保留部分标签和属性。将html解析成树状结构,根据dom树遍历,是否为允许属性。库Xss,可以实现将html解析成树状结构。
var xssFilter = function(html){
    if(!html) return '';
    var xss = require('xss');
    var ret = xss(html, {
        whiteList:{
            img: ['src'],
            a: ['href'],
            font: ['size', 'color']
        },
        onIgnoreTag: function(){
            return '';
        }
    });
    console.log(html, ret);
    return ret;
};
  • CSP(Content Security Policy)内容安全策略 CSP指的是内容安全策略,为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念。这将引入一些相当严格的策略,会使扩展程序在默认情况下更加安全,开发者可以创建并强制应用一些规则,管理网站允许加载的内容。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.06.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • xss攻击分类
  • xss攻击注入点
  • xss攻击防御
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档