简而言之,我使用eval动态调用用于验证客户端 cookie 的函数(所有函数前面的名称相同,最后一位不同)。
const cookie_names = ['cookiename_1', 'cookiename_2'];
exports.validateCookies = (req, res, next) => {
const cookie_types = filterUnknownCookies(Object.keys(req.cookies));
for(let cookie of cookie_types){
res.locals[cookie] = eval(`validateCookie${cookie}('${req.cookies[cookie]}')`);
}
next();
}
const filterUnknownCookies = (cookie_arr) => {
cookie_arr = cookie_arr.filter(name => cookie_names.findIndex( validnames => validnames === name) + 1);
return cookie_arr;
}
因为我知道使用 eval 函数可能很危险,所以我对有效的 cookie 名称进行了硬编码,并过滤了数组中与它们不匹配的任何内容。所以问题是:从数组中过滤掉任何不需要的字符串(名称)是否足够安全以对抗 eval 的可利用性?预先感谢🧡🧡
MMMHUHU
尚方宝剑之说
相关分类