Node.js NoSQL操作

2021-06-01 10:04 更新

1.10.1 【必須】校驗(yàn)參數(shù)值類型

  • 將HTTP參數(shù)值代入NoSQL操作前,應(yīng)校驗(yàn)類型。如非功能需要,禁止對(duì)象(Object)類型傳入。

// bad:執(zhí)行NOSQL操作前,未作任何判斷
app.post("/", (req, res) => {
    db.users.find({ username: req.body.username, password: req.body.password }, (err, users) => {
    // **TODO:** handle the rest
    });
});


// good:在進(jìn)入nosql前先判斷`__USER_INPUT__`是否為字符串。
app.post("/", (req, res) => {
    if (req.body.username && typeof req.body.username !== "string") {
        return new Error("username must be a string");
    }
    if (req.body.password && typeof req.body.password !== "string") {
        return new Error("password must be a string");
    }
    db.users.find({ username: req.body.username, password: req.body.password }, (err, users) => {
        // **TODO:** handle the rest
    });
});

為什么要這么做?

JavaScript中,從http或socket接收的數(shù)據(jù)可能不是單純的字符串,而是被黑客精心構(gòu)造的對(duì)象(Object)。在本例中:

- 期望接收的POST數(shù)據(jù):username=foo&password=bar
- 期望的等價(jià)條件查詢sql語(yǔ)句:select * from users where username = 'foo' and password = 'bar'
- 黑客的精心構(gòu)造的攻擊POST數(shù)據(jù):username[$ne]=null&password[$ne]=null或JSON格式:{"username": {"$ne": null},"password": {"$ne": null}}
- 黑客篡改后的等價(jià)條件查詢sql語(yǔ)句:select * from users where username != null & password != null
- 黑客攻擊結(jié)果:繞過(guò)正常邏輯,在不知道他人的username/password的情況登錄他人賬號(hào)。

1.10.2 【必須】NoSQL操作前,應(yīng)校驗(yàn)權(quán)限/角色

  • 執(zhí)行NoSQL增、刪、改、查邏輯前,應(yīng)校驗(yàn)權(quán)限

// 使用express、mongodb(mongoose)實(shí)現(xiàn)的刪除文章demo
// bad:在刪除文章前未做權(quán)限校驗(yàn)
app.post("/deleteArticle", (req, res) => {
    db.articles.deleteOne({ article_id: req.body.article_id }, (err, users) => {
        // TODO: handle the rest
    });
});


// good:進(jìn)入nosql語(yǔ)句前先進(jìn)行權(quán)限校驗(yàn)
app.post("/deleteArticle", (req, res) => {
    checkPriviledge(ctx.uin, req.body.article_id);
    db.articles.deleteOne({ article_id: req.body.article_id }, (err, users) => {
        // TODO: handle the rest
    });
});

關(guān)聯(lián)漏洞:高風(fēng)險(xiǎn) - 越權(quán)操作,高風(fēng)險(xiǎn) - NoSQL注入

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)