博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AngularJS 中 markdown filter 带来的 XSS
阅读量:6292 次
发布时间:2019-06-22

本文共 1056 字,大约阅读时间需要 3 分钟。

hot3.png

在 GitHub 上引用了一个哥们为 AngularJS 写的 markdown filter,在后台编辑的时候手痒试了下 XSS,果然弹出框了。

本来想直接在 GitHub 上换一套插件试试,结果研究了一下解决了这个问题。

AngularJS 中如果当前 module 引用了 ngSanitize,那么在页面中 ng-bind-html 默认是会进行 $sanitize 的过滤的,可以过滤掉 script 这种比较敏感的标签。

另外一种情况是,引用了 ngSanitize,但是在 controller 里面 $sce.trustAsHtml 函数返回,结果就是来什么执行什么,完全信任传入的 HTML 代码。

最安全的情况是不使用 ng-bind-html 而是使用 ng-bind,自动把符号都 HTML 编码了。但是显然 Markdown 从一开始就是拒绝的。

他的项目中 filter 是这么设计的,完全信任了 filter 获取到的 HTML 内容,导致 XSS 代码赤裸裸地被执行了。

.filter('markdown', ['$sce', 'markdown', function ($sce, markdown) {        return function (text) {            if(text == null) text = '';            var html = markdown.makeHtml(text);            return $sce.trustAsHtml(html);        };    }])

结果我改成,然后在 angular.module('markdown', ['ngSanitize']) 这里引入 ngSanitize,就可以让 AngularJS 自动的滤除 XSS 啦。

.filter('markdown', ['markdown', function (markdown) {        return function (text) {            if(text == null) text = '';            var html = markdown.makeHtml(text);            return html;        };    }])

转载于:https://my.oschina.net/shinedev/blog/483104

你可能感兴趣的文章
Android线程处理
查看>>
更新 TeX Live 软件包
查看>>
Exp3 免杀原理与实践 Week5 - 20165201
查看>>
嵌套查询
查看>>
关不掉.vbs
查看>>
算法11---红黑树的实现
查看>>
本地系统服务例程:Nt和Zw系列函数
查看>>
mysql 案例 ~ 常见案例汇总
查看>>
jmeter if 控制器
查看>>
Spring定时器时间设置规则
查看>>
算法のLowLow三人行
查看>>
appcompat_v7出现红叉解决方法
查看>>
javascript事件之:jQuery事件接口概述
查看>>
概率统计与机器学习:常见分布性质总结
查看>>
wcf部署到服务器上后,取不出oralcle数据
查看>>
嵌入式LINUX入门到实践(二)
查看>>
Linux的三种特殊权限
查看>>
PKU 2068 Nim
查看>>
测试基础-1.1
查看>>
15、响应式布局和BootStrap 全局CSS样式知识点总结-part2
查看>>