Node.js KrakenJS:通过控制器执行POST请求以错误结束
我正在使用它来构建一个web应用程序。作为MVC,我正在通过控制器实现REST服务,下面是一个示例代码:Node.js KrakenJS:通过控制器执行POST请求以错误结束,node.js,rest,csrf,Node.js,Rest,Csrf,我正在使用它来构建一个web应用程序。作为MVC,我正在通过控制器实现REST服务,下面是一个示例代码: //users can get data app.get('myRoute', function (req, res) { readData(); }); //users can send data app.post('myRoute', function (req, res) { writeData(); }); 我可以毫无问题地读取数据。但当我尝试使用POST请求插入
//users can get data
app.get('myRoute', function (req, res) {
readData();
});
//users can send data
app.post('myRoute', function (req, res) {
writeData();
});
我可以毫无问题地读取数据。但当我尝试使用POST请求插入虚拟数据时,最终会出现以下错误:
错误:禁止
127.0.0.1---[Thu,2014年2月6日00:11:30 GMT]“POST/myRoute HTTP/1.1”500 374”-“Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,类似Gecko)Ubuntu Chromium/32.0.1700.102 Chrome/32.0.1700.102 Safari/537.36”
如何克服此问题?一件事是确保您发送了正确的CSRF头()。如果我没记错的话,默认情况下Kraken希望指定这些头
你也可以禁用CSRF,看看这是否能解决你的问题。既然KRAKEN使用了CSRF的LUSCA模块,您可以从这里获得如何禁用/配置的信息:
正如丹所说的,您可以关闭CSRF,但是您也可以考虑使用它,因为它带来了额外的安全性。
查看购物车示例了解更多信息:我在前面使用了一个技巧,您不必关闭csrf 在您的“index.dust”->
如果您不需要csrf,我正在使用angularjs btw: 通过将其放置在config.json的中间件中并将值设置为false,您将禁用csrf middlware的使用,并且您的应用程序将按预期运行
"middleware": {
"appsec": {
"priority": 110,
"module": {
"name": "lusca",
"arguments": [
{
"csrf": false,
"xframe": "SAMEORIGIN",
"p3p": false,
"csp": false
}
]
}
},
那是真的,我觉得很愚蠢。。。配置文件实际上有一个属性“csrf”:没错,它和更改它一样简单。我盯着这个看了两个小时,这就是你在晚上编写代码时发生的事情;)
var csrf = document.getElementById('csrfid').value;
$http({ method: 'POST',
url: 'http://localhost:8000/myRoute/',
data: { '_csrf': csrf, 'object': myObject }
}).success(function(result) {
//success handler
}).error(function(result) {
//error handler
});
"middleware": {
"appsec": {
"priority": 110,
"module": {
"name": "lusca",
"arguments": [
{
"csrf": false,
"xframe": "SAMEORIGIN",
"p3p": false,
"csp": false
}
]
}
},