[[[[[[@snoopy](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy)](/user/snoopy) 刚拜读完你的《CSRF攻击实例,注入cnodejs.org官网》,你太牛了!我们都用可视化的编辑器,支持图文并茂的格式,该怎样彻底杜绝攻击呢?
14 回复
@snoopy 如果客户端允许递交html格式的代码(大多数可视化编辑器都是这样),但又要杜绝攻击, 是不是只要过滤掉<script>, javascript: , onclick, onload, onXXX 等事件就行了. 我看了你的文章后的启发,就是只要切断所有直接和间接执行脚本的可能路径, 就能防范攻击了. 具体的执行路径, 除了上面写的 <script>标签,和所有onXXX事件, 还有哪些?
防止注入永远不要用黑名单,用白名单,明确我们支持的几种标签,比如我们只支持img,a,p这3种标签,其他的统统干掉。事件是一定要全部屏蔽掉的,一个都不剩,另外再加上将双引号,单引号,左右尖括号都要去除。基本可以防止大部分注入攻击了。但是有些攻击防不胜防的,可能还需要根据你网站的业务来做针对性的措施。比如url注入,或者利用flash,utf-8编码注入等等。当然就算你做了白名单,如果做的不够完善,还是有可能被攻击者有机可乘的。
@snoopy 我注意到 node-club源码里只对标题进行了净化(sanitize) 和防xss处理:
var title = sanitize(req.body.title).trim(); title = sanitize(title).xss();
并没有对帖子或回复的内容 (req.body.t_content) 进行防范操作, 不知为何?