Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

319
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!