Запрос — Ответ от php-сервера на ruby ​​на rails-сервере. Выпуск токена CSRF

Мы планируем взаимодействие между php-скриптом и ruby ​​на rails-сервере и наоборот.

Всякий раз, когда я делаю запись данных из PHP-скрипта, на сервере rails выводится уведомление: "Can't verify CSRF token authenticity",

Я прохожу authenticity_token в параметрах поста. Нам нужно как безопасно использовать этот токен на сервере 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();
?>

Код Rails —

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

Может кто-нибудь сказать нам, как мы можем сохранить наш authenticity_token случайным, согласованным и безопасным между двумя серверами (php и ruby ​​on rails).

7

Решение

Если вы используете контроллер rails в качестве API, защита с помощью токенов CSRF не имеет смысла. Как говорят токены Cross-Site Request Forgery, они предотвращают доступ к вашему приложению из любой точки, кроме представлений, созданных тем же веб-приложением.

Итак, вы должны отключить CSRF в вашем случае и использовать токен аутентификации.

Отвечая на ваш вопрос о том, как безопасно использовать этот токен аутентификации в приложении rails, если у вас есть какое-либо управление пользователями, назначьте токены аутентификации пользователям и найдите пользователя с отправленным токеном, и вы знаете, разрешено ли этому пользователю делать этот запрос. Если у вас нет управления пользователями, создайте таблицу базы данных для маркеров подлинности и проверьте запросы на основе того, что у вас есть в базе данных.

Вы можете написать кастом before_filter в application_controller и выполнить аутентификацию или авторизацию на основе authenticity_token в запросе.

P.S., если вы беспокоитесь о том, что authenticity_token виден для злоумышленников в сети при отправке запросов, используйте https.

1

Другие решения

Если приложение Rails используется в качестве сервера API, просто добавьте protect_from_forgery with: :null_session в соответствующем контроллере.

0

По вопросам рекламы [email protected]