簡體   English   中英

解密node / express.js路由內的數據

[英]Decrypt data within a node/express.js Route

我有一個應用程序,在將userID發送到客戶端之前,我試圖對其進行加密。 這樣做的原因是因為我將EJS用作誘人的引擎,這意味着我在使用userID地方有如下代碼:

<body ng-init="getAllPosts('<%= user._id' %>)"></body>

這樣做的問題是,當有人在任何瀏覽器上執行“檢查元素”時,他們可以清楚地看到其userID 例如,請參見下圖:

在此處輸入圖片說明

要解決此問題,我在發送給客戶端(例如s0)之前開始加密我的userID

app.get('/profile',isLoggedIn,function(req, res) {

     var user = req.user;
     var uid = encrypt(JSON.stringify(user._id));

     res.render('profile.ejs', {
        userID: uid
    }); 
});

如下圖所示,此操作成功加密了ID:

在此處輸入圖片說明

問題:

問題是我可以成功解密ID,但是即使解密ID也無法從數據庫獲取數據。 我嘗試將已解密的ID粘貼粘貼到我的路由中,從而成功獲取了數據。 就像它不會從變量中讀取解密的ID一樣,但是當我自己復制粘貼它時就可以使用。

這是代碼:

app.get('/user/posts/:id', isLoggedIn, function(req, res){

        var x = decrypt(req.params.id)

        Posts.findOne({userID:x}, function(err, post){
            if(err)
                console.log(err);
            else if(post){
                res.json(post);
            } else if(!post){
                res.json({message: "No Posts document exists for this user"});
            }    
        });
      });

需要注意的是變量x包含解密的ID,是文本形式!

為了獲得更多信息,這里是我的加密和解密功能:

//Encrypt Data
 function encrypt(text){

  var cipher =  crypto.createCipher(algorithm,key)
  var crypted = cipher.update(text, 'utf8', 'base64')
  crypted += cipher.final('base64');

  console.log("CRYPTED " + crypted);
  return crypted;
 }

//Decrypt Data
function decrypt(text){

 var decipher = crypto.createDecipher(algorithm,key)
 var dec = decipher.update(text, 'base64', 'utf8')
 dec += decipher.final('utf8');

 console.log("DECRYPTED " + dec);
 return dec;
}

解密功能輸出:

在此處輸入圖片說明

發現了問題,問題在於我是個白痴。

我要做的就是修改以下內容:

Posts.findOne({userID:x})

Posts.findOne({userID: JSON.parse(x)})

以上解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM