rank页的安全问题
引言
之前在一步小心留下的XSS漏洞就讨论过XSS注入的问题, 当时分析了一种情况, 是复用了其他页面传输来的数据, 而这份数据的不可控性, 导致了有心人将数据篡改 进行XSS注入.
Rank页面的实现
但是rank页面与XSS注入又有什么关系呢?
这里, 有一点请大家注意, rank页面中的排序结果来自于LeanCloud中的数据, 本站点是一个由hexo创建的静态站点, 统计功能当然也是依赖于LeanCloud.
本页的主要逻辑如下:
1 | var Counter = AV.Object.extend('Counter'); |
直接使用返回值存在的安全问题
我不知道大家注意到了没有, 我们在前端页面中暴露了LeanCloud
的App ID
和
App Key
, 可以由任何人将数据传递任何数据.
这种情况下, 仅仅是存储数据, 是没有问题的, 但是问题就存在于读取时了, 如果读取到的数据是已经被篡改的, 而后由我们直接渲染到了页面上, 就很可能出现XSS注入的 情况.
解决方案 – (加一层过滤)
如果你去了rank页中, 查看了其中的代码, 就会发现其中有这么一段
1 | // 该map中存储了已知的所有标题 |
上面的代码中, 一个重要的思路就是, 不能信任来自LeanCloud
中的数据, 需要对这一层数据
的有效性进行一次校验, 避免有心人修改数据库.