Stiamo pianificando l'interazione tra lo script php in ruby sul server di rails e viceversa.Richiesta - Risposta dal server php al server ruby on rails. Emissione di un token CSRF
Ogni volta che faccio arricciare i dati di post da script php, sul display di notifica del server di rotaie - "Can't verify CSRF token authenticity"
.
Sto passando authenticity_token
in parametri di post. Abbiamo bisogno di come utilizzare questo token in modo sicuro sul server di rails. Codice
<?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
Qualcuno può dirci come possiamo mantenere la nostra authenticity_token casuale, coerente e sicuro tra due server (PHP e Ruby on Rails).
Considererei una route API separata che non utilizza un 'authenticity_token', ma utilizza invece un altro meccanismo per garantire che solo i server autorizzati possano utilizzare quell'api. – spickermann
Il token CSRF è per richiesta, quindi se un server PHP ha fatto un cURL per ottenerlo, sarebbe sbagliato. Puoi disabilitare temporaneamente il controllo CSRF sull'app Rails e provare a eseguire – Ashish
@Ashish - Sì, disabilitare CSRF sull'app per rails funziona, ma non sarebbe sicuro dato che chiunque può pubblicare dati sul server ruby su quel metodo –