欢迎您访问宜州一中 您可以登录 或注册
 
收藏本站 简繁转换
一方天地育桃李,三尺讲台竞风采             宜州区一中在宜州博物馆举行“人杰地灵读宜州”故事分享会             宜州一中举行2024届中考百日誓师大会             龙腾启新 筑梦未来 ——宜州区第一中学欢庆2024年元旦文艺晚会             走进嘉联丝厂 畅享研学之乐 ——宜州区第一中学开展研学实践活动             2023年河池市宜州区第一中学/宜州区红卫学校家庭经济困难大学新生入学资助项目发放名册(第二批)             展科技志向,圆飞行梦想 ——宜州区一中2025届举行无人机大赛             2023年河池市宜州区第一中学\红卫学校 家庭经济困难大学新生入学资助项目发放名册(第一批)             法制进校园 以法促成长 ——宜州一中举行“三姐护蕾”法治进校园活动             “英”你精彩,“语”你同行 —— 我校2025届举行英文风采大赛            

DoraCMS

您现在的位置是:首页>文档内容页

文档详情

DoraCMS v.1.1.1 权限bug解析

doramart 2024-05-05 14:06:15 技术文档235415
感谢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提供了下面的处理方法,对小写的路由做容错处理,代码如下:


bug修复.PNG


在这里这样处理是可以的,但是考虑到不光是在后台菜单访问入口,还有每个数据请求接口都有类似问题,这


样处理就过于繁琐了,于是想到了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.

PropertyDescriptionDefaultAvailability
caseSensitiveEnable case sensitivity.Disabled by default, treating “/Foo” and “/foo” as the same.
mergeParamsPreserve the req.params values from the parent router. If the parent and the child have conflicting param names, the child’s value take precedence.false4.5.0+
strictEnable 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;

问题就可以解决了,个人觉得好像没必要适配大小写,因为路由是不需要手动输入的,接口也不提倡手动修改,不然情况就比较复杂了。

文章评论

取消回复
登录 参与评论

评论列表(