Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

318
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda