2016-07-06 22 views
-1

我正在與一個單一的應用程序框架叫reactjs,我遇到的問題是設置httpOnly cookie,因爲他們不能從客戶端設置/讀取我需要弄清楚如何使用快遞。我想出了這是一個很好的/安全的方式來設置服務器端Cookie從客戶端

一個想法是做一個POST請求像/cookie:data的路線,其中的數據是令牌的價值需要被存儲在cookie中,因此:

app.post('/cookie:data', function(req, res) { 
    // Set cookie here 
    res.send(200) 
}) 

的問題,我很猶豫該令牌是否包含用於保護API的唯一用戶標識符,並且我不確定我是否通過這種方式設置cookie來公開此信息。的

或者不使用:data將是有益弄清楚如何從POST請求獲取數據(JSON對象)

編輯:我能想到的 一個問題是,任何人都可以發佈到這條路線和設置不同的餅乾?什麼是保護它的方法?

編輯2: 這是快速設置我使用代理API調用(僅用於澄清評論相關)

app.use('/api', function (req, res) { 
    let url = config.API_HOST + req.url 
    req.pipe(request(url)).pipe(res) 
    }) 
+0

是不是更容易設置非httpOnly cookie?在安全性方面,我沒有看到如何通過服務器端API設置任何cookie值更不安全。此外,無論如何,唯一的用戶標識符將以任何方式暴露,因此使用HTTPS似乎是一項強制性要求。 – robertklep

+0

@robertklep這裏的想法是找出一個可行的方法來設置httpOnly cookie,非httpOnly的不是我的選擇,我怕因爲他們的本性,能夠通過js訪問它們。 HTTPS也在保護Cookie的情況下。 – Ilja

+0

您想要在cookie中存儲的數據來自哪裏?我認爲它不是來自你自己的服務器?如果您的FE正在調用第三方API,那麼通過您自己的服務器代理對該API的請求是不是一個想法?對於一個嚴重的攻擊者來說,如果他們無論如何都可以控制哪些cookies被設置(通過調用'/ cookie:data'),那麼無法讀取cookie內容可能不會成爲障礙。 – robertklep

回答

1

說你要代理的所有請求開始/api到三階除了/api/users,你想執行'手動',因爲它會返回你需要的令牌:

app.post('/api/users', function(req, res) { 
    let url  = config.API_HOST + req.url; 
    let apiRequest = request.post(url, function(err, response, body) { 
    // Responses are just examples, you should tailor them to your situation 
    if (err) { 
     return res.sendStatus(500); 
    } else if (response.statusCode !== 200) { 
     return res.sendStatus(response.statusCode); 
    } else { 
     res.cookie('token', body).send('OK'); 
    } 
    }); 
    req.pipe(apiRequest); 
}) 

app.use('/api', function (req, res) { 
    let url = config.API_HOST + req.url 
    req.pipe(request(url)).pipe(res) 
}) 
+0

謝謝,這個工作。然而,不得不擺弄一下bodyParser。 – Ilja

+0

我發現的一個問題是,以這種方式使用它,我不再能夠在客戶端使用'.then'和'.catch'鉤子,是否有辦法保持這些功能(我假設發送狀態爲500)會意思是'.catch'被觸發 – Ilja

+0

你使用哪個API客戶端? – robertklep

相關問題