DoraCMS v.1.1.1 权限bug解析
感谢github 的@monday-ch 提出这个bug,在权限校验中,如果手动修改请求路径大小写,会发现没有权限的页面也可以访问到,这是个很严重的bug,原因在于校验不够严谨
感谢github 的@monday-ch 提出这个bug,在权限校验中,如果手动修改请求路径大小写,会发现没有权限的页面也可以访问到,这是个很严重的bug,原因在于校验不够严谨,相关代码如下:
//模块管理页面 router.get('/manage/:targetPage', function(req, res, next) { var currentPage = req.params.targetPage; if(settings[currentPage]){ if(!adminFunc.checkAdminPower(req,settings[currentPage][0] + '_view')){ res.render("manage/public/notice", adminFunc.setDataForInfo('danger','对不起,您无权操作 <strong>'+settings[currentPage][1]+'</strong> 模块!')); }else{ next(); } }else{ next(); } });
settings[currentPage] 校验不过,直接next,在admin.js中的路由如下:
//文档列表页面 router.get('/manage/contentList', function(req, res) { res.render('manage/contentList', adminFunc.setPageInfo(req,res,settings.contentList)); });
这里express默认对大小写不做处理,导致了直接请求到对应路由。这里@monday-ch提供了下面的处理方法,对小写的路由做容错处理,代码如下:
在这里这样处理是可以的,但是考虑到不光是在后台菜单访问入口,还有每个数据请求接口都有类似问题,这
样处理就过于繁琐了,于是想到了express 路由的一个属性caseSensitive。api是这样介绍的:
Router([options])
Create a new router as follows:
var router = express.Router([options]);
The optional options
parameter specifies the behavior of the router.
Property | Description | Default | Availability |
---|---|---|---|
caseSensitive | Enable case sensitivity. | Disabled by default, treating “/Foo” and “/foo” as the same. | |
mergeParams | Preserve the req.params values from the parent router. If the parent and the child have conflicting param names, the child’s value take precedence. | false | 4.5.0+ |
strict | Enable strict routing. | Disabled by default, “/foo” and “/foo/” are treated the same by the router. |
caseSensitive属性可以设置路由的大小写严格模式,默认为false,于是可以在admin.js中加一句话:
var router = express.Router(); router.caseSensitive = true;
问题就可以解决了,个人觉得好像没必要适配大小写,因为路由是不需要手动输入的,接口也不提倡手动修改,不然情况就比较复杂了。
很赞哦! ( 0
)
相关文章
- nodeJs基础教程系列(8)——流
- nodeJs基础教程系列(9)——CO库
- nodeJs基础教程系列(4)——CommonJS规范
- nodeJs基础教程系列(7)——generator
- [转]让你的 Node.js 应用跑得更快的 10 个技巧
- Node.js API实例——Node.js 控制台
- Node.js 入门
- nodeJs基础教程系列(3)——建立githubs项目
- nodeJs基础教程系列(1)——安装Node.js
- nodeJs基础教程系列(6)——Promise 模式的Q库
- Atom 更为先进的文本代码编辑器 - 由 Github 打造的下一代编程开发利器
- bootstrap 3.3 模态框垂直居中问题