2010-09-23 9 views
26

Puis-je envoyer par exemple une chaîne ou un autre élément d'information à un autre fichier .php sans qu'il soit exposé (donc pas par GET mais par POST conforme à ce que je sais) sans utiliser de formulaire?Envoi de données POST sans formulaire

+3

On dirait que vous avez besoin d'utiliser des sessions. – Gazler

+1

Il n'est pas tout à fait clair d'où vous envoyez les données. Est-ce client à serveur ou serveur à serveur ou serveur à serveur différent? – buggedcom

+0

Eh bien, je le passe d'un fichier à l'autre sur le même serveur – Samuel

Répondre

21

Si vous ne voulez pas que vos données soient vues par l'utilisateur, utilisez une session PHP.

Les données d'une demande de publication sont toujours accessibles (et manipulables) par l'utilisateur.

Commander this tutorial sur les sessions PHP.

+1

ce n'est pas une bonne solution, même si l'auteur l'a accepté comme solution de contournement. Les sessions sont aussi plus faciles à détourner que la gestion d'une demande de post (par exemple par une attaque "man in the middle") –

+1

Pourquoi est-ce une mauvaise solution? Peut-être que le processus de Samuel est tel que le détournement de la session n'est pas un problème. La seule façon de vraiment résoudre le détournement de session (d'une manière discrète) est d'utiliser SSL pour toutes les demandes liées à la session. Si Samuel s'inquiétait de la fuite des données, il devrait utiliser SSL. –

+2

@zolex, quelle est la difficulté d'intercepter les données post? Assis dans un café avec WireShark en cours d'exécution est tout ce dont vous avez besoin pour détourner les données POST. Recréez la demande avec des cookies et publiez des données, et vous êtes prêt à partir. Si vous considérez les sessions comme une mauvaise solution, SSL est la seule bonne solution. – riwalk

15

Vous pouvez utiliser AJAX pour envoyer une requête POST si vous ne voulez pas de formulaires.

En utilisant la méthode jquery $.post il est assez simple:

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

comment puis-je faire cela? – Samuel

+0

C'est javascript. AJAX = Javascript asynchrone et XML – Gazler

+0

@Samuel, maintenant si vous dites que pas de javascript est autorisé alors les choses deviennent plutôt impossible :-) –

5

jetez un oeil à la documentation php pour ces fonctions que vous pouvez envoyer après les avoir utilisées.

fsockopen() 
fputs() 

ou simplement utiliser une classe comme Zend_Http_Client qui est également basé sur socket-conenctions.

a également trouvé un neat example en utilisant google ...

8

Envoyer vos données avec la session plutôt que la poste.

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

Sur la page où vous recevez la demande, si vous avez absolument besoin de données POST (certaines logiques bizarre), vous pouvez le faire somwhere au début:

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

Les données de poste seront valables exactement comme s'il était envoyé avec POST.

Ensuite, détruisez la session (ou supprimez simplement les champs si vous avez besoin de la session à d'autres fins).

Il est important de détruire une session ou de désactiver les champs car, contrairement au POST, SESSION restera valide jusqu'à ce que vous le détruisiez explicitement ou jusqu'à la fin de la session du navigateur. Si vous ne le faites pas, vous pouvez observer des résultats étranges. Par exemple: vous utilisez sesson pour filtrer certaines données. L'utilisateur active le filtre et obtient des données filtrées. Après un moment, il revient sur la page et s'attend à ce que le filtre soit réinitialisé, mais ce n'est pas le cas: il voit toujours des données filtrées.

1

utiliser simplement: 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); 

Reference: ma réponse à une question similaire: