2010-08-28 7 views
0

Il existe une intégration avec une API pour la gestion de cours en ligne en direct. L'API nous a demandé d'afficher un formulaire sur leur site avec un paramètre appelé customer_token comme champ de saisie. Il est utilisé pour l'authentification par l'API et un jeton est affecté à chaque site client. Le jeton client est en fait une valeur hachée du nom de domaine ou IP ou quelque chose. Maintenant, après l'intégration, ils veulent que je cache le champ de saisie customer_token pour qu'il soit accessible via le firebug de mozilla et des outils similaires, car tout le monde peut voir le jeton et envoyer un formulaire similaire à l'API et accéder au service de l'API. Inutile de dire que l'API n'est pas développée par certains experts. Ils n'ont pas réalisé le problème avant et ce n'est pas une API largement utilisée.Comment poster un formulaire sur mon serveur, puis sur API, au lieu de poster directement (pour des raisons de sécurité)?

J'ai posé une question précédemment sur Best way to hide a form input field from being accessed using firebug? et j'ai réalisé qu'il n'est pas possible de cacher des informations par une méthode get/post. Quelqu'un m'a demandé si la demande est directement envoyée à l'API, ou d'abord à mon serveur ou quelque chose?

Veuillez expliquer comment il résout le problème de sécurité et comment l'implémenter?

Merci, Sandeepan

Répondre

0

Vous pourriez envoyer à votre serveur, qui dans un script, affiche tous les paramètres à l'action de forme API, mais avec le customer_token ajouté dans votre script, côté serveur, que les clients peuvent ne vois pas.

Donc, vous avez votre forme originale:

<form action="http://someapi.com/blah" method="POST"> 
    <input type="hidden" name="customer_token" value="foo"> 
    <input type="text" name="whatever"> 
    ... 
</form> 

Et utiliser:

<form action="myapiblah.php" method="POST"> 
    <input type="text" name="whatever"> 
    ... 
</form> 

Notez qu'il n'y a pas customer_token dans le second exemple. Ensuite, dans myapiblah.php - changez le nom évidemment, en particulier en fonction de la langue côté serveur que vous utilisez. Je pourrais être en mesure de fournir des exemples plus précis si vous me dites ce que vous utilisez - utiliser quelque chose comme ce pseudo-code:

parameters = $_POST; 
parameters['customer_token'] = 'foo'; 
send_http_request('POST', 'http://someapi.com/blah', parameters); 

Vous aurez besoin de regarder les détails de ce qu'il faut utiliser pour send_http_request.

En PHP, vous feriez quelque chose comme ça, si vous pouvez utiliser les choses pecl_http dans PECL:

$params = $_POST; 
$params['customer_token'] = 'foo'; 

$req = new HttpRequest('http://someapi.com/blah', HttpRequest::METH_POST); 
$req->addQueryData($params); 
try { 
    $r->send(); 
    if ($r->getResponseCode() == 200) { 
     // success! 
    } 
    else { 
     // got to the API, the API returned perhaps a RESTful response code like 404 
    } 
} 
catch (HttpException $ex) { 
    // couldn't get to the API (probably) 
} 
+0

c'est ce que je cherchais .. Je ne connaissais pas la fonction send_http_request. Et oui je travaille aussi sur PHP. Merci beaucoup. –

+0

@sandeepan: Il n'y a pas vraiment de fonction 'send_http_request' - je l'utilisais simplement dans psuedocode. :) Vous devriez, cependant, être en mesure de construire sur le PHP à la fin de la réponse. –

0

la demande que vous vous est juste! le formulaire va-t-il d'abord au serveur web? ce moyen est le site posté sur une URL normale pour laquelle apache ou un autre serveur web prend la demande ou le formulaire va à un service spécifique (comme un serveur web, qui est aussi seulement un service qui écoute sur un port - port 80 pour les serveurs web, la plupart). Si vous masquez un champ dans un formulaire Web, il est inutile. Si vous jetez un oeil sur le code source du site, vous pouvez toujours voir le champ caché.

Questions connexes