簡體   English   中英

使用NodeJS / Express應用程序保護AJAX調用的安全

[英]Securing AJAX calls with a NodeJS/Express application

任何人都可以為我指出如何在ExpressJS應用中處理保護AJAX呼叫的正確方向嗎?

我有一個Jade模板,該模板引用了一個外部JavaScript文件,該文件處理向我服務器上的端點的發布請求。 現在,無需任何身份驗證即可訪問同一端點(很明顯)。

  // Sample AJAX call in my client-side JavaScript file (which dynamically updates a chart)
  $.ajax({
  url: 'https://example.com/jsonp?callback=?',
  jsonpCallback: 'callback',
  dataType: 'jsonp',
  data: {
    startDate: formatDate(fromDate, ''),
    endDate: formatDate(toDate, '')
  },
  success: function(response){
    //generateChart(processData(response));
  }

我知道Express可以將對象/變量傳遞給Jade模板,但是Jade模板可以將那些對象/變量傳遞給包含的腳本嗎? 我的預感可能不是...

我可以對Express中的/ jsonp端點進行修改,使其僅接受來自mysite.com和localhost的請求嗎? 將數據嵌入客戶端JavaScript(例如身份驗證憑據或API密鑰)似乎是一種糟糕的方法。

// Route definition in Express
router.get('/jsonp', function(req, res){
  var obj = {"_id": "234e62ASFsdsds", "name": "An object", "status": "READY"};
  var callbackFunction = (req.query.callback) ? req.query.callback : 'cb';
  res.send(wrapJSONP(callbackFunction, obj)); 
})

還是我吠錯了樹,需要完全考慮采用另一種方法?

如果您將端點作為純JSON(而不是JSONP,JSONP旨在輕松繞過公共API的跨域安全性),則Access-Control-*標頭系列( CORS標頭 )將完全按照您的意願進行操作想。 瀏覽器本身將強制執行此操作,並阻止來自不匹配域的任何AJAX請求。

具體來說,您需要兩個Access-Control-Allow-Origin標頭,以http://yoursite.comhttp://localhost為值。

使用JSONP,您唯一可以做的就是在返回腳本之前查看服務器端的Referer標頭-但這是不可靠的,並且容易被欺騙。

暫無
暫無

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

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