11
votes

Ajax uniquement accès

J'ai récemment commencé à coder les scripts pris en charge fortement ajax en PHP, la chose est, les fichiers accédés par les appels AJAX peuvent également être utilisés directement, comment désactiver cela?


0 commentaires

5 Réponses :


22
votes

Vous ne pouvez pas empêcher de manière fiable cela de se produire. La clé est vraiment de ne pas envisager une personne accédant à ce fichier directement en tant que problème de sécurité - planifiez pour cela possible et vous serez dans un endroit beaucoup plus sûr.

Certaines personnes peuvent recommander un code qui ressemble à ceci (ou similaire): P>

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) 
     && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    // more code here
}


1 commentaires

Tache sur. Vous pouvez également passer un paramètre (E.G. ? AJAX ), mais c'est encore plus facile à utiliser.



0
votes

Il n'y a aucun moyen d'interdire directement l'accès. Étant donné qu'une requête peut toujours être fabriquée pour correspondre à tous les critères que vous proposez.

Si XMLHTTPQUEST est utilisé pour interroger le serveur, il ajoute une en-tête pouvant être détectée à l'aide de quelque chose comme: P>

/* AJAX check  */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
  //Do something here
}


0 commentaires

-1
votes

Utilisez des sessions dans votre application.

Édition:

  1. enregistrer votre site dans une session, j'utilise Uuids pour cela.

  2. Définissez un cookie avec la même valeur que vous utilisez dans la session.

  3. Envoyez votre demande Ajax avec un paramètre qui inclut également cette valeur.

  4. comparer les valeurs de la session, le cookie et le paramètre.


1 commentaires

Je ne t'ai pas voté, mais ce n'est toujours pas un moyen fiable d'y aller. Il peut être très pratique de mettre en œuvre, mais peut également être spoofé.



6
votes

Au fur et à mesure que d'autres personnes ont suggéré dans leurs réponses, cela n'est pas possible. Ceci est dû à l'un des principes de piliers de la sécurité informatique: vous ne pouvez jamais faire confiance au client. C'est pourquoi nous validons toutes les entrées du client, etc.

Au lieu d'essayer de bloquer d'autres clients d'accéder à vos services, passez plutôt à la rédaction de services Web défensive. Signification, assurez-vous que les utilisateurs malveillants ne peuvent pas glisser des injections ni d'autres attaques grâce à votre logique professionnelle. Ex., Assurez-vous que tous les courriels sont valides, les gens ne sont pas achetés à des articles pour des dollars négatifs, etc.

Oh, et le fait que les services Web sont ouverts est une bonne chose! Vous fournissez une API ouverte à vos utilisateurs, ce qui est très propre! Peut-être que au lieu d'essayer de verrouiller votre communauté, vous l'embrassez - donnez-leur une documentation sur la manière d'interfacer avec vos services et de créer davantage de clients. Au lieu de vous acheter le SDK iPhone et le temps d'apprentissage du temps d'apprentissage C, l'un de vos utilisateurs pourrait.


1 commentaires

C'est possible, mais pas fiable. Autre que cela, tous les points valides



0
votes

Peut-être que vous devriez utiliser une technique XSS-DEFENSE, comme en passant une clé sécurisée avec la demande Ajax. Et ne donner que la clé du JavaScript qui fait des requêtes asynchrones avec la page chargée.

<script type="text/javascript">
    window.csrf_key = '<?php $user->getCsrf(); ?>';
</script>


0 commentaires