2016-02-03 120 views
0

現在我已閱讀此Secure node.js restful API 但我需要一些更詳細的說明。保護Node.JS API

目的 撥叫客戶端(JS,角,EJS)到服務器的API(node.js的),但牢固,以至於不能只用鑰匙篡改:發送的值。

情況 我創建特定URI和return res.json();一個app.post({});。現在是這個問題,

控制器採取一個參數說id。現在id = 1是Apple,id = 2是微軟。

我分別返回Apple和Microsoft,但我不希望訪問者(匿名)只能將id更改爲2並獲取MIcrosoft的數據。

  1. 訪客在這一點是匿名的,對於非匿名用戶我使用會話。
  2. 如果我保留鹽或生成散列,那麼算法將通過源代碼可見。
  3. 如果我使用AUTH,那麼證書將是可見的。

我希望我對我的問題已經夠清楚了,會等待答案。

的示例代碼

... 
exports.statement = function(req, res){ 
    dcn_db.pool.getConnection(function(err, connection){ 
    if(!req.body.opid){ 
     return res.sendStatus(400); 
    } 
    var opid = req.body.opid; 
    var con = req.body.con; 
    connection.query(data_model.mini_statement(req),[opid,con], function(err, rows, fields) { 
     if(err) { 
     console.log('Error while performing Query. ' + err); //error respose 
     return res.json({ error : "true"}) 
     }else{ 
      return res.json({ error : "false", data : rows}); //parse result to json instantly 
     } 
    }); 
    connection.release(); 
    }); 
}; 
... 

上面的代碼發生在OPID和CON .... OPID是最主要的事情在這裏 ü會怎麼看待呢?

+1

你不能。不可能。用戶有權在您的服務器上扔出他們想要的任何數據包。由您來執行授權服務器端。 – meagar

+0

那麼你有什麼建議?認爲id是我應該以加密形式使用id並在服務器上解密的主要元素?或其他東西 –

回答

1

您無法控制服務器外部發生的情況。用戶可以完全控制他們在請求中放入的內容。

我分別返回Apple和Microsoft,但我不希望訪問者(匿名)只能將id更改爲2並獲取MIcrosoft的數據。

然後,您需要在允許他們訪問Microsoft數據之前執行身份驗證和授權檢查。

訪客在這一點是匿名的,對於非匿名用戶我使用會話。

如果你有一個匿名訪問者,那麼你需要檢查,在服務器上,如果已經要求什麼能給予匿名用戶。如果不是,您需要拒絕未經授權的請求。

如果我保留鹽或生成散列,那麼算法將通過源代碼可見。

這並不重要,因爲只有授權用戶應該有密碼才能放入哈希算法。這無關緊要,您應該使用HTTPS來保護客戶端和服務器之間的數據以及加密哈希以保護數據以存儲在用戶數據庫中。

如果我使用AUTH,那麼證書將是可見的。

僅適用於您和憑據所屬的授權用戶(假設您使用HTTPS,您應該這樣做)。

+0

點是如果我做一個ajax請求,甚至https,我可以很容易地轉到源代碼,並確切地看到什麼params傳遞和什麼數據提供回 –

+1

@RohitHazra - 是, 您可以。但這應該不成問題。你不會把用戶無權看到的任何東西放在請求中,如果他們改變了參數來詢問他們不允許看到的東西,那麼你會拒絕該請求未經授權的東西 – Quentin

+0

現在,在我提供的例子中,如果我在opid中發送'1',我將得到1的數據,'2'將獲取我2的數據。 那麼你有什麼建議像會話來存儲這些,但如果請求是通過機器人(我不是機器人天才),但我想我可以看到的網址和參數 –

0

雖然第一項和第二項取決於您的體系結構,但我不知道爲什麼您不會將身份驗證數據與其他空間區分開來,而不是在同一個空間中使用全部數據。

到目前爲止,此外觀的解決方案相當簡單,請使用UDID而不是數據庫(後端)中的整數ID。

如果您可以共享您正在嘗試通過API提供的代碼和數據的示例,這將使我們能夠詳細闡述它。

謝謝。

+0

請參閱,我已經添加了一個例子 –