¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Implementación de autenticación CSRF en PHP con CURL: Solución a problemas de token CSRF.

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 93 Vistas
0
Cargando...

¡Hola equipo de SAP!

Estoy teniendo problemas para implementar la autenticación CSRF en el software del cliente. El proceso de obtener un token CSRF y hacer uso de él se explica de la siguiente manera:

  1. Enviar una solicitud GET al servidor con un encabezado llamado x-csrf-token con el valor "fetch".
  2. Recibir la respuesta con un encabezado llamado x-csrf-token; el valor es el token generado.
  3. Enviar una solicitud POST al servidor con el mismo par de encabezado/valor del paso (2).

Cuando se hace esto manualmente usando Postman, el proceso funciona bien y el POST devuelve el estado 200 OK. Sin embargo, al hacerlo en PHP con CURL, en su lugar recibo "La validación del token CSRF falló". Aquí está mi código PHP:

function apiPost($body,$username,$password,$url){
    // Código PHP omitido por brevedad
}

¿Hay algo obvio que me esté perdiendo? Gracias por tu tiempo.

Ya he consultado los siguientes recursos:

https://help.sap.com/viewer/753088fc00704d0a80e7fbd6803c8adb/7.4.23/en-US/2628627475124815981ddf91a6... - Notas generales sobre programación REST

https://help.sap.com/viewer/753088fc00704d0a80e7fbd6803c8adb/7.4.23/en-US/5574ed6c93654ee4999b4d07cd... - Protección CSRF

https://blogs.sap.com/2014/07/11/issues-with-csrf-token-and-how-to-solve-them/ - Problemas con el token CSRF y cómo resolverlos

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Hola Endersson,

Gracias por visitar SAP Community para obtener respuestas a tus preguntas. Dado que estás haciendo una pregunta aquí por primera vez, ten en cuenta que:

Estás agregando un comentario a una publicación antigua que probablemente no recibirá respuesta.

Te sugiero que comiences una nueva pregunta y sigas estas pautas:

Te recomiendo que te familiarices con: https://community.sap.com/resources/questions-and-answers , ya que proporciona consejos para preparar preguntas que generen respuestas de nuestros miembros.

Por ejemplo, puedes:

- describir los pasos que tomaste para encontrar respuestas (y por qué no fueron útiles)

- compartir capturas de pantalla de lo que has visto/hecho

- asegurarte de haber aplicado las etiquetas apropiadas

- usar una línea de asunto más descriptiva

Cuantos más detalles proporciones, más probable será que los miembros puedan responder. Siéntete libre de realizar también nuestro tutorial de Preguntas y Respuestas en: https://developers.sap.com/tutorials/community-qa.html

Si lo deseas, puedes revisar tu pregunta seleccionando Acciones y luego Editar.

Al agregar una imagen a tu perfil, animas a los lectores a responder: https://developers.sap.com/tutorials/community-profile.html

Saludos,

Dedi

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Taumata,

Actualmente estamos desarrollando para SAP Marketing Cloud utilizando PHP y oData para actualizar datos de interacción y usamos tanto el X-CSRF-Token como la cookie SAP para la autenticación.

Ejemplo:

function getCSRFToken($username,$password,$url) {

  $ch = curl_init($url);
  $request_headers = array();
  $request_headers[] = 'X-CSRF-Token: Fetch';
  $request_headers[] = 'Content-Type: application/json';
  $request_headers[] = 'Accept: application/json';
  curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
  curl_setopt($ch, CURLOPT_POST, 0);
  curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_VERBOSE, 1);
  curl_setopt($ch, CURLOPT_HEADER, 1);
  curl_setopt($ch, CURLOPT_NOBODY, true);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
  curl_setopt($ch, CURLOPT_HEADERFUNCTION, function($curl, $header) use (&$headers)
  {
    $len  = strlen($header);
    $header = explode(':', $header, 2);
    if (count($header) < 2) { // ignore invalid headers
    return $len;
  }

  $name = strtolower(trim($header[0]));
  if (is_array($headers) && !array_key_exists($name, $headers)) {
    $headers[$name] = [trim($header[1])];
  } else {
    $headers[$name][] = trim($header[1]);
  }
  return $len;

  });

  $tmpfname = '/tmp/cookie.dat'
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola amigo, ¿pudiste resolver este problema? Actualmente tengo el mismo inconveniente.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¡Hola y bienvenido a la Comunidad SAP!

Gracias por visitar la Comunidad SAP para obtener respuestas a tus preguntas. Dado que estás haciendo una pregunta aquí por primera vez, te recomiendo que te familiarices con https://community.sap.com/resources/questions-and-answers (si aún no lo has hecho), ya que proporciona consejos para preparar preguntas que atraigan respuestas de nuestros miembros. Por ejemplo, puedes describir los pasos que tomaste para encontrar respuestas (y por qué no fueron útiles) y compartir capturas de pantalla de lo que has visto/hecho. Cuantos más detalles proporciones, más probable será que los miembros puedan ayudarte.

Si lo deseas, puedes revisar tu pregunta seleccionando Acciones, luego Editar (aunque una vez que alguien responda a tu pregunta, perderás la capacidad de editar la pregunta, pero si eso sucede, puedes dejar más detalles en un comentario).

Por último, si esperas conectarte con los lectores, considera agregar una imagen a tu perfil. Así es como lo haces: https://www.youtube.com/watch?v=F5JdUbyjfMA&list=PLpQebylHrdh5s3gwy-h6RtymfDpoz3vDS . Al personalizar tu perfil con una foto tuya, animas a los lectores a responder.

¡Saludos,

Julia Moderadora de la Comunidad SAP

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?