Envío de datos POST sin formulario

6 minutos de lectura

¿Puedo enviar, por ejemplo, una cadena u otra información a otro archivo .php sin que quede expuesto? [thus not by GET but by POST conform to what i know] sin usar un formulario?

  • Parece que necesitas usar sesiones.

    – Mirador

    23 de septiembre de 2010 a las 17:23

  • No está del todo claro de dónde y hacia dónde envía los datos. ¿Es de cliente a servidor o de servidor a servidor o de servidor a otro servidor?

    – buggedcom

    23 de septiembre de 2010 a las 17:26

  • bueno, lo paso de un archivo a otro en el mismo servidor

    – Samuel

    23 de septiembre de 2010 a las 17:28

  • Los datos estarán casi tan bien expuestos a través de POST como a través de GET, los pares de valores clave simplemente no aparecerán en la barra de direcciones, pero la información aún se transferirá en claro a menos que esté usando SSL o esto es estrictamente un tipo de cosas de servidor a servidor a través de un canal de comunicación seguro.

    – línea plana

    23 de septiembre de 2010 a las 17:28


  • Los datos POST son extremadamente visibles para el usuario (pero no para el usuario típico). Las sesiones son el camino a seguir.

    – paseo

    23 de septiembre de 2010 a las 17:29

Si no desea que el usuario vea sus datos, utilice una sesión de PHP.

Los datos en una solicitud de publicación aún son accesibles (y manipulables) por el usuario.

Verificar este tutorial en Sesiones de PHP.

  • esta no es una buena solución, también si el autor aceptó esto como una solución alternativa. Además, las sesiones son mucho más fáciles de secuestrar que manipular una solicitud de publicación (es decir, mediante un ataque de “hombre en el medio”).

    – Andreas Linden

    23 de septiembre de 2010 a las 18:17

  • ¿Por qué es una mala solución? Quizás el proceso de Samuel es tal que secuestrar la sesión no es un problema. La única forma de resolver verdaderamente el secuestro de sesiones (de forma discreta) es usar SSL para todas las solicitudes relacionadas con la sesión. Si a Samuel le preocupaba que se filtraran los datos, debería usar SSL.

    – Esteban vacaciones

    23 de septiembre de 2010 a las 18:30

  • @zolex, ¿qué tiene de difícil interceptar datos de publicaciones? Sentado en una cafetería con WireShark en ejecución es todo lo que necesita para secuestrar datos POST. Vuelva a crear la solicitud con cookies y datos de publicación, y estará listo para comenzar. Si considera que las sesiones son una mala solución, entonces SSL es la única buena solución.

    – paseo

    24 de septiembre de 2010 a las 18:44


  • el usuario clásico falla al enviar datos confidenciales desde una cafetería;) y, por cierto, la pregunta era cómo enviar datos de publicación con php, para no exponer los datos en la URL, por ejemplo. el servidor web no lo registrará, etc. Creo que este era el objetivo principal… mi respuesta realmente responde a la pregunta y no proporciona una solución alternativa como la suya. Bueno, si él está bien con eso. BESO 😉

    – Andreas Linden

    25 de septiembre de 2010 a las 0:25

avatar de usuario
darin dimitrov

Puede usar AJAX para enviar una solicitud POST si no desea formularios.

usando jquery $.post método es bastante simple:

$.post('/foo.php', { key1: 'value1', key2: 'value2' }, function(result) {
    alert('successfully posted key1=value1&key2=value2 to foo.php');
});

  • Eso es javascript. AJAX = Javascript asíncrono y XML

    – Mirador

    23 de septiembre de 2010 a las 17:26

  • @Samuel, ahora, si dices que no se permite javascript, entonces las cosas se vuelven bastante imposibles 🙂

    – Darin Dimitrov

    23 de septiembre de 2010 a las 17:29

  • No sabía que AJAX era Javascript y realmente no puedo usar Javascript

    – Samuel

    23 de septiembre de 2010 a las 17:30

  • esta es probablemente la mejor respuesta aquí, usando jquery para hacer el trabajo pesado, y esto también funciona después de que se haya renderizado la página.

    – algunos_comestibles

    16 de noviembre de 2015 a las 6:38

  • Las etiquetas de pregunta son PHP, esto no es PHP

    – codificador de wp

    27/10/2017 a las 17:25

Envíe sus datos con SESSION en lugar de publicar.

session_start();
$_SESSION['foo'] = "bar";

En la página donde recibe la solicitud, si absolutamente necesita datos POST (alguna lógica extraña), puede hacer esto en algún lugar al principio:

$_POST['foo'] = $_SESSION['foo'];

Los datos de la publicación serán válidos igual que si se enviaran con POST.

Luego destruya la sesión (o simplemente desactive los campos si necesita la sesión para otros fines).

Es importante destruir una sesión o desarmar los campos, porque a diferencia de POST, SESSION seguirá siendo válida hasta que la destruyas explícitamente o hasta que finalice la sesión del navegador. Si no lo hace, puede observar algunos resultados extraños. Por ejemplo: usa sesión para filtrar algunos datos. El usuario activa el filtro y obtiene datos filtrados. Después de un tiempo, regresa a la página y espera que se restablezca el filtro, pero no es así: todavía ve datos filtrados.

  • la sesión funciona dentro de la URL del dominio definido, pero es posible que esta no sea la solución ideal cuando necesita mover datos entre URL

    – Abdulbasit

    19 abr a las 7:21

Simplemente use: file_get_contents()

// building array of variables
$content = http_build_query(array(
            'username' => 'value',
            'password' => 'value'
            ));
// creating the context change POST to GET if that is relevant 
$context = stream_context_create(array(
            'http' => array(
                'method' => 'POST',
                'content' => $content, )));

$result = file_get_contents('http://www.example.com/page.php', null, $context);
//dumping the reuslt
var_dump($result);

Referencia: mi respuesta a una pregunta similar:

eche un vistazo a la documentación de php para estas funciones, puede enviar una solicitud de publicación usándolas.

fsockopen()
fputs()

o simplemente usa una clase como Zend_Http_Cliente que también se basa en conexiones de enchufe.

también encontré un buen ejemplo usando google…

avatar de usuario
usuario11713698

function redir(data) {
  document.getElementById('redirect').innerHTML = '<form style="display:none;" position="absolute" method="post" action="location.php"><input id="redirbtn" type="submit" name="value" value=" + data + "></form>';
  document.getElementById('redirbtn').click();
}
<button onclick="redir('dataToBeSent');">Next Page</button>
<div id="redirect"></div>

Puede usar este método que crea un nuevo formulario oculto cuyos “datos” se envían por “publicación” a “ubicación.php” cuando un botón[Next Page] se hace clic.

avatar de usuario
abdulbasit

Recomiendo encarecidamente usar curl en tal situación, file_fet_content() funciona pero no en todo momento, y podría ser problemático usarlo en algunas aplicaciones.

Aunque curl viene en diferentes variaciones según lo que desee enviar y con qué método, este es el método más común para publicar sus datos sin formulario HTML usando curl.

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://example.com/request_uri');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    $post = array(
        'data1' => 'value1',
        'data2' => $value2
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    
    //do what you want with the responce
    var_dump($result)

¿Ha sido útil esta solución?