和安全团队的斗智斗勇

Posted by Leo Eatle on 2021-03-16

rpc权限的校验

先从攻击角度看

很多时候的cgi我们需要传入id来获取详情,这个id其实是可以遍历请求的,那么这个id有没有可能获取到其他企业的信息呢?是有可能的

防御角度看

由于大部分rpc接口并不会承担权限校验的职责,这个也是正常的,因为node作为接入层确实是需要接管权限的校验。

有些接口可能会漏掉权限校验,比如当后台返回了id,而前端通过id去查询详情信息的时候,这个时候必要限制只能获取能获取的id的信息

这个策略要不在rpc接口解决,要不在node解决,如果在node解决,可能需要后台提供专门的权限校验接口,来获取这种范围关系。

(此处可想象一个拓扑图)

构造xss请求

先从攻击角度看

好吧也许你确实在前端有去转义字符,但是我照样可以通过花样的构造前端请求来使得注入我的代码

<x onpointerrawupdate=alert('xss')>testxss!

这样一段代码直接输入<textarea>并提交,被转义后是安全的,并放到请求体里面是这样的

data%5B0%5D%5Bcontent_type%5D=1&data%5B0%5D%5Brich_message%5D%5Bmessages%5D%5B0%5D%5Bdata%5D=%26lt%3Bx+onpointerrawupdate%3Dalert('xss')%26gt%3Btestxss!&data%5B0%5D%5Brich_message%5D%5Bmessages%5D%5B0%5D%5Bcontent_type%5D=0&dataid=22&action=edit&_d2st=a4800994

但是前端的转义并不可靠,我们依然可以通过各种工具去修改这里的参数,改为未转义的

这个时候传到node层,并且通过后台接口存入了存储,在前端拿出来渲染展示的时候,就会变成如下效果

从防御角度来看

必须要在node层对前端传入的字符串进行过滤或者转义

尝试过转义的做法,这样虽然在前端可以显示正常,但是在客户端就会显示成转义后的字符

目前采用的是过滤,就是把标签和标签里的属性全都过滤掉,最后留下的字符串只有testxss这一行

当然,在前端也是需要这样去过滤一次的。