2014-02-06 38 views
1

我使用KrakenJS来构建Web应用程序。作为MVC,我正在通过控制器实施REST服务,下面是示例代码:KrakenJS:通过控制器执行POST请求以错误结束

//users can get data 
app.get('myRoute', function (req, res) { 
    readData(); 
}); 

//users can send data 
app.post('myRoute', function (req, res) { 
    writeData(); 
}); 

我可以读取没有问题的数据。但是,当我尝试使用POST请求尝试伪数据插入时,它最终出现此错误:

Error:Forbidden 127.0.0.1 - - [Thu, 06 Feb 2014 00:11:30 GMT] "POST /myRoute HTTP/1.1" 500 374 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.102 Chrome/32.0.1700.102 Safari/537.36"

我该如何克服这一点?

回答

1

有一件事是确保你发送正确的CSRF头(http://krakenjs.com/#Security)。如果我没有记错的话,Kraken预计这些标题将被指定。

您也可以禁用CSRF并查看是否可以解决您的问题。由于Kraken使用CSRF的Lusca模块,因此您可以从这里获得有关如何禁用/配置的信息:https://github.com/paypal/lusca

+0

这是真的,这是从我这里是相当愚蠢的...配置文件实际上有一个属性“csrf”:真,它就像改变它一样简单。我盯着这两个小时,这是当你在夜间编码时发生的事情;) – balanza

1

我用了一招早些时候,你不必关闭CSRF ...

在你的“index.dust” - >

<input id="csrfid" type="hidden" name="_csrf" value="{_csrf}"> 

在你的 “的script.js” - >

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 
     }); 

我使用angul arjs BTW

0

如果您不需要CSRF:

通过在您的config.json放置在这个中间件和设定值,以虚假的,你是禁止使用CSRF middlware的,你的应用程序将充当预期。

"middleware": { 



    "appsec": { 
    "priority": 110, 
    "module": { 
     "name": "lusca", 
     "arguments": [ 
      { 
       "csrf": false, 
       "xframe": "SAMEORIGIN", 
       "p3p": false, 
       "csp": false 
      } 
     ] 
    } 
},