请求-从php服务器到RubyonRails服务器的响应。CSRF代币发行

请求-从php服务器到RubyonRails服务器的响应。CSRF代币发行,php,ruby-on-rails,ruby,ruby-on-rails-3,curl,Php,Ruby On Rails,Ruby,Ruby On Rails 3,Curl,我们正在计划php脚本和RubyonRails服务器之间的交互,反之亦然 每当我从php脚本发布数据时,OnRails服务器通知就会显示-“无法验证CSRF令牌的真实性” 我正在post参数中传递authenticity\u令牌。我们需要了解如何在rails服务器上安全地使用这个令牌 <?php class active_merchant{ private $endpoint_url; // server address or url where

我们正在计划php脚本和RubyonRails服务器之间的交互,反之亦然

每当我从php脚本发布数据时,OnRails服务器通知就会显示-
“无法验证CSRF令牌的真实性”

我正在post参数中传递
authenticity\u令牌
。我们需要了解如何在rails服务器上安全地使用这个令牌

<?php

    class active_merchant{    
        private $endpoint_url;      // server address or url where data is to be posted.
        private $params;            // form fields
        private $fields_count;      // count of fields in credit card

        public function __construct(){

            $this->endpoint_url = "http://localhost:8080/activemerchant/index";
            $token = md5('random');
            $this->params = array('name'=>'test','authenticity_token'=>$token);

        }

        /*  function curl_post
            makes a curl post to the end point url
            global variables 
             */

        public function curl_post(){

            try{

                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $this->endpoint_url);
                curl_setopt($ch, CURLOPT_POST, 1);
                curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($this->params));
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
                $response = curl_exec($ch);

                print_r($response);
                //return $response;

            }catch(Exception $e){
                throw new Exception($e->getMessage(),$e->getCode(),$e->gtLine());
            }

        }

    }

    $active_merchant = new active_merchant();
    $active_merchant->curl_post();    
?>      

铁路代码-

class ActivemerchantController < ApplicationController
protect_from_forgery except: :index
  def index
    Rails.logger.debug params.inspect
    puts params.inspect
    self.response_body = "Hello, world!"
  end
end
class ActivemerchantController

有谁能告诉我们如何在两台服务器(php和ruby on rails)之间保持我们的真实性令牌的随机性、一致性和安全性。

如果rails应用程序用作API服务器,那么只需在适当的控制器中添加
使用::null\u session保护\u免受伪造。

如果您将rails控制器用作API,使用CSRF令牌进行保护没有意义。正如名称跨站点请求伪造令牌所说,它们阻止您的应用程序从同一web应用程序生成的视图以外的任何地方被访问

因此,您应该在您的案例中禁用CSRF并使用真实性令牌

回答您关于如何安全地在rails应用程序上使用此Authentity token的问题,如果您有任何用户管理,请将Authentity token分配给用户,并查找具有已发送token的用户,您知道是否允许该用户发出该请求。如果您没有用户管理,请为真实性令牌创建一个数据库表,并根据数据库中的内容验证请求

您可以在应用程序\u控制器中的\u过滤器之前编写自定义
,并根据请求中的真实性\u令牌执行身份验证或授权


另外,如果您担心攻击者在发送请求时可以在网络中看到真实性令牌,请使用https

我会考虑一个单独的API路由,它不使用<代码> AudioTythyToMs>代码>,而是使用一些其他机制来确保只有授权的服务器才允许使用Ap.CSRF令牌作为请求,所以如果PHP服务器进行卷曲来获得它,那将是错误的。你能暂时禁用CSRF检查Rails应用程序吗try@Ashish-是的,禁用CSRF on rails应用程序正在工作,但这并不安全,因为任何人都可以使用该方法将数据发布到ruby服务器