¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Implementação de autenticação CSRF em PHP com CURL: Solução para problemas de token CSRF.

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

Olá equipe SAP!

Estou tendo problemas para implementar a autenticação CSRF no software do cliente. O processo de obtenção de um token CSRF e seu uso é explicado da seguinte forma:

  1. Enviar uma solicitação GET ao servidor com um cabeçalho chamado x-csrf-token com o valor "fetch".
  2. Receber a resposta com um cabeçalho chamado x-csrf-token; o valor é o token gerado.
  3. Enviar uma solicitação POST ao servidor com o mesmo par de cabeçalho/valor do passo (2).

Quando faço isso manualmente usando o Postman, o processo funciona bem e o POST retorna o status 200 OK. No entanto, ao fazer isso em PHP com CURL, recebo "A validação do token CSRF falhou". Aqui está meu código PHP:

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

Há algo óbvio que estou perdendo? Obrigado pelo seu tempo.

Já consultei os seguintes recursos:

https://help.sap.com/viewer/753088fc00704d0a80e7fbd6803c8adb/7.4.23/en-US/2628627475124815981ddf91a6... - Notas gerais sobre programação REST

https://help.sap.com/viewer/753088fc00704d0a80e7fbd6803c8adb/7.4.23/en-US/5574ed6c93654ee4999b4d07cd... - Proteção CSRF

https://blogs.sap.com/2014/07/11/issues-with-csrf-token-and-how-to-solve-them/ - Problemas com o token CSRF e como resolvê-los

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

4 Respuestas

0
Cargando...

Olá Endersson,

Obrigado por visitar a Comunidade SAP em busca de respostas para suas perguntas. Como você está fazendo uma pergunta aqui pela primeira vez, leve em consideração o seguinte:

Você está adicionando um comentário a uma publicação antiga que provavelmente não receberá resposta.

Sugiro que inicie uma nova pergunta e siga estas diretrizes:

Recomendo que se familiarize com: https://community.sap.com/resources/questions-and-answers , pois fornece dicas para formular perguntas que gerem respostas dos nossos membros.

Por exemplo, você pode:

- descrever os passos que você tomou para encontrar respostas (e por que não foram úteis)

- compartilhar capturas de tela do que você viu/fez

- certificar-se de ter aplicado as tags apropriadas

- usar uma linha de assunto mais descritiva

Quanto mais detalhes você fornecer, mais provável será que os membros possam responder. Sinta-se à vontade para também fazer nosso tutorial de Perguntas e Respostas em: https://developers.sap.com/tutorials/community-qa.html

Se desejar, você pode revisar sua pergunta selecionando Ações e depois Editar.

Ao adicionar uma imagem ao seu perfil, você incentiva os leitores a responderem: https://developers.sap.com/tutorials/community-profile.html

Saudações,

Dedi

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

Olá Taumata,

Atualmente estamos desenvolvendo para o SAP Marketing Cloud usando PHP e oData para atualizar dados de interação e estamos usando tanto o X-CSRF-Token quanto o cookie SAP para autenticação.

Exemplo:

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...

Olá amigo, você conseguiu resolver esse problema? Atualmente estou enfrentando a mesma dificuldade.

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

Olá e bem-vindo à Comunidade SAP!

Obrigado por visitar a Comunidade SAP em busca de respostas para suas perguntas. Como você está fazendo uma pergunta aqui pela primeira vez, recomendo que se familiarize com https://community.sap.com/resources/questions-and-answers (se ainda não o fez), pois fornece dicas sobre como formular perguntas que atraiam respostas de nossos membros. Por exemplo, você pode descrever os passos que tomou para encontrar respostas (e por que não foram úteis) e compartilhar capturas de tela do que viu/fez. Quanto mais detalhes você fornecer, mais provável será que os membros possam ajudá-lo.

Se desejar, pode revisar sua pergunta selecionando Ações, depois Editar (embora uma vez que alguém responda à sua pergunta, perderá a capacidade de editá-la, mas se isso acontecer, pode adicionar mais detalhes em um comentário).

Por fim, se deseja se conectar com os leitores, considere adicionar uma imagem ao seu perfil. É assim que você faz: https://www.youtube.com/watch?v=F5JdUbyjfMA&list=PLpQebylHrdh5s3gwy-h6RtymfDpoz3vDS . Ao personalizar seu perfil com uma foto sua, você incentiva os leitores a responderem.

Saudações,

Julia Moderadora da Comunidade 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?