【问题标题】:KrakenJS: perform POST request over a controller ends with errorKrakenJS:通过控制器执行 POST 请求以错误结束
【发布时间】:2014-03-02 17:24:23
【问题描述】:

我正在使用KrakenJS 构建一个网络应用程序。作为 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 请求插入虚拟数据时,会出现以下错误:

错误:禁止 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"

我该如何克服这个问题?

【问题讨论】:

    标签: node.js rest csrf


    【解决方案1】:

    一件事是确保您发送正确的 CSRF 标头 (http://krakenjs.com/#Security)。如果我没记错的话,默认情况下,Kraken 期望指定这些标头。

    您也可以禁用 CSRF,看看是否能解决您的问题。由于 Kraken 使用 Lusca 模块进行 CSRF,您可以从此处获取有关如何禁用/配置的信息:https://github.com/paypal/lusca

    【讨论】:

    • 是的,这对我来说很愚蠢......配置文件实际上有一个属性“csrf”:真的,就像改变它一样简单。我盯着这两个小时,这就是你在夜间编码时发生的事情;)
    【解决方案2】:

    我之前使用了一个技巧,您不必关闭 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
          });
    

    我使用的是 angularjs 顺便说一句

    【讨论】:

      【解决方案3】:

      正如 Dan 所说,您可以关闭 csrf,但您可能还想考虑使用它,因为它带来了额外的安全性。

      查看购物车示例了解更多信息:https://github.com/lmarkus/Kraken_Example_Shopping_Cart

      【讨论】:

        【解决方案4】:

        如果不需要csrf:

        通过将其放置在 config.json 的中间件中并将值设置为 false,您将禁用 csrf 中间件,您的应用将按预期运行。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-10-21
          • 2021-05-15
          • 2015-02-23
          • 1970-01-01
          • 2020-10-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多