富文本安全

admin 2024年4月4日15:26:51评论2 views字数 1179阅读3分55秒阅读模式

昨天阿里安全实习生面试问到了这个,感觉回答的不是很好,最后挂了,今天总结一下。

富文本安全主要分为文件上传防御和xss过滤。

文件上传主要是用来防御上传webshell。只要文件上传到不会被解析的目录里面去就没有太大问题了,但是记住是所有的文件,不要看到是图片等静态文件就可以随便存放了,因为一般后端检测文件类型都是通过拓展名或者文件头进行的,很容易绕过的。

同时上传的文件最好使用和主域名隔离的域名,比如部分网站设置了csp头,只运行本域名下js,但是文件上传的时候可以直接上传到本域名下任意js,导致csp失效。

xss过滤是最重要的,也是最难搞的。面试的时候那人问我怎么过滤,我就说过滤危险的标签和属性,但是他却说我有很多的办法啊能绕过的,我今天才反应过来,应该是我没有说清楚,我不是直接通过字符串匹配过滤的啊,而是先解析dom,然后过滤的啊~~

具体过滤的时候一般使用白名单

  • 解析html,得到所有的html标签和属性。对于不在白名单中的标签,直接删除或者转义。属性值里面的特殊字符要进行转义,防止跃出。比如<img width="100">如果我修改100100" onerror=alert(1)"就变成了<img width="100" onerror=alert(1)"">了。
  • 对于部分引入外链的属性,如src,href等判断链接是否合法,过滤<a href=javascript:alert(1)>的情况,而且最好是只能使用指定域名下的外链。
  • 嵌入falsh的embed标签设置allowscriptaccess=neverallownetworking=none

allowScriptAccess用来控制flash与html的通讯,可选的值为:

always //对与html的通讯也就是执行javascript不做任何限制

sameDomain //只允许来自于本域的flash与html通讯,这是默认值

never //绝对禁止flash与页面的通讯

allowNetworking //用来控制flash与外部的网络通讯,可选的值为:

all //允许使用所有的网络通讯,也是默认值

internal //flash不能与浏览器通讯如navigateToURL,但是可以调用其他的API

none //禁止任何的网络通讯

这里有一个python的富文本过滤器,基本思路和上面的一样,但是实现的还是有些太简单粗暴,比如富文本时候很多地方都会用到style属性,如果允许这个属性,那就可能通过expression等进行xss,还需要更加细致的去过滤。

参考 http://security.tencent.com/index.php/blog/msg/53

http://barretlee.com/blog/2014/05/xss-snippts.html

- source:strcpy.me

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月4日15:26:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   富文本安全https://cn-sec.com/archives/2631505.html

发表评论

匿名网友 填写信息