Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

324
Visualizações
¿Es `file_get_contents("php://input")` la única forma de obtener datos de publicación de `fetch` y es seguro usar async y hack-wise?

Estoy tratando de reescribir mi código JQuery $.post() a través de la función fetch() nativa. Y parece que la única forma de hacerlo con el código del servidor PHP es usando file_get_contents("php://input") . Lo hago como se muestra aquí y aquí :

codigo js:

 fetch('/myscript.php', { method: 'post', mode: "same-origin", credentials: "same-origin", body: JSON.stringify({par1:par1, par2:par2}) }).then(response => response.text()) .then(output => { // do stuff });

miscript.php:

 $input = json_decode(file_get_contents('php://input'), true); // do stuff with $input['par1'], $input['par2'] echo $output;

Hay dos cosas que me preocupan:

  1. El proyecto tiene más de una llamada de búsqueda como esta. ¿Qué pasa si se llaman dos funciones de búsqueda simultáneamente con dos archivos de script php diferentes? Ambos accederán a php://input al mismo tiempo. ¿No conducirá a un conflicto?

  2. Con $.post() pude comprobar si myscript.php no ha sido llamado directamente por un hacker con esta línea de código:

    if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') die('Hack attempt!');

    pero con el nuevo enfoque $_SERVER['HTTP_X_REQUESTED_WITH'] no está definido por algún motivo. ¿Hay alguna manera de garantizar que myscript.php se llame con fetch o php://input lo garantice automáticamente?

  3. fetch es una función bastante moderna, pero json_decode(file_get_contents('php://input'), true) parece bastante extraño y está destinado a algún otro caso de uso. ¿No hay una mejor manera de obtener datos de un servidor basado en php?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

  1. No. Cada invocación de script tiene su propio php://input .
  2. ¿Cómo comprueba eso si lo llama un hacker? Nada impide que un hacker envíe ese encabezado. Pero si realmente lo desea, puede agregar el encabezado usted mismo (que es lo que haría un hacker):
 fetch('/myscript.php', { method: 'post', mode: "same-origin", headers: {"X-Requested-With": "XMLHttpRequest"}, credentials: "same-origin", body: JSON.stringify({par1:par1, par2:par2}) }).then(response => response.text()) .then(output => { // do stuff });
  1. Puede enviar parámetros codificados en URL en lugar de JSON. Entonces PHP los analizará en $_POST como con las formas normales.
 fetch('/myscript.php', { method: 'post', mode: "same-origin", headers: { "X-Requested-With": "XMLHttpRequest", "Content-type": "application/x-www-form-urlencoded" }, credentials: "same-origin", body: `par1=${encodeURIComponent(par1)}&par2=${encodeURIComponent(par2)}` }).then(response => response.text()) .then(output => { // do stuff });
about 4 years ago · Juan Pablo Isaza Relatório

0

  1. Cada nuevo proceso obtendrá una "entrada" separada, no hay riesgo de conflicto.
  2. Quiere tokens CSRF. Cualquiera puede enviar una XMLHttpRequest
  3. Estás comparando naranjas con manzanas. php://entrada está bien.

php://documentación de entrada

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda