Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用NodeJS/Express应用程序保护AJAX调用_Javascript_Jquery_Ajax_Node.js_Express - Fatal编程技术网

Javascript 使用NodeJS/Express应用程序保护AJAX调用

Javascript 使用NodeJS/Express应用程序保护AJAX调用,javascript,jquery,ajax,node.js,express,Javascript,Jquery,Ajax,Node.js,Express,有人能为我指出如何在ExpressJS应用程序中保护AJAX调用的正确方向吗 我有一个Jade模板,它引用了一个外部JavaScript文件,用于处理向服务器上的端点发送请求。现在,不需要任何身份验证就可以到达相同的端点(显然) 我知道Express可以将对象/变量传递给Jade模板,但Jade模板可以将这些传递给包含的脚本吗?我的直觉可能不是 我是否可以在Express中对我的/jsonp端点进行修改,使其只接受来自mysite.com和localhost的请求?在客户端JavaScript中

有人能为我指出如何在ExpressJS应用程序中保护AJAX调用的正确方向吗

我有一个Jade模板,它引用了一个外部JavaScript文件,用于处理向服务器上的端点发送请求。现在,不需要任何身份验证就可以到达相同的端点(显然)

我知道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)); 
})

或者我是不是错了树,需要完全考虑一个不同的方法?

< P>如果你把端点做为直接JSON(而不是JSONP,它被设计成容易地绕过公共API的跨域安全),访问控制-*/COD>家族的头()将按照你想要的去做。浏览器本身将强制执行此操作,并防止来自不匹配域的任何AJAX请求

具体来说,您需要两个
Access Control Allow Origin
头,带有
http://yoursite.com
http://localhost
作为值


使用JSONP,您唯一能做的就是在返回脚本之前查看服务器端的
Referer
头,但这是不可靠的,而且很容易被欺骗。

您的端点上唯一的要求是它为来自mysite.com或localhost的授权用户的请求提供服务,而不进行任何身份验证吗?如果是这样,您可以进行路由检查或
req.originalUrl
,但这似乎很容易被欺骗和绕过。我真的想把某种身份验证放在适当的位置,这样在路由级别根据先前的验证授予访问权限。我喜欢。
// 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)); 
})