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

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

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

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

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

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

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