第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

我在服務(wù)器中安全地使用 eval() 嗎?

我在服務(wù)器中安全地使用 eval() 嗎?

拉莫斯之舞 2023-10-14 16:00:30
簡(jiǎn)而言之,我使用eval動(dòng)態(tài)調(diào)用用于驗(yàn)證客戶端 cookie 的函數(shù)(所有函數(shù)前面的名稱相同,最后一位不同)。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;}因?yàn)槲抑朗褂?eval 函數(shù)可能很危險(xiǎn),所以我對(duì)有效的 cookie 名稱進(jìn)行了硬編碼,并過(guò)濾了數(shù)組中與它們不匹配的任何內(nèi)容。所以問(wèn)題是:從數(shù)組中過(guò)濾掉任何不需要的字符串(名稱)是否足夠安全以對(duì)抗 eval 的可利用性?預(yù)先感謝????
查看完整描述

2 回答

?
MMMHUHU

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊

所以問(wèn)題是:從數(shù)組中過(guò)濾掉任何不需要的字符串(名稱)是否足夠安全以對(duì)抗 eval 的可利用性?


不,這不安全。事實(shí)上,它基本上沒(méi)有采取任何措施來(lái)保護(hù)您,因?yàn)槟试S的 cookie 名稱仍然完全不受保護(hù)和消毒。您擁有的內(nèi)容可能不安全,因?yàn)閻阂饪蛻舳丝梢栽谠?cookie 中放入他們想要的任何內(nèi)容,而您“希望”他們找不到超出您擁有的字符串分隔符的內(nèi)容。但是,可以通過(guò)終止字符串然后添加函數(shù)調(diào)用來(lái)打破該字符串分隔符。這可能允許攻擊者在您的服務(wù)器上執(zhí)行任意代碼。


您唯一應(yīng)該使用eval()的是來(lái)自您自己的服務(wù)器端代碼的可信字符串或來(lái)自外部的完全凈化的字符串。但是,幾乎總是,您不需要,eval()因?yàn)檫€有另一種更安全的編碼方式。


eval()在這里,您根本不需要使用。您可以為要調(diào)用的合法函數(shù)創(chuàng)建一個(gè)查找表,然后將函數(shù)直接傳遞給它:


try {

    res.locals[cookie] = validateCookie[cookie](req.cookies[cookie]);

} catch(e) {

    // either invalid cookie or exception in the function

    // handle that here

}

當(dāng)然,您的validateCookie[cookie]()函數(shù)還必須進(jìn)行防御性編碼,才能知道它可能會(huì)傳遞任何內(nèi)容。您沒(méi)有向我們展示該函數(shù)的代碼以便能夠?qū)ζ溥M(jìn)行進(jìn)一步評(píng)論。


在本例中,validateCookie是一個(gè)查找表,其中包含有效cookie名稱及其相應(yīng)的函數(shù):


 // cookie processing lookup table

 const validateCookie = {

      cookieName1: validateCookieName1,

      cookieName2: validateCookieName2

 };

像這樣的查找表通常是您避免嘗試創(chuàng)建函數(shù)名稱和字符串并用于eval()調(diào)用它的方法。這還增加了安全功能,即此代碼無(wú)法調(diào)用查找表中不存在的任何函數(shù)。


查看完整回答
反對(duì) 回復(fù) 2023-10-14
?
尚方寶劍之說(shuō)

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊

不,代碼不安全,不是因?yàn)樗鼪](méi)有清理驗(yàn)證方法的名稱,而是因?yàn)樗跀U(kuò)展字符串模板文字時(shí)將上傳的文本評(píng)估為 JavaScript:

 `... ${req.cookies[cookie]} ...`

我剛剛使用精心設(shè)計(jì)的字符串值測(cè)試并注入了代碼req.cookies[cookie],我不會(huì)在此處發(fā)布該值。

在不擴(kuò)展數(shù)據(jù)字符串的情況下評(píng)估驗(yàn)證調(diào)用可能會(huì)稍微安全一些,如下所示

`validateCookie${cookie}` + "(req.cookies[cookie])"

這會(huì)將上傳的文本傳遞到驗(yàn)證例程,而無(wú)需將其作為代碼進(jìn)行評(píng)估,但完全避免的安全性eval保持不變。eval通過(guò)使用以函數(shù)名稱為關(guān)鍵字的驗(yàn)證函數(shù)對(duì)象值的查找表,可以輕松地避免這種情況。


查看完整回答
反對(duì) 回復(fù) 2023-10-14
  • 2 回答
  • 0 關(guān)注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)